はじめに
ネットワークのお仕事をされている方でしたら Exping というツール
を使ったことがある方がいらっしゃると思います。
障害テスト時の通信断時間を確認したりするときに便利ですよね。
ですが、この手のツールを諸事情によりインストールできないことがあるかもしれません。
ここでは、Windows標準のPowerShellだけで似たようなことをやってみます。
検証環境はWindows 10、PowerShe ll5.0ですですが、
特に凝ったこったをやってないので、
Windows 7 PowerShell 2.0でもできるかもしれません。
実装
:psping.ps1
# pingを実行する宛先を指定する
$targets = @"
192.168.1.1
192.168.1.9
192.168.1.8
192.168.1.14
"@ -split "\r\n"
# 設定
# pingを実行する間隔(ミリ秒)
$interval = 500
# 繰り返し数
$repeat = 100
@(1..$repeat) | foreach {
$targets | foreach {
# 間隔をあけるためのsleep
Start-Sleep -Milliseconds $interval
try {
# ping実行
$tc = Test-Connection $_ -count 1 -ErrorAction Stop
#結果の格納
$result = "○"
} catch [Exception] {
# 失敗した場合
$result = "×"
}
# 現在時刻
$datetime = Get-Date -F "yyyy/MM/dd HH:mm:ss.fff"
# CSV形式で結果情報を作成
$row = $result + "," + $datetime + "," + $tc.Address + "," + $tc.ResponseTime
# CSVからオブジェクトを出力
$row | ConvertFrom-Csv -Header @("Result","DateTime","Target","ResponseTime(ms)")
}
} | Out-GridView -Title "Ping Results" # グリッドビューを表示する
Test-Connection コマンドの実装上の事情により、
戻り値のIPv4Addressはあえて表示させてません。
参考:Test-Connectionが遅い理由と対策方法について
実行例
D:\>powershell -File psping.ps1 -ExecutionPolicy RemoteSigned
実装が荒い部分もあり、ベースとしてはこのような感じになるかと思います。