Function IsAlive()

Die Funktion IsAlive() prüft, ob ein Computer auf ping.exe antwortet und gibt dann entweder true
oder false zurück. Als Parameter wird ein Rechnername übergeben.

Function IsAlive(ByVal strServer)
    On ERROR Resume Next
    Dim pos1, pos2
    
    Set oExec = WshShell.Exec("ping -n 1 -w 1000 " & strServer)
    if Err.number then
        PrintLog Err.Number, vbTAB & "ERROR at Set oExec = WshShell.Exec(ping -n 1 -w 1000) " _
          & strServer
        exit Function        
    end if
    strPingResult = LCase(oExec.StdOut.ReadAll)
    If InStr(strPingResult, "ttl=") Then
        pos1 = InStr(strPingResult,"[")
        pos2 = InStr(strPingResult,"]")
        strIP = Mid(strPingResult,pos1,pos2-pos1+1)
        Set oExec = nothing
        IsAlive = True
    Else
        strIP = strPingResult
        Set oExec = nothing
        IsAlive = False
    End If
End Function

Wir deklarieren IsAlive() als Funktion, die einen boolschen Wert (true oder false) zurückgibt.

Mit WshShell.Exec("ping -n 1 -w 1000 " & strServer) wird ein Ping ausgeführt, und die Ausgabe über oExec.StdOut.ReadAll in die Variable strPingResult gespeichert.
Eine einfache Prüfung, ob in der Variablen strPingResult der String "ttl=" vorkommt, entscheidet die Frage IsAlive?
In die global festgelegte Variable strIP wird entweder die IP-Adresse (nur IP V4) extrahiert oder die Ausgabe von Ping gespeichert.

Aufrufbeispiel:
If IsAlive("MyServer01") Then
    wscript.echo "MyServer01 hat die IP " & strIP
End If

Scripting Basics


Hinweis:
Die WMI Klasse NetDiagnostics aus dem Namespace root\CIMV2 hat eine Methode Ping, die als Ausgabe true oder false liefert.
Allerdings steht das nur ab XP bzw. Server 2003 zur Verfügung.

Unter Vista und Server 2008 muss dem Ping Kommando noch der Parameter /4 (IP 4) mitgegeben werden, damit die Auswertung so funktioniert, wie im Skript gezeigt.