Windows: Dauerping mit Protokollierung von Fehlern

Mitunter muss oder möchte man über einen längeren Zeitpunkt mittels Ping die Verbindung zu einem anderem Netz oder Computer prüfen. Das kann man zwar einfach mittels

ping <IP oder Host> -t

realisieren, möchte man allerdings nur die Fehler protokollieren, kann das mittels eines Skripts erledigt werden.

Anbei das Listing:

@echo off

cls

echo.
echo Ping-Test wird ausgefuehrt ...
echo.

rem Konfiguration

 set ip=

rem Protokoll erstellen

 echo Ziel-IP-Adresse: %ip% > Report.txt
 echo. >> Report.txt
 echo Startzeitpunkt: %date% - %time% >> Report.txt
 echo. >> Report.txt

:schleife

 ping %ip% -n 1 -w 1000 | find "TTL" > nul

 rem errorlevel==0 Ok
 rem errorlevel==1 Fehler

 if %errorlevel%==1 echo %date% - %time% - Error >> Report.txt

 timeout /t 1 /nobreak > nul

goto schleife

In Zeile 11 muss die IP-Adresse oder der Hostname des Ziels eingetragen werden. Das Skript ansich läuft in Dauerschleife und protokolliert neben dem Startzeitpunkt und dem Ziel nur die Fehler mit Zeitstempel. Jede Sekunde wird ein Ping abgesetzt. Abgebrochen wird das Skript durch „Strg+c“.

Tipp: Möchte man das Fehler-Protokoll live beobachten, kann WinTail verwendet werden.

Update 20.03.2018

Das Skript um “ | find „TTL“ erweitert, siehe dazu:

Windows: Der Ping-Rückgabewert ist mitunter auch bei Nichterreichbarkeit 0

Update 01.02.2019

Kleiner Tipp am Rande: Man kann das Ganze einfach umdrehen, soll heißen: Statt das Fehler protokolliert werden, die Erreichbarkeit erfassen. Hilfreich ist das um z.B. zu sehen, ab wann ein gestörter Internetanschluss wieder verfügbar oder ein System nach einem Neustart wieder erreichbar ist. Man muss lediglich die Zeile

if %errorlevel%==1 echo %date% - %time% - Error >> Report.txt

auskommentieren („rem“ voran stellen) und folgende Zeile einfügen:

if %errorlevel%==0 echo %date% - %time% - Online >> Report.txt

2 Kommentare

  • Das Problem ist jetzt allerdings, dass mit der Erweiterung vom 20.03.2018 der Rückgabewert (%ErrorLevel%) des Befehlt „find“ statt des pings ausgewertet wird – und der ist, wenn das Stichwort „TTL“ eben NICHT in der Ping-Ausgabe auftaucht, 0, was vom Skript als Ping-Fehler interpretiert wird, es aber nicht ist.

    Also besser vielleicht die Ausgabe in einer Variablen merken und lieber später, bei VERMEINDLICHEM Fehl-Alarm (Ping-ErrorLevel = 0) auswerten?

    Ich habe für mich die TTL-Sache einfach mal ausgeblendet und kann mit Ihrem Skript nun prüfen, ob meine PowerLine-LAN-Verbindung stabil ist. DANKE! 🙂

  • Das stimmt so nicht, „find“ gibt „0“ zurück, wenn der Suchbegriff gefunden wird, wird er nicht gefunden wird eine „1“ zurückgegeben. Das kann man ganz einfach selbst prüfen, z.B.:

    C:Usersaweber>ping 192.168.0.1 | find "TTL"
    Antwort von 192.168.0.1: Bytes=32 Zeit=1ms TTL=64
    Antwort von 192.168.0.1: Bytes=32 Zeit=3ms TTL=64
    Antwort von 192.168.0.1: Bytes=32 Zeit=1ms TTL=64
    Antwort von 192.168.0.1: Bytes=32 Zeit=1ms TTL=64

    C:Usersaweber>echo %errorlevel%
    0

    C:Usersaweber>ping 192.168.22.1 | find "TTL"

    C:Usersaweber>echo %errorlevel%
    1

    Pingt man erst eine IP-Adresse an, die es gibt, wird eine „0“ zurückgegeben, pingt man dann eine IP-Adresse an, die es nicht gibt, kommt eine „1“.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.