用於查明主機是否啟動或關閉的批次腳本

用於查明主機是否啟動或關閉的批次腳本

我需要掃描 IP 範圍 172.18.xx 到 172.25.xx 內的網路中的多個系統,並檢查每個系統是否處於活動狀態,然後將結果轉儲到檔案中。以下是腳本:

@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
)))

但是,結果得出的結論是,即使某些 IP 位址未使用,每個系統仍處於「UP」狀態。

劇本有問題嗎?

答案1

您的腳本中的問題對於批次腳本來說是一個非常奇怪的事情。要在 IF 或 FOR 中更新環境變量,您必須使用setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION!var!。如果您很好奇,可以在 中進一步解釋這種荒謬性(如果您不將 setlocal 行包含在 !var! 中會發生什麼)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
)))

如果您只想要那些已上線的。嘗試這個

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
    )
)))

答案2

我建議香料廠(我在查看你的問題後建議這樣做https://networkengineering.stackexchange.com/questions/6993/tool-or-script-for-collecting-network-inventory)。您需要的所有詳細資訊都可以透過Spiceworks 庫存工具取得。

答案3

我不知道你要檢查多少個系統..找到了正確的解決方案這裡..如果您發現這樣做很容易,請接受這個答案...

For /f %%i in (testservers.txt) do ping -n 1 %%i >>state.txt

**在 testservers.txt 中包含所有 IP

答案4

我會使用類似的工具憤怒的IP掃描器來做這項工作。當有很多其他工具可以完成完全相同的事情時,編寫腳本似乎毫無意義。

相關內容