Master Start-Sleep: Pausar Scripts Eficientemente

O cmdlet Start-Sleep do PowerShell ou o alias sleep são cmdlets simples com um único propósito: pausar um script. Quando executado no console do PowerShell, um script executado pelo console ou no PowerShell ISE, o cmdlet simplesmente pausa um script ou módulo na sessão do PowerShell, aguardando até que o tempo necessário em segundos ou milissegundos tenha decorrido.

Este cmdlet é simples, mas pode ser aplicado de algumas maneiras diferentes que permitirão aos roteiristas criar scripts bem escritos.

Uso do Start-Sleep

O uso do cmdlet Start-Sleep é extremamente fácil, afinal, ele possui apenas dois parâmetros! Digamos que eu queira pausar meu script porque estou aguardando a execução de algum outro processo ambiental. Esse processo leva cerca de 10 segundos, e eu preciso ter certeza de que meu script não continuará sendo executado antes que esse evento externo seja concluído.

Para pausar o script por 10 segundos, eu apenas usaria Start-Sleep -Second 10. Se eu quiser ser mais preciso, também posso especificar o tempo em milissegundos como Start-Sleep -Milliseconds 10000.

Contexto de Exemplo

Um dos usos mais comuns deste cmdlet Start-Sleep é dentro de um loop while. Um loop while é uma estrutura no PowerShell que executa código enquanto algo mais está acontecendo. Um dos melhores usos de um loop while é aguardar que algo mais aconteça, em vez de apenas estimar quanto tempo um processo levará e executar este cmdlet diretamente.

Por exemplo, talvez você precise esperar que um arquivo apareça em uma pasta. Talvez esse arquivo seja deixado lá por algum outro software. Uma vez que o arquivo esteja na pasta, você precisa executar algum código contra ele. Este exemplo é uma excelente demonstração do uso de um loop while e Start-Sleep.

No exemplo abaixo, meu código está aguardando que o arquivo C:\File.txt apareça. Se isso estivesse em um script, ele pausaria o script até que esse evento ocorresse. Tecnicamente, não precisamos do Start-Sleep para fazer isso, mas se não for usado, esse código poderia prejudicar seu computador. A velocidade com que poderia verificar continuamente este arquivo dependeria do PowerShell!

Não precisamos verificar este arquivo a cada .0455ms. Em vez disso, devemos diminuir essa verificação e realizar o teste apenas a cada cinco segundos. Diminuir a velocidade de um loop while é uma excelente utilização do comando Start-Sleep.

$filePath = 'C:\File.txt'
while (-not (Test-Path -Path $filePath)) {
    ## Aguarde um intervalo específico
    Start-Sleep -Seconds 5
}

Para um exemplo de uso deste cmdlet com uma barra de progresso, confira isso.

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