Da kann man Fehler suchen: Ping kann man recht gut verwenden, um die Erreichbarkeit von entfernten Computern zu prüfen. Möchte man dies in einem Skript tun und wertet dabei den Rückgabewert (aka Errorlevel) aus, kann man dabei zu unerwarteten Ergebnissen kommen.

Es könnte so einfach sein:

ping <hostname/ip>
if %errorlevel%==0 machirgendwas
bzw.
if %errorlevel%==1 machirgendwasanderes

Erwarten würde man, das eine “0” dabei herauskommt, wenn das Ziel erreichbar ist und eine “1” wenn der Ping nicht erfolgreich war. Allerdings kommt mitunter auch eine “0” dabei raus, wenn es keine Antwort gibt bzw. der eigene PC vermeldet, dass das Ziel nicht erreichbar sei. Die genauen Hintergründe und Ursachen für die aus meiner Sicht nicht immer richtige “0” habe ich nicht weiter untersucht.

Als kleine Abhilfe kann man die Ausgabe von “Ping” durch “Find” auf das Vorhandensein eines Schlüsselworts prüfen und den Rückgabewert von “Find” auswerten:

ping <hostname/ip> | find "TTL"

if %errorlevel%==0 machirgendwas
bzw.
if %errorlevel%==1 machirgendwasanderes

TTL (Time to Live) gibt es nur, wenn wirklich eine Antwort vom Ziel gekommen ist:

C:\Users\andy>ping 192.168.0.1

Ping wird ausgeführt für 192.168.0.1 mit 32 Bytes Daten:
Antwort von 192.168.0.1: Bytes=32 Zeit=4ms TTL=64
Antwort von 192.168.0.1: Bytes=32 Zeit=2ms TTL=64
Antwort von 192.168.0.1: Bytes=32 Zeit=2ms TTL=64
Antwort von 192.168.0.1: Bytes=32 Zeit=2ms TTL=64

Ping-Statistik für 192.168.0.1:
 Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
 (0% Verlust),
Ca. Zeitangaben in Millisek.:
 Minimum = 2ms, Maximum = 4ms, Mittelwert = 2ms

Folglich ist der Rückgabewert von “Find” eine “0”. Wird “TTL” nicht gefunden, lautet der Wert “1”.