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
.
Para um exemplo de uso deste cmdlet com uma barra de progresso, confira isso.