Помните всегда золотое правило: будьте всегда осторожны со временем !(сравнение времени / зоны, взгляд в прошлое / будущее, временные метки и т. д.).
Также не стоит использовать посторонние переменные.Вывод может быть перенаправлен непосредственно в сценарий (см. Пример).
Ваш сценарий имеет проблему с 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