Задержка выполнения скрипта со Start-Sleep Powershell


22 ноября 2019


Как создавать таймер со Start-Sleep в Powershell для задержки в скриптах

При использовании скриптов часто бывает необходимость установки интервала выполнения между одной частью программы и другой. Это можно назвать паузами, но чаще они имеют название содержащие sleep и такая же команда есть в Powershell. Один из примеров использования таких задержек - это поисковики. Когда мы часто выполняем запросы к одному сайту может появится каптча и что бы этого избежать нужно использовать задержку.

Синтаксис командлета следующий:

Start-Sleep -Seconds 5

Кроме длительности задержки в секундах мы можем указывать миллисекунды:

sleep -Milliseconds 5

Sleep - это алиас на основную команду.

Параметров для минут и часов нет, но вы можете выполнять такие операции в качестве выражений:

$timeout = 2
Sleep -Second ($timeout * 60)

Если вы хотите добавить больше логики командлету, например добавив параметр Hours (часы), можете создать функцию типа этой:

function Start-SleepMinutes ($Seconds, $Minutes, $Hours){
        if ($Seconds){Start-Sleep -Seconds $Seconds}
        elseif ($Minutes){Start-Sleep ($Minutes*60)}
        elseif ($Hours){Start-Sleep ($Hours*60*60)}
}
Start-SleepMinutes -Seconds 2

Более подробно о создании функций в Powershell мы писали раннее. 

Параметр по умолчанию секунды и он будет первый и он примет значения из конвейера, правда я не знаю кому это может понадобиться:

$timer = @(1,2,3,4)
$timer | sleep

Такую команду можно использовать для подсчета роста использования ресурсов каким-нибудь процессом:

$result = Get-Process -Name chrome | Measure-Object -Sum WS
sleep 10
$result2 = Get-Process -Name chrome | Measure-Object -Sum WS
$result.Sum - $result2.Sum
...

Теги: #powershell


Популярные тэги
Каналы
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.