Die Aufgabe war, einen Server für eine bestimmte Zeit anzupingen um festzustellen, ob und wann die Verbindung genau abbricht.
Hier ein „Quick & Dirty“ geschriebenes Batchscript, daß diese Aufgabe erledigt.
@ECHO OFF
:: ############################################################################
:: Dieses Script pingt fuer bis zu drei Stunden einen vorgegebenen Rechner an,
:: um die Verbindung zu pruefen. Das Ergebnis wird in ein Logfile geschrieben
:: ############################################################################
:: Parametervorgaben - Bitte pruefen bzw. anpassen
SET "PINGZIEL=192.168.178.22"
SET "STD1=09"
SET "STD2=10"
SET "STD3=11"
SET "LOGFILE=Pingtest.log"
:: Zielpfad fuer das Logfile (%~dp0 = Aktueller Pfad des Scriptes)
SET "PFAD=%~dp0"
:: Schleifendurchlauf / Prueft ob das akutelle Zeitfenster gegeben ist und pingt
:: in Logfile / Mit Ablauf des Zeitfensters wird dieses Script beendet
:PINGSCHLEIFE
:: Zeitstempel erstellen, dabei Sonderzeichen entfernen
SET ZEITSTEMPEL=%date%_%time%
SET ZEITSTEMPEL=%ZEITSTEMPEL::=-%
SET ZEITSTEMPEL=%ZEITSTEMPEL:.=-%
FOR /F "delims=:" %%a IN ('time /t') DO SET STUNDE=%%a
IF %STUNDE%==%STD1% GOTO WEITER
IF %STUNDE%==%STD2% GOTO WEITER
IF %STUNDE%==%STD3% GOTO WEITER
GOTO ENDE
:WEITER
ECHO %ZEITSTEMPEL% >> "%PFAD%%LOGFILE%"
PING %PINGZIEL% -n 1 >> "%PFAD%%LOGFILE%"
ECHO -------------------------------------------------- >> "%PFAD%%LOGFILE%"
GOTO PINGSCHLEIFE
:ENDE
Alternativ kann man unter :WEITER auch folgendne Code einsetzen:
FOR /F "tokens=*" %%i in ('PING %PINGZIEL% -n 1^|Find /i "Antwort"') DO @SET PINGANTWORT=%%i > nul
SET PINGOK=%PINGANTWORT:~0,7%
IF %PINGOK%==Antwort ECHO %ZEITSTEMPEL% - %PINGANTWORT% >> "%PFAD%%LOGFILE%"
Wobei diese Lösung im geöffneten DOS-Fenster unendliche viele Fehlermeldungen ausgibt, die für die Funktion aber nicht relevant sind.
Hier liegt es wohl daran, daß die Ausgabe auch erfolgt, wenn von PING noch nichts zurückgekommen ist.
Als letzte Alternative kann unter :WEITER noch folgender Code verwendet werden:
PING %PINGZIEL% -n 1 >nul
IF %errorlevel% EQU 0 ( SET "PINGOK=OK" ) ELSE ( SET "PINGOK=NOK" )
ECHO %ZEITSTEMPEL% - Ping zu %PINGZIEL% war %PINGOK% >> "%PFAD%%LOGFILE%"
Wobei dieser Code (nur kurz getestet) nur dann funktioniert, wenn das Ping wirklich keine Rückmeldung gibt.
In manchen Netzwerk (-konfigurationen) wird allerdings dann der Ping vom Server zurückgegeben, Ping läuft also nicht auf einen Fehler.
Verbesserungsvorschläge? Dann her damit… 😉
UPDATE
Windows 7, 8 und 8.1 geben aufgrund der Firewall im Standard keine Antwort wenn der Rechner angepingt wird. Um das (wieder) zu aktivieren, ist folgende Änderung in der Firewall notwendig:
- [Windows-Taste] + [R]
- Im Suchfeld die Bezichnung “Firewall” eintippen und mit [Enter-Taste] bestätigen
- In den Firewall-Einstellungen auf ‚Erweiterte Sicherheit‘ klicken
- Im linken Fenster auf “Eingehende Regeln” klicken
- Im erscheinenden Fenster mit der rechten Maustaste auf den Eintrag ‚Datei- und Druckerfreigabe (Echoanforderung – ICMPv4 eingehend)‘ klicken und diese Regel aktivieren.
Danach sollte ein Ping an diesen Rechner dann auch ein Ergebnis liefern.
Ebenfalls noch ein weiteres sehr kompaktes kleines Script als Alternative. Das Logfile wird dabei gleich als CSV erstellt, ist also z.B. direkt in Excel für weitere Auswertungen verwendbar:
@echo off & setlocal
:: Erreichbarkeitstest eines Clients per 'Dauerping' mit Error-Logdatei zur nachfolgenden Kontrolle.
:: Parametervorgaben
set ip=192.168.1.33
set logdatei=pingtest.csv
:: Logdatei neu erstellen (ACHTUNG = Leeren!)
echo Status;IP-Adresse;Datum;Zeit;Antwortzeit>%logdatei%
:start
set "Erfolg=NOK"
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit=%%i" && set "Erfolg=OK"
>>%logdatei% echo %Erfolg%;%IP%;%date%;%time%;%Zeit% & ECHO %Erfolg% %IP% %date%-%time% %Zeit%
:: Wartezeit bis zum naechsten PING (Wert = ca. Sekunden + 1)
ping /n 11 localhost >nul
goto start
Wird die CSV in Excel geöffnet, können folgende Formeln (in einer beliebigen Zelle) z.b. erste Infos liefern:
Gesamte Anzahl an abgesetzen Pings: =ANZAHL2(A:A)-1
Anzahl der Pings mit Ergebnis OK: =ZÄHLENWENN(A:A;"OK")
Anzahl der Pings mit einer Antwortzeit > 1ms: =(ANZAHL2(A:A)-1)-ZÄHLENWENN(E:E;"1ms ")