みなさん、死活監視してますか?
インフラエンジニアとして働いている皆さん、死活監視ツールは何を使っていますか?
「Zabbix」ですか?「Nagios」ですか?
監視ツールは様々ありますよね。
でもそういったミドルウェアを使用せずにサクッとホストの有無を確かめたいことありませんか?
社内ネットワークで使われていないIPを確認したり、業務確認で大量のping確認があって人力じゃ無理な場合だったり、インフラエンジニアであれば一度はそういう経験をされたことがあるのではないでしょうか?
そんな時に使えるバッチファイルを作成しましたので、ぜひ参考にしてみてください!

ダブルクリックして待つだけ!バッチファイルを置くフォルダに指定はありません!結構便利ですよ!
…こらそこ!!!ExPingで良くね?とか言わない!!!!!
※バッチファイルに関する詳細な説明はしていません。
※本バッチファイルを使用して起きたトラブルについて、筆者は一切の責任は持ちませんので予めご了承ください。
動作環境
OS : Windows11
バージョン : 24H2
※Windows10でも動作確認済みですが、サポート終了間近なのでWindows11で使用推奨です。
使用準備
用意するものは「メインバッチ」と「CSVファイル」の二つだけです。
●メインバッチについて
ファイル名 → なんでも良いです。本記事では「all-ping.bat」にしています。
ファイルの中身 → 後述のメインバッチのコードを全コピーして貼り付けで大丈夫です。文字化けを防ぐためにも文字コードはANSIで設定しておくことをお勧めします。
●CSVファイルについて
ファイル名 → 「all-ping.csv」にしてください。batファイルの中に定義しているので固定ファイル名です。batファイルをいじれる方は適宜変更してください。
ファイルの中身 → こちらも後述しますが、ホスト名とIPアドレスの二つの情報を記述することが出来ます。
動作結果サンプル

進行状況が表示され、完了したら結果が「all-ping_result.csv」に出力されます。
メインバッチ
@echo off
rem ------------------------------------------------------------------
rem 遅延環境変数使用
rem ------------------------------------------------------------------
setlocal enabledelayedexpansion
rem ------------------------------------------------------------------
rem 管理者権限で実行
rem ------------------------------------------------------------------
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
@powershell start-process %~0 -verb runas
exit
)
rem ------------------------------------------------------------------
rem カレントディレクトリ移動
rem ------------------------------------------------------------------
cd /d %~dp0
rem ------------------------------------------------------------------
rem CSVファイル指定
rem ------------------------------------------------------------------
set csvFile=all-ping.csv
rem ------------------------------------------------------------------
rem CSVファイルの確認
rem ------------------------------------------------------------------
if not exist %csvFile% (
echo --------------------------------------------------------------
echo CSVファイルがありません。処理を終了します
echo --------------------------------------------------------------
pause
exit
)
rem ------------------------------------------------------------------
rem pingオプション設定
rem INTERVAL:ping実行間隔[s]
rem PINGCOUNT:ping回数[回]
rem PINGTIMEOUT:pingタイムアウト[ms]
rem ------------------------------------------------------------------
set INTERVAL=60
set PINGCOUNT=1
set PINGTIMEOUT=1000
rem ------------------------------------------------------------------
REM 出力ファイルを初期化(ヘッダー行を追加)
rem ------------------------------------------------------------------
echo hostname,IP_Address,result > all-ping_result.csv
rem ------------------------------------------------------------------
rem 処理1:CSVファイルを1行ずつ読み込む
rem 処理2:読み込んだ対象ホストにpingを打つ
rem 処理3:結果を別CSVファイルに出力する
rem ------------------------------------------------------------------
set count=0
for /f "skip=1 tokens=1,2 delims=," %%A in (all-ping.csv) do (
set "hostname=%%A"
set "IP_address=%%B"
set /a count+=1
echo === !count! 件目の処理中 ===
echo !hostname! へpingを実行中です
ping -n %PINGCOUNT% -w %PINGTIMEOUT% !IP_address! > nul 2>&1
set "ret=!errorlevel!"
rem ------------------------------------------------------------------
rem 結果判定
rem ------------------------------------------------------------------
if "!ret!"=="0" (
set "result=〇"
) else (
set "result=×"
)
echo !hostname!,!IP_address!,!result! >> D:\all-ping_result.csv
echo !hostname! へpingの実行が完了しました
echo === !count! 件目の処理完了 ===
echo.
echo.
timeout /nobreak /t 1 > nul
)
rem ------------------------------------------------------------------
rem 終了処理
rem ------------------------------------------------------------------
echo ------------------------------------------------------------------
echo 全件pingは正常終了し、結果はall-ping_result.csvに出力されました
echo ------------------------------------------------------------------
endlocal
pause
CSVファイル

二列しかない超シンプル構成。
実行結果
実行後は以下のような内容のCSVファイル(ファイル名:all-ping_result.csv)が新たに生成されます。
バッチファイルと同階層に出力され、既にファイルが存在する場合は上書きされますので注意してください。


