Powershell: Ping with timestamp

Понадобилось мне пинговать хост с отметками времени - то есть нужно было знать точное время когда начинаются timeout'ы и когда прекращаются.

Для этого на скорую руку был написан Powershell скрипт:

param($h='8.8.8.8') #Входящий параметр, указываем какой хост пинговать, например: ping.ps1 -h 192.168.1.1
$ping = new-object System.Net.NetworkInformation.Ping
$date = Get-Date -format yyyy-MM-dd
While (1 -ne 0) { #бесконечный цикл
 $reply = $ping.send($h)
 $timestamp = "{0:yyyy-MM-dd HH:mm:ss}" -f (get-date) #отметка времени
 if ($reply.status -eq "Success") { #Если хост пингуется
  $reply_time = $reply.RoundtripTime #время ответа
  "$timestamp $h $reply_time"
 }
 else { #если хост не пингуется
  "$timestamp $h timeout"
 }
 Start-Sleep -s 1 #секундная задержка
}

Сохраняем, например, под именем ping.ps1 и запускаем вот так:

ping.ps1 -h google.com
ping.ps1 -h 8.8.4.4

Пинг будет бесконечный. Результат выглядит вот так:

2015-01-06 14:32:32 8.8.4.4 71
2015-01-06 14:32:33 8.8.4.4 71
2015-01-06 14:32:35 8.8.4.4 71
2015-01-06 14:32:41 8.8.4.4 timeout
2015-01-06 14:32:42 8.8.4.4 73
2015-01-06 14:32:43 8.8.4.4 71
2015-01-06 14:32:44 8.8.4.4 72
2015-01-06 14:32:50 8.8.4.4 timeout
2015-01-06 14:32:51 8.8.4.4 71
2015-01-06 14:32:52 8.8.4.4 71
2015-01-06 14:32:53 8.8.4.4 72

Параметр -h указывает что нужно пинговать. Если запустить команду без параметра, то по умолчанию пингуется 8.8.8.8

Понравилось? =) Поделись с друзьями:

Обсудить