
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 アドレスが未使用であっても、すべてのシステムが「稼働中」であると結論付けられます。
スクリプトに問題はありますか?
答え1
スクリプトの問題は、バッチ スクリプトの非常に奇妙な点にあります。環境変数を IF または FOR 内で更新するには、setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
と を 使用する必要があります!var!
。興味があれば、その不合理さ (!var! を含む setlocal 行を含めない場合に何が起こるか) については でさらに説明されています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 インベントリ ツールで入手できます。これは Windows AD に最適ですが、どちらの方法でも実行できます。
答え3
いくつのシステムをチェックする必要があるのか分かりませんが、解決策を見つけましたここ.. このようにするのが簡単だと思うなら、この答えを受け入れてください...
For /f %%i in (testservers.txt) do ping -n 1 %%i >>state.txt
**testservers.txt にすべての IP を含める
答え4
私は次のようなツールを使います怒ったIPスキャナーこの作業を行うには、スクリプトを作成する必要があります。まったく同じことを実行できるツールが他にもたくさんあるため、スクリプトを作成するのは無意味に思えます。