Batch um mehrere IP-Adressen via Ping auf Erreichbarkeit zu prüfen
Hallo liebe Administratoren Gemeinde.
Ich muss ganz viele IP-Adressen auf Erreichbarkeit prüfen und protokollieren. Ich darf keine Tools benutzen, also benutze ich eine batch.
Die einfachste Methode ist ein zyklischer Ping der im Loop über die Liste der IP-Adressen geht. Dazu gibt es hier viele nützliche Beiträge, leider komme ich mit keinem wirklich weiter (oder ich finde nicht den richtigen...). Die IP Adressen befinden sich in einer Datei namens ip.list und sehen so aus:
10.100.8.10
10.100.8.11
10.100.8.12
...
Ich habe hier im Forum ein super Skript gefunden um EINE IP-Adresse zu prüfen. Das klappt auch wunderbar wenn ich eine IP als fester Parameter in die batch eintrage.
set "IP=10.100.8.10"
:start
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
goto start
Das Ergebnis in der result.log sieht so aus:
10.100.8.10 - 27/04/2016- 8:28:05.73 - JA - 35ms
10.100.8.10 - 27/04/2016- 8:28:05.87 - JA - 33ms
10.100.8.10 - 27/04/2016- 8:28:06.01 - JA - 33ms
Perfekt, genau wie ich es haben will. Nun muss ich nichts weiter tun, als die IP-Adresse aus der ip.list auslesen und der FOR-Schleife übergeben.
Dazu benutze ich eine weitere FOR-Schleife:
:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
)
goto start
Ganz schlicht. Leider funktioniert das nicht. Das Ergebnis in der result.log sieht so aus:
10.100.8.10 - 27/04/2016- 8:34:26.15 -
10.100.8.11 - 27/04/2016- 8:34:26.15 -
10.100.8.12 - 27/04/2016- 8:34:26.15 -
10.100.8.13 - 27/04/2016- 8:34:26.15 -
Wie man sieht, werden die IP-Adressen richtig übergeben, aber die Parameter %Erfolg% und %Zeit% gehen "verloren", oder werden einfach nicht gesetzt... Versuche seit zwei Tagen das Problem zu lösen, mit Schreibweise in einer Zeile, Klammern an verschiedenen Stellen, mit TABs arbeiten usw. Hab hier auch einige verschachtelte scripts gefunden und folgendes versucht:
:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"
set "Zeit="
setlocal enabledelayedexpansion
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
endlocal
)
goto start
Wobei ich sagen muss, dass ich das enabledelayedexpansion und endlocal nicht verstehe. Wie auch immer, das Ergebnis ist das gleiche...
Kann mir jemand sagen, was ich falsch mache?
Vielen Dank im Voraus.
Gruß,
GalinDiesel
Ich muss ganz viele IP-Adressen auf Erreichbarkeit prüfen und protokollieren. Ich darf keine Tools benutzen, also benutze ich eine batch.
Die einfachste Methode ist ein zyklischer Ping der im Loop über die Liste der IP-Adressen geht. Dazu gibt es hier viele nützliche Beiträge, leider komme ich mit keinem wirklich weiter (oder ich finde nicht den richtigen...). Die IP Adressen befinden sich in einer Datei namens ip.list und sehen so aus:
10.100.8.10
10.100.8.11
10.100.8.12
...
Ich habe hier im Forum ein super Skript gefunden um EINE IP-Adresse zu prüfen. Das klappt auch wunderbar wenn ich eine IP als fester Parameter in die batch eintrage.
set "IP=10.100.8.10"
:start
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
result.log echo %IP% - %date%-%time% - %Erfolg%%Zeit%
Das Ergebnis in der result.log sieht so aus:
10.100.8.10 - 27/04/2016- 8:28:05.73 - JA - 35ms
10.100.8.10 - 27/04/2016- 8:28:05.87 - JA - 33ms
10.100.8.10 - 27/04/2016- 8:28:06.01 - JA - 33ms
Perfekt, genau wie ich es haben will. Nun muss ich nichts weiter tun, als die IP-Adresse aus der ip.list auslesen und der FOR-Schleife übergeben.
Dazu benutze ich eine weitere FOR-Schleife:
:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
result.log echo %%f - %date%-%time% - %Erfolg%%Zeit%
goto start
Ganz schlicht. Leider funktioniert das nicht. Das Ergebnis in der result.log sieht so aus:
10.100.8.10 - 27/04/2016- 8:34:26.15 -
10.100.8.11 - 27/04/2016- 8:34:26.15 -
10.100.8.12 - 27/04/2016- 8:34:26.15 -
10.100.8.13 - 27/04/2016- 8:34:26.15 -
Wie man sieht, werden die IP-Adressen richtig übergeben, aber die Parameter %Erfolg% und %Zeit% gehen "verloren", oder werden einfach nicht gesetzt... Versuche seit zwei Tagen das Problem zu lösen, mit Schreibweise in einer Zeile, Klammern an verschiedenen Stellen, mit TABs arbeiten usw. Hab hier auch einige verschachtelte scripts gefunden und folgendes versucht:
:start
FOR /f %%f IN (ip.list) DO (
result.log type nul
set "Zeit="
setlocal enabledelayedexpansion
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
result.log echo %%f - %date%-%time% - %Erfolg%%Zeit%
)
goto start
Wobei ich sagen muss, dass ich das enabledelayedexpansion und endlocal nicht verstehe. Wie auch immer, das Ergebnis ist das gleiche...
Kann mir jemand sagen, was ich falsch mache?
Vielen Dank im Voraus.
Gruß,
GalinDiesel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 302987
Url: https://administrator.de/contentid/302987
Ausgedruckt am: 15.11.2024 um 09:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo GalinDiesel,
also ich habe gerade den Teil
getestet.
Bei mir läuft das ohne Probleme...
Ergebnis:
Allerdings sind die ersten 3 Versuche (1 je IP aus der Liste) auch ohne Ergebnis
also ich habe gerade den Teil
@echo off
:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
>>result.log echo %%f - %date%-%time% - %Erfolg%%Zeit%
)
goto start
getestet.
Bei mir läuft das ohne Probleme...
Ergebnis:
1xx.xx.xx.xx8 - 27.04.2016-10:06:54,65 - JA - 1ms
1xx.xx.xx.xx0 - 27.04.2016-10:06:54,65 - JA - 1ms
1xx.xx.xx.xx1 - 27.04.2016-10:06:54,65 - JA - 1ms
1xx.xx.xx.xx8 - 27.04.2016-10:06:54,72 - JA - 1ms
1xx.xx.xx.xx0 - 27.04.2016-10:06:54,72 - JA - 1ms
Allerdings sind die ersten 3 Versuche (1 je IP aus der Liste) auch ohne Ergebnis
1xx.xx.xx.xx8 - 27.04.2016-10:06:54,38 -
1xx.xx.xx.xx0 - 27.04.2016-10:06:54,38 -
1xx.xx.xx.xx1 - 27.04.2016-10:06:54,38 -
So sollte es gehen:
@echo off
setlocal enabledelayedexpansion
:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do (
set "Zeit= - %%i"
set "Erfolg=JA"
)
>>result.log echo %%f - %date%-%time% - !Erfolg!!Zeit!
)
goto start
Guten Abend,
ich benutze dankenswerter Weise dieses Skript, um die Erreichbarkeit von 6 Galaxy Tab A Tablets zu überprüfen. Jetzt habe ich allerdings ein Problem.
Ein Tablet zeigt immer "Nein" also offline an, obwohl es mit dem Internet verbunden ist und auch über das Netzwerk erreichbar ist. (http Aufruf um auf eine App zuzugreifen funktioniert, mit einem vorher eingestelltem Port.) Hat man diese http Anfrage gemacht, dann wird in dem Ping das Tablet auch als Online angezeigt. Kurz später, beim nächsten Ping (mit 3min Pause) wieder als offline. Alle anderen Tablets werden durchgänig als Online angezeigt.
Ich bin nicht allzu fit im Thema Netzwerk. Ich hoffe mir kann hier einer von euch helfen.
ich benutze dankenswerter Weise dieses Skript, um die Erreichbarkeit von 6 Galaxy Tab A Tablets zu überprüfen. Jetzt habe ich allerdings ein Problem.
Ein Tablet zeigt immer "Nein" also offline an, obwohl es mit dem Internet verbunden ist und auch über das Netzwerk erreichbar ist. (http Aufruf um auf eine App zuzugreifen funktioniert, mit einem vorher eingestelltem Port.) Hat man diese http Anfrage gemacht, dann wird in dem Ping das Tablet auch als Online angezeigt. Kurz später, beim nächsten Ping (mit 3min Pause) wieder als offline. Alle anderen Tablets werden durchgänig als Online angezeigt.
Ich bin nicht allzu fit im Thema Netzwerk. Ich hoffe mir kann hier einer von euch helfen.