LoginSignup
14
21

More than 3 years have passed since last update.

PowerShellだけでExpingのような連続pingを実行する

Last updated at Posted at 2016-07-02

はじめに

ネットワークのお仕事をされている方でしたら 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

psping.gif

実装が荒い部分もあり、ベースとしてはこのような感じになるかと思います。

14
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
21