O cmdlet Start-Sleep do PowerShell ou o alias sleep
é um cmdlet 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 pausa meramente um script ou módulo na sessão do PowerShell até que o tempo necessário em segundos ou milissegundos tenha decorrido.
Este cmdlet é simples, mas pode ser aplicado de algumas maneiras diferentes que nos permitirão criar scripts bem escritos.
Uso do Start-Sleep
O uso do cmdlet Start-Sleep é extremamente fácil, afinal, ele tem apenas dois parâmetros! Digamos que eu queira pausar meu script porque estou esperando que algum outro processo ambiental seja executado. Esse processo leva cerca de 10 segundos, e eu preciso ter certeza de que meu script não continue sendo executado antes que esse evento externo seja concluído.
Para pausar o script por 10 segundos, eu simplesmente usaria Start-Sleep -Second 10
. Se eu quiser ser meticuloso, também poderia especificar o tempo em milissegundos como Start-Sleep -Milliseconds 10000.
Exemplo de Contexto
Um dos usos mais comuns deste cmdlet Start-Sleep é dentro de um loop while
. Um loop while
é uma construção no PowerShell que executa código enquanto outra coisa está acontecendo. Um dos melhores usos de um loop while
é esperar que algo mais aconteça. Em vez de apenas adivinhar quanto tempo um processo vai 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 é um excelente exemplo de uso de um loop while
e Start-Sleep
.
No exemplo abaixo, meu código está esperando que o arquivo C:\File.txt
apareça. Se isso estivesse em um script, ele pausaria o script até que esse evento acontecesse. Tecnicamente, não precisamos do Start-Sleep
para fazer isso, mas se não for usado, este código pode prejudicar seu computador. A velocidade com que ele poderia verificar continuamente este arquivo ficaria a cargo do PowerShell!
Não precisamos verificar este arquivo a cada 0,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 é um excelente uso do comando Start-Sleep
.
Para um exemplo de uso deste cmdlet com uma barra de progresso agradável, confira isso.