a stray sheep

お仕事周りの雑記帳

ping応答チェックをpowershellで

やりたいこと

  • pingを定期的に投げる
  • 時刻(とくに時分秒)を出力する
  • pingの結果は1行で見やすく
  • 色も付けてみる
  • powershellで書く

powershellスクリプト

ping_check.ps1
# ターゲットは引数で指定
$tgt = $Args[0]
Write-Host "$tgt へのping応答チェック"

# 無限ループ
for (;;) {
   $dt = Get-Date
   # pingはオプション無しなので、4回送信
   $rs = ping $tgt

   for($line in $rs) {
      if ($line.Contains("パケット数")){
         if ($line.Contains("損失 = 0")){
            # 損失 = 0、つまりping応答がすべてあった場合、文字を緑色で表示
            Write-Host ($d, $line) -ForegroundColor Green
         }else{
            # 4回のうち1つでも応答がなかった場合、文字を赤くして表示
            Write-Host ($d, $line) -ForegroundColor Red
         }
      }
   }

   # 60秒待機
   Start-Sleep -Seconds 60
}
実行と実行結果イメージ

PS> .\ping_check.ps1 192.168.1.1
192.168.1.1 へのping応答チェック
2023/01/25 10:00:01  パケット数: 送信 = 4、受信 = 0、損失 = 4 (100%の損失)、
2023/01/25 10:01:02  パケット数: 送信 = 4、受信 = 2、損失 = 2 (50%の損失)、
2023/01/25 10:02:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:03:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:03:03  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:04:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:05:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、