пинг PowerShell непрерывный в течение определенной продолжительности и сохранения журнала - PullRequest
0 голосов
/ 11 сентября 2018

Я новичок в powershell при поиске для проверки моего интернет-соединения я нашел этот простой код

    ping google.com -t | Select-String "Reply" | foreach $_ { $a = Get-Date$a.ToString() + " " + $_ } | Out-File  "C:\users\"your account"\Documents\pingLog$((get-date).tostring("HHmmss")).txt"

попробуй и добейся успеха, но я хочу установить ping на определенную продолжительность, скажем, около 30 минут или 1 час, поэтому я пытаюсь изменить код с помощью этого

     $stopTime = (Get-Date).AddMinutes(30)
     $results = do {
     $now = Get-Date
     ping google.com -t | Select-String "Reply" | foreach $_ { $a = Get-Date
     $a.ToString() + " " + $_ } 
     } 
     until ($now -ge $stopTime)

     $results | Out-File  "C:\users\"your account"\Documents\pingLog$((get-date).tostring("HHmmss")).txt"

но нет результата или вывода в txt.

Я просто хочу пропинговать около 30 минут или 1 часа и остановиться, сохранить результат (не только ответить, но включить rto и недоступен), чтобы зарегистрировать и запланировать его с расписанием задач. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 11 сентября 2018

Помните всегда золотое правило: будьте всегда осторожны со временем !(сравнение времени / зоны, взгляд в прошлое / будущее, временные метки и т. д.).

Также не стоит использовать посторонние переменные.Вывод может быть перенаправлен непосредственно в сценарий (см. Пример).

Ваш сценарий имеет проблему с ping -t.Это означает, что он должен запрашивать сервер, пока не будет указан ctrl + break.Поведение команды ping по умолчанию в Windows - выкладывать 4 ответа.Вы можете изменить этот beaviour с параметром -n - цикл выполняется через powershell.Нет необходимости использовать -t для внутреннего цикла ping.

Я бы использовал New-TimeSpan, который дает вам разницу в минутах, если вы используете .minutes

Править дальнейшее упрощение скрипта

Теперь вам не нужно добавлять какое-либо время, просто проверьте, находится ли текущее время в допустимых пределах.Я добавил также реальное время запуска скрипта (вы можете получить другую метку времени из команды ping).

 # 1 minute
 $limit_in_minutes = 1
 # path to log
 $log_file = '<path_to_log>\time.log'
 # clear the log file before running again
 fc > $log_file

 $start_timer = Get-Date
 Do {
    $current_time = Get-Date
    ping google.com -n 1 | Select-String "Reply" | foreach $_ { $a = Get-Date; $a.ToString() + " " + $_ } | Out-File -Append -Encoding UTF8 -FilePath  $log_file
    # normally the output of New-TimeSpan is a String but you need an Integer to be able to compare it
    $running_minutes = [int]((New-TimeSpan –Start $start_timer –End $current_time).minutes) 
    $running_seconds = [int]((New-TimeSpan –Start $start_timer –End $current_time).seconds) 
    Write-Output  "Running for: $($running_minutes)m:$($running_seconds)s" | Out-File -Append -Encoding UTF8 -FilePath  $log_file
 } Until ($running_minutes -ge $limit_in_minutes)

Вот сокращенный файл журнала:

   11.09.2018 16:10:35 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:0s
    11.09.2018 16:10:35 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:0s
    11.09.2018 16:10:35 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:0s
    11.09.2018 16:10:35 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:0s
    11.09.2018 16:10:36 Reply from 172.217.168.78: bytes=32 time=47ms TTL=57
    Running for: 0m:0s
    11.09.2018 16:10:36 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:1s
    11.09.2018 16:10:36 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:1s
    11.09.2018 16:10:36 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:1s
    11.09.2018 16:10:36 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
    Running for: 0m:1s

...

Running for: 0m:58s
11.09.2018 16:11:33 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
Running for: 0m:58s
11.09.2018 16:11:34 Reply from 172.217.168.78: bytes=32 time=47ms TTL=57
Running for: 0m:58s
11.09.2018 16:11:34 Reply from 172.217.168.78: bytes=32 time=47ms TTL=57
Running for: 0m:59s
11.09.2018 16:11:34 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
Running for: 0m:59s
11.09.2018 16:11:34 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
Running for: 0m:59s
11.09.2018 16:11:34 Reply from 172.217.168.78: bytes=32 time=47ms TTL=57
Running for: 0m:59s
11.09.2018 16:11:35 Reply from 172.217.168.78: bytes=32 time=48ms TTL=57
Running for: 0m:59s
11.09.2018 16:11:35 Reply from 172.217.168.78: bytes=32 time=47ms TTL=57
Running for: 1m:0s
...