WMI Abfrage - Freier Festplattenplatz
Hallo,
habe folgendes Script geschrieben ( zusammen gebastelt
)
arrComputers = Array("servername1", "servername2")
For Each strComputer In arrComputers
WScript.Echo "Server: " & strComputer
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_LogicalDisk WHERE Caption = 'D:'")
For Each objItem in colItems
Wscript.Echo "Freier Platz auf LW D:\ : " & objItem.FreeSpace/1024/1024/1024 & " GB"
Next
Next
Meine Fragen:
Wie kann ich das Ergebnis in ein Textfile schreiben ?
Bisher kommt ja immer ein PopUp Fenster hoch.
Und zur besseren Übersicht: Wie kann ich den Freien Platz auf 2 Nachkomma Stellen begrenzen ?
Gruss Christian
habe folgendes Script geschrieben ( zusammen gebastelt
arrComputers = Array("servername1", "servername2")
For Each strComputer In arrComputers
WScript.Echo "Server: " & strComputer
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_LogicalDisk WHERE Caption = 'D:'")
For Each objItem in colItems
Wscript.Echo "Freier Platz auf LW D:\ : " & objItem.FreeSpace/1024/1024/1024 & " GB"
Next
Next
Meine Fragen:
Wie kann ich das Ergebnis in ein Textfile schreiben ?
Bisher kommt ja immer ein PopUp Fenster hoch.
Und zur besseren Übersicht: Wie kann ich den Freien Platz auf 2 Nachkomma Stellen begrenzen ?
Gruss Christian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 56330
Url: https://administrator.de/forum/wmi-abfrage-freier-festplattenplatz-56330.html
Ausgedruckt am: 23.04.2025 um 15:04 Uhr
10 Kommentare
Neuester Kommentar

WMI ist doof.
Ich habe mich damit mal kurz beschäftigt und es für zu unübersichlich empfunden. Wie man umleitet, kann ich dir nicht sagen.
Es geht aber (lokal) einfacher mit dem Kommandozeilentool fsutil (in XP Prof enthalten), remote mit Hilfe von psexec (ehem. Sysinternals).
fsutil volume diskfree LW: | find "gbarer Bytes" > frei.txt
Es geht aber (lokal) einfacher mit dem Kommandozeilentool fsutil (in XP Prof enthalten), remote mit Hilfe von psexec (ehem. Sysinternals).
fsutil volume diskfree LW: | find "gbarer Bytes" > frei.txt
@ hpdnm
Mit WMI kannst Du Praktisch das gesamte OS steuern. Vielleicht solltest Du Dich etwas mehr damit beschäftigen. Es stimmt allerdings, das es Zeit braucht. Der Lohn ist aber die Mühe Wert.
@chussi
Versuch mal das:
WMI ist doof. Ich habe mich damit mal kurz beschäftigt und es für zu unübersichlich empfunden.
Tolle Aussage...Mit WMI kannst Du Praktisch das gesamte OS steuern. Vielleicht solltest Du Dich etwas mehr damit beschäftigen. Es stimmt allerdings, das es Zeit braucht. Der Lohn ist aber die Mühe Wert.
@chussi
Versuch mal das:
arrComputers = Array("servername1", "servername2")
strDomain = "Meine Domain"
strLogin = "Domain Admin"
strPW = "MeinDomainAdminPasswort"
'strLogin = "Administrator"
'strPW = "MeinAdminPasswort"
Dim textstream, objFSO, GstrLogfile, ITextStream, objLocator, objWMI, strDomain
GstrLogfile = "C:\MeinOrdner\FreeSpace.LOG"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FileExists(GstrLogfile) Then
Set Textstream = objFSO.CreateTextFile(GstrLogfile, True)
Textstream.close
End If
For Each strComputer In arrComputers
WScript.Echo "Server: " & strComputer
Set objLocator = CreateObject("WbemScripting.SWbemLocator") 'Wenn Du es mit diesem Object machst, kannst Du es lokal nicht Testen!
Set objWMI = objLocator.ConnectServer(strComputer, "root\CIMv2", strDomain & "\" & strLogin, strPW)'Anmeldung als Domain Adminstrator
'Set objWMI = objLocator.ConnectServer(strComputer, "root\CIMv2", strComputer & "\" & strLogin, strPW)'lokale Anmeldung als Administrator
WQL = "SELECT * FROM Win32_LogicalDisk WHERE Caption = 'D:'"
Set objWMI = objWMI.ExecQuery(WQL)
For Each intFreeSpace In objWMI
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine strComputer & ";Freier Platz auf LW D:\;" & round(intFreeSpace.FreeSpace/1024/1024/1024,2) & " GB"
TextStream.Close
Next
Next
Schreibst Du wirklich alle Server in ein Array? Habt Ihr nur so wenige?strDomain = "Meine Domain"
strLogin = "Domain Admin"
strPW = "MeinDomainAdminPasswort"
'strLogin = "Administrator"
'strPW = "MeinAdminPasswort"
Dim textstream, objFSO, GstrLogfile, ITextStream, objLocator, objWMI, strDomain
GstrLogfile = "C:\MeinOrdner\FreeSpace.LOG"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FileExists(GstrLogfile) Then
Set Textstream = objFSO.CreateTextFile(GstrLogfile, True)
Textstream.close
End If
For Each strComputer In arrComputers
WScript.Echo "Server: " & strComputer
Set objLocator = CreateObject("WbemScripting.SWbemLocator") 'Wenn Du es mit diesem Object machst, kannst Du es lokal nicht Testen!
Set objWMI = objLocator.ConnectServer(strComputer, "root\CIMv2", strDomain & "\" & strLogin, strPW)'Anmeldung als Domain Adminstrator
'Set objWMI = objLocator.ConnectServer(strComputer, "root\CIMv2", strComputer & "\" & strLogin, strPW)'lokale Anmeldung als Administrator
WQL = "SELECT * FROM Win32_LogicalDisk WHERE Caption = 'D:'"
Set objWMI = objWMI.ExecQuery(WQL)
For Each intFreeSpace In objWMI
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine strComputer & ";Freier Platz auf LW D:\;" & round(intFreeSpace.FreeSpace/1024/1024/1024,2) & " GB"
TextStream.Close
Next
Next

@rubberduck
Entschuldige bitte, dass ich eine eigene Meinung habe, auch wenn sie dir nicht passt.
Ich keinne mein System und weiß, ich wie einfacher und schneller an gewünschte Informationen komme.
Entschuldige bitte, dass ich eine eigene Meinung habe, auch wenn sie dir nicht passt.
Ich keinne mein System und weiß, ich wie einfacher und schneller an gewünschte Informationen komme.
Entschuldigung angenommen ;)
Ich habe nicht Deine Meinung kritisiert.
Mit Shell-Scripting kenne ich mich auch aus und verwende sie auch rege.
Du solltest nur nicht andere Techniken Pauschal verteufeln, nur weil Du vor der Informationsflut wie der Esel vor dem Berg stehst. Das ist alles.
Wenn Du aber echte Scripts schreibst, kannst Du (wenn nötig) den Ein- und Ausgabestrom besser auswerten als Du es mit Shell-Scripting kannst. Ausserdem bist Du viel flexibler.
Ich habe nicht Deine Meinung kritisiert.
Mit Shell-Scripting kenne ich mich auch aus und verwende sie auch rege.
Du solltest nur nicht andere Techniken Pauschal verteufeln, nur weil Du vor der Informationsflut wie der Esel vor dem Berg stehst. Das ist alles.
Wenn Du aber echte Scripts schreibst, kannst Du (wenn nötig) den Ein- und Ausgabestrom besser auswerten als Du es mit Shell-Scripting kannst. Ausserdem bist Du viel flexibler.

Vielleicht habe ich grundsätzlich aus Sicherheitsgründen etwas gegen Scripte auf meinem System?
Ich brauche keine Scripte, um an Informationen zu kommen, ich kenne mich mit der Win32API aus und
stehe auch nicht "vor der Informationsflut wie der Esel vor dem Berg". Mach dir um mich mal keine Sorgen.
Ich brauche keine Scripte, um an Informationen zu kommen, ich kenne mich mit der Win32API aus und
stehe auch nicht "vor der Informationsflut wie der Esel vor dem Berg". Mach dir um mich mal keine Sorgen.
1 ScriptingCenter
2 Windows Script 5.6 Documentation (VBS-Funktionen einfach erklärt)
WMI CIM Studio (WMI Tools) bei Microsoft herunterladen
Scriptomatic (Microsoft gratis)
Systemscripter (Kostenpflichtig)
Scripting für Administratoren (ISBN: 3-86063-979-X)
So. Damit bist Du ausgestattet (jedenfalls bis es vielleicht nur noch PowerShell gibt).
*
Die Frage mit dem Datum:
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";Freier Platz auf LW D:\;" & round(intFreeSpace.FreeSpace/1024/1024/1024,2) & " GB"
*
wql = "select * from Win32_LogicalMemoryConfiguration"
Der Wert für den Memory ist "TotalPhysicalMemory"
Wenn es jetzt keine konkreten Fragen mehr gibt, dann wünsche ich Dir viel Spass beim Üben ;)
2 Windows Script 5.6 Documentation (VBS-Funktionen einfach erklärt)
WMI CIM Studio (WMI Tools) bei Microsoft herunterladen
Scriptomatic (Microsoft gratis)
Systemscripter (Kostenpflichtig)
Scripting für Administratoren (ISBN: 3-86063-979-X)
So. Damit bist Du ausgestattet (jedenfalls bis es vielleicht nur noch PowerShell gibt).
*
Die Frage mit dem Datum:
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";Freier Platz auf LW D:\;" & round(intFreeSpace.FreeSpace/1024/1024/1024,2) & " GB"
FormatDateTime(date,Wert) | |
---|---|
2 | 4 |
vbShortDate | vbShortTime |
wql = "select * from Win32_LogicalMemoryConfiguration"
Der Wert für den Memory ist "TotalPhysicalMemory"
Wenn es jetzt keine konkreten Fragen mehr gibt, dann wünsche ich Dir viel Spass beim Üben ;)
Konform für ein *.csv File:
Wenn Du wirklich zwei Zeilen (C,D) möchtest:

For Each intFreeSpace In objWMI
If intFreeSpace.name = "C:" Then
intC = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
ElseIf intFreeSpace.name = "D:" Then
intD = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
End If
Next
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";C:\;" & intC & " GB;D:\;" & intD & " GB"
TextStream.Close
Next
If intFreeSpace.name = "C:" Then
intC = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
ElseIf intFreeSpace.name = "D:" Then
intD = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
End If
Next
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";C:\;" & intC & " GB;D:\;" & intD & " GB"
TextStream.Close
Next
Wenn Du wirklich zwei Zeilen (C,D) möchtest:
If intFreeSpace.name = "C:" Then
intC = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";C:\;" & intC & " GB"
TextStream.Close
ElseIf intFreeSpace.name = "D:" Then
intD = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";C:\;" & intD & " GB"
TextStream.Close
End If
Hier würde sich eine Funktion zum schreiben in ein TextFile anbieten. Ist vielleicht gar nicht so schlecht zum üben intC = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";C:\;" & intC & " GB"
TextStream.Close
ElseIf intFreeSpace.name = "D:" Then
intD = round(intFreeSpace.FreeSpace/1024/1024/1024,2)
Set textstream = objFSO.OpenTextFile(GstrLogfile, 8, true)
TextStream.WriteLine FormatDateTime(Date,2) & ";" & strComputer & ";C:\;" & intD & " GB"
TextStream.Close
End If