VBS - Variablen bereinigen

ott

Neuling
Thread Starter
Mitglied seit
03.02.2009
Beiträge
251
Moin Kollegen,

ich hänge grad bei einem Problem mit Variablen (glaube ich jedenfalls)
Es geht um folgenden Code:

Die Festplatten von jedem Server in dem Array [servers] werden abgefragt, zusammen mit dem Laufwerksbuchstaben und dem freien Speicherplatz. Wenn alle Server erreichbar sind, funktioniert das auch ohne Probleme.
Wenn aber ein Server nicht erreichbar ist, schreibt das Script die Werte vom zuletzt erfolgreich abgefragten Server in die Liste.

#### CODE ####
'fuer jeden server in array(servers) wird Call RunQuery(server) ausgeführt
for each server in servers
Call RunQuery(server)
Next

Sub RunQuery(Byval server)
On Error Resume Next
wscript.echo server
Set wmi = GetObject("winmgmts:\\" & server & "\root\CIMV2")
Set colItems = wmi.ExecQuery("Select * from Win32_LogicalDisk where DriveType = 3",,48)
For Each oItem in colItems

'Laufwerksbuchstabe
varDeviceid = oItem.deviceid

'freier Speicher in GB
varFreespace = (oItem.freespace/1024/1024/1024)
varFreespace = Round(varFreespace, 2)

'Werte in Datei schreiben
objFile.WriteLine "Server:" & server & "<br>"
objFile.WriteLine "Laufwerk: " & varDeviceid & " " & varFreespace & " GB frei<br>"
Next
End Sub
#### CODE ####

#### AUSGABE####
Server: Server 1 // online, erreichbar
Laufwerk: C: 4,03 GB frei

Server: Server 2 // offline, nicht erreichbar
Laufwerk: C: 4,03 GB frei
#### AUSGABE####

Bei Server 2 sollte sowas wie "offline" oder "nicht erreichbar" stehen, leider habe ich einen Knoten im Kopf und habe keine Ahnung, wie ich das machen soll. Ich hoffe, dass mir hier jemand einen Denkanstoß geben kann.

Gruß,
ott
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Hast du den gesamten Code selbst mit color-Tags formatiert :O ? [ code ] (ohne Leerzeichen) hätts auch getan :d (vorallem weil man da auch Einrückungen hat!)

Ich bin kein VBS-Profi, aber initialisiere die varFreespace einfach vor dem Aufruf mit 0. Dadurch wird die Variable halt bei jedem Funktionsaufruf neu initialisiert und kann nicht mehr den alten Wert haben. Ich weiß nicht wie VBS sich verhält, wenn der Server offline is - aber ggf. kannst dann einfach auf 0 überprüfen und die Ausgabe entsprechend anpassen.
 
Zuletzt bearbeitet:
Hast du den gesamten Code selbst mit color-Tags formatiert :O ? [ code ] (ohne Leerzeichen) hätts auch getan :d (vorallem weil man da auch Einrückungen hat!)
Ja hab ich, mit dem Code Tag wird es aber nicht farbig ;)

Danke, das mit der Prüfung hat mir weitergeholfen. Ich prüfe jetzt erst, ob der Server erreichbar ist und frage erst dann die Daten ab.

Jetzt in Code Ansicht:

Code:
for each server in servers
	Call RunQuery(server)
Next

Sub RunQuery(Byval server)
	On Error Resume Next
	wscript.echo server
	If not ping( server ) Then
		objFile.WriteLine "Server:" & server & " ist nicht erreichbar<br>"
	Else
		Set wmi = GetObject("winmgmts:\\" & server & "\root\CIMV2")
		Set colItems = wmi.ExecQuery("Select * from Win32_LogicalDisk where DriveType = 3",,48)
		For Each oItem in colItems
		
		'Laufwerksbuchstabe
		varDeviceid = oItem.deviceid
		
		'freier Speicher in GB
		varFreespace = (oItem.freespace/1024/1024/1024)
		varFreespace = Round(varFreespace, 2)
		
		'Werte in Datei schreiben
		objFile.WriteLine "Server: " & server & "<br>"
		objFile.WriteLine "Laufwerk: " & varDeviceid & " " & varFreespace & " GB frei<br>"
	next
	End If
End Sub

Function Ping(sComputerName)
   dim objWMIService, colPings, objStatus
   Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
   Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where Address = '" & sComputerName & "'")
   ping = ""
   For Each objStatus in colPings
     If IsNull(objStatus.StatusCode) or objStatus.StatusCode <> 0 Then 
        ping = false
     Else
        ping = true
     End If
   Next
   Set objWMIService = nothing
   Set colPings = nothing
End Function
 
Ersetz mal bei RunQuery Byval durch byref, denn ansonsten ist mir nichts aufgefallen, was den fehler verursachen könnte.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh