
Ich muss mehrere Systeme im Netzwerk im IP-Bereich 172.18.xx bis 172.25.xx scannen und prüfen, ob jedes davon aktiv ist oder nicht, und dann das Ergebnis in eine Datei schreiben. Das Skript ist wie folgt:
@echo off
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)
echo 172.%%x.%%y.%%z is %state% >> state.txt
)))
Das Ergebnis zeigt jedoch, dass alle Systeme aktiv sind, auch wenn einige IP-Adressen nicht verwendet werden.
Irgendwelche Probleme mit dem Skript?
Antwort1
das Problem in Ihrem Skript war eine sehr seltsame Sache mit Batch-Skripten. Um Umgebungsvariablen innerhalb eines IF oder FOR zu aktualisieren, müssen Sie setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
und verwenden !var!
. Wenn Sie neugierig sind, wird die Absurdität (was passiert, wenn Sie diese setlocal-Zeile nicht mit !var einschließen!) weiter unten erklärt set /?
.
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)
echo 172.%%x.%%y.%%z is !state! >> state.txt
)))
Und wenn Sie nur die wollen, die aktiv sind. Versuchen Sie dies
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 -w 1000 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (
set state=UP
echo 172.%%x.%%y.%%z is !state! >> state.txt
) ELSE (
set state=DOWN
)
)))
Antwort2
Ich schlage vorGewürzwerkstatt(Ich schlage dies vor, nachdem ich Ihre Frage gelesen habehttps://networkengineering.stackexchange.com/questions/6993/tool-or-script-for-collecting-network-inventory). Alle Details, die Sie benötigen, sind mit dem Inventarisierungstool von Spiceworks verfügbar. Es eignet sich am besten für Windows AD, kann aber auch auf andere Arten durchgeführt werden.
Antwort3
Ich weiß nicht, wie viele Systeme Sie überprüfen müssen.. Habe eine Lösung gefunden, richtigHier.. Wenn Ihnen das so leicht fällt, akzeptieren Sie diese Antwort …
For /f %%i in (testservers.txt) do ping -n 1 %%i >>state.txt
**alle IPs in testservers.txt einschließen
Antwort4
Ich würde ein Tool wie verwendenWütender IP-Scannerum diese Aufgabe zu erledigen. Es scheint sinnlos, ein Skript dafür zu erstellen, wenn es so viele andere Tools gibt, die genau dasselbe können.