#powershell #scripting
#powershell #сценарии
Вопрос:
Я хочу запустить скрипт при сравнении 2 разных временных наборов. Сценарий должен выполняться только с интервалом в 5 минут до установленного времени.
Example:
$CurrentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$Time2 = "2020-10-05 13:20:00"
Как мне написать «Запускать сценарий, только если $ currentTime за 5 минут до $ Time2 ??? «
if($CurrentTime ??5min less than?? $Time2){
Write-Host "Time match"
} else {
Write-Host "Time does not match"
}
Ответ №1:
При запуске -format
Get-Date
командлета возвращаемое значение становится a String
, и если вы не задаете никакого форматирования, возвращаемое значение является DateTime
объектом. Затем, не форматируя выходные данные в a String
, вы можете выполнять некоторые операции с DateTime
объектом, такие как сложение или вычитание. Просто не забудьте создать другой DateTime
объект из String
того, который вы хотите сравнить (в данном случае это $Time2
.).
$CurrentTime = Get-Date
$Time2 = Get-Date -Date "2020-10-05 13:20:00"
Однако, поскольку $CurrentTime
объект содержит информацию с точностью до миллисекунды, редко возможно сравнить эти два объекта с equals
оператором. Что я хотел бы сделать, так это выбрать окно сравнения, например, 1 минута, а затем проверить, похожи ли эти два объекта друг на друга в течение 1 минуты. окно. В этом случае это может быть похоже $CurrentTime
на то, что находится в окне на 5 или 6 минут меньше $Time2
. Затем сценарий должен содержать что-то вроде:
if($CurrentTime.AddMinutes(6) -gt $Time2 amp;amp; $CurrentTime.AddMinutes(5) -lt $Time2){
Write-Host "Time match"
}else{
Write-Host "Time does not match"
}
Вы можете сузить окно до уровня секунд и вместо этого сказать что-то вроде приведенного ниже.
if($CurrentTime.AddSeconds(360) -gt $Time2 amp;amp; $CurrentTime.AddSeconds(330) -lt $Time2){
Write-Host "Time match"
}else{
Write-Host "Time does not match"
}
Дайте мне знать, если это вам поможет!