バッチファイルの中で知りたいのは、そのIPのマシンが生きているかどうかなので、結果は「True」か「False」で十分だ。
そこで、Pingの結果をラップしてPowerShellで扱いやすいようにしてみる。
■使い方
> Get-PingResult www.google.com #成功時
Value Reply
----- -----
True {www.l.google.com [66.249.89.104]に ping を送...
> $a = Get-PingResult www.google.com #変数に入れてみる
> $a.Reply
www.l.google.com [66.249.89.104]に ping を送信しています 32 バイトのデータ:
66.249.89.104 からの応答: バイト数 =32 時間 =19ms TTL=57
66.249.89.104 からの応答: バイト数 =32 時間 =21ms TTL=57
66.249.89.104 からの応答: バイト数 =32 時間 =19ms TTL=57
66.249.89.104 からの応答: バイト数 =32 時間 =20ms TTL=57
66.249.89.104 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 19ms、最大 = 21ms、平均 = 19ms
> Get-PingResult www.google.coma #失敗時
Value Reply
----- -----
False ping 要求ではホスト www.google.coma が見つかり...
- function Get-PingResult([String]$IP) {
- $reply = C:\Windows\System32\PING.EXE $IP
- #余分な空白行を削除する
- $reply = $reply | % { if ($_ -ne "") { $_ }}
- #上手くいったかどうかは結果の行数で判断する
- $success = 9
- $result = New-Object psobject
- if ($reply.Length -eq $success) {
- $result | Add-Member -MemberType NoteProperty -Name "Value" -Value $true
- } else {
- $result | Add-Member -MemberType NoteProperty -Name "Value" -Value $false
- }
- $result | Add-Member -MemberType NoteProperty -Name "Reply" -Value $reply
- return $result
- }