Batch-Skript zum Ermitteln, ob ein Host aktiv oder inaktiv ist

Batch-Skript zum Ermitteln, ob ein Host aktiv oder inaktiv ist

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.

verwandte Informationen