PowerShell Задержка - Как приостановить ваш скрипт
Иногда вам нужно будет приостановить или приостановить ваш скрипт PowerShell на несколько секунд. Например, когда вы используете цикл do-while, чтобы проверить, вернулся ли сервер в онлайн. Для этого мы можем использовать командлет PowerShell Start-Sleep. С помощью этой команды мы можем заставить скрипт спать в течение нескольких секунд.
В этой статье я собираюсь привести вам несколько примеров того, как вы можете использовать команду паузы PowerShell.
Использование команды Start-Sleep в PowerShell
Команда start-sleep в PowerShell на самом деле довольно проста в использовании. Нам только нужно определить, как долго мы хотим приостановить скрипт. Мы можем задать время сна в секундах (по умолчанию) или миллисекундах.
Чтобы заставить ваш скрипт PowerShell приостановиться на 2,5 секунды, вы можете сделать следующее:
Suspend the script for 2.5 seconds
Start-Sleep -Seconds 2.5Параметр -Seconds на самом деле не нужен, по умолчанию используются секунды. Так что вы также можете просто указать количество секунд Start-Sleep 5. Но для читаемости предпочтительнее использовать параметр -s или -seconds.
Pause for 5 seconds per loop
Do {
# Do stuff
# Sleep 5 seconds
Start-Sleep -s 5
}
while ($condition -eq $true)
Единственным другим параметром, помимо секунд, являются миллисекунды. Это позволяет вашему скрипту ждать только короткое время.
Pause for 0.1 second per loop
Do {
# Do stuff
# Sleep 100 Milliseconds
Start-Sleep -Milliseconds 100
}
while ($condition -eq $true)Самое распространенное место для использования команды start-sleep - это цикл PowerShell. Но вы можете использовать команду sleep в любом месте вашего скрипта. Единственная проблема заключается в том, что вы, вероятно, предполагаете, сколько времени нужно ждать.
Совет
Вы можете выйти из сна, используя комбинацию клавиш Ctrl + C. Это возобновит вашу сессию PowerShell или сценарий.
Спите до определенного времени
Запуск скрипта PowerShell в течение длительного времени не всегда является лучшим вариантом, но если вам нужно приостановить скрипт PowerShell до определенного времени, то мы можем рассчитать количество секунд для ожидания, используя два объекта даты.
Start-Sleep ((Get-Date "06:00pm") - (Get-Date)).TotalSeconds;Если вы используете этот метод, то будет неплохо добавить предупреждение или сообщение в ваш скрипт, чтобы знать, как долго он будет спать:
$sleepUntil = "06:00pm"
$secondsToSleep = ((Get-Date $sleepUntil) - (Get-Date)).TotalSeconds
Write-Host "Pause script for $secondsToSleep seconcds untill $sleepUntil"
Start-Sleep $secondsToSleepPowerShell сон с индикатором прогресса
Когда вы приостанавливаете сценарий PowerShell с помощью команды start-sleep, вы не увидите ничего происходящего в консоли. Чтобы дать пользователю визуальную обратную связь, вы можете добавить индикаторProgress к вашей команде "сон".
Единственная проблема заключается в том, что вам нужно написать много кода для создания индикатора прогресса.
Что вы можете сделать, так это создать функцию, которая приостановит ваш скрипт на нужное время и покажет индикатор выполнения. Мы используем командлет Write-Progress для этого и рассчитываем процент и оставшееся время в цикле do-while.
Затем вы можете просто вызвать функцию Sleep-Progress, чтобы приостановить выполнение вашего скрипта и показать индикатор прогресса:
Function Sleep-Progress($seconds) {
$s = 0;
Do {
$p = [math]::Round(100 - (($seconds - $s) / $seconds * 100));
Write-Progress -Activity "Waiting..." -Status "$p% Complete:" -SecondsRemaining ($seconds - $s) -PercentComplete $p;
[System.Threading.Thread]::Sleep(1000)
$s++;
}
While($s -lt $seconds);
}
Sleep-Progress 7Заключение
Когда вам нужно приостановить или паузить скрипт PowerShell, то команду Start-Sleep следует использовать. Я надеюсь, что вы нашли эту статью полезной, если у вас есть вопросы, просто оставьте комментарий ниже.
