Мастер Start-Sleep: Пауза скриптов эффективно

Команда PowerShell Start-Sleep или ее псевдоним sleep – это простая команда с единственной целью: приостановить выполнение сценария. При выполнении в консоли PowerShell или в среде PowerShell ISE эта команда приостанавливает выполнение сценария или модуля в сеансе PowerShell до истечения необходимого времени в секундах или миллисекундах.

Эта команда проста, но может быть применена несколькими способами, что позволит нам создавать хорошо написанные сценарии.

Использование Start-Sleep

Использовать команду Start-Sleep крайне просто, ведь в конце концов у нее всего два параметра! Допустим, мне нужно приостановить выполнение сценария, потому что я жду выполнения какого-то другого процесса в среде. Этот процесс занимает примерно 10 секунд, и мне нужно убедиться, что мой сценарий не будет выполняться до завершения этого внешнего события.

Чтобы приостановить выполнение сценария на 10 секунд, я просто использую Start-Sleep -Second 10. Если я хочу быть дотошным, я также могу указать время в миллисекундах, как Start-Sleep -Milliseconds 10000.

Пример использования

Одним из самых распространенных способов использования команды Start-Sleep является вложенный в цикл while. Цикл while – это конструкция в PowerShell, которая выполняет код пока что-то еще происходит. Один из лучших способов использования цикла while – дождаться выполнения какого-то события. Вместо того чтобы просто предполагать, сколько времени займет процесс, и выполнять эту команду напрямую.

Например, возможно, вам нужно подождать, пока файл появится в папке. Возможно, этот файл будет помещен туда другим программным обеспечением. Как только файл появится в папке, вам нужно выполнить некоторый код для его обработки. Этот пример отлично иллюстрирует использование цикла while и Start-Sleep.

В приведенном ниже примере мой код ожидает появления файла C:\File.txt. Если бы это было в сценарии, сценарий приостановился бы до наступления этого события. Технически, нам не нужно использовать Start-Sleep для этого, но если не использовать, этот код может навредить вашему компьютеру. Скорость, с которой он мог бы постоянно проверять этот файл, зависела бы от PowerShell!

Нам не нужно проверять этот файл каждые 0,0455 мс. Вместо этого мы должны замедлить эту проверку и выполнять тест только каждые пять секунд. Замедление работы цикла while – отличное использование команды Start-Sleep.

$filePath = 'C:\File.txt'
while (-not (Test-Path -Path $filePath)) {
    ## Подождать определенный интервал
    Start-Sleep -Seconds 5
}

Для примера использования этой команды с красивым индикатором выполнения, проверьте это.

Source:
https://adamtheautomator.com/start-sleep/