The PowerShell Start-Sleep cmdlet ou o sleep
alias é um simples cmdlet com um único propósito; pausar um script. Quando executado, na consola PowerShell, um script executado pela consola ou no PowerShell ISE, o cmdlet pausa apenas um script ou módulo na sessão PowerShell de correr até ter decorrido o tempo necessário em segundos ou milissegundos.
Este cmdlet é simples mas pode ser aplicado de algumas maneiras diferentes que nos permitirão a nós, os scripts, greate scripts bem escritos.
Start-Sleep Usage
Usar o cmdlet Start-Sleep é extremamente fácil uma vez que, afinal de contas, só tem dois parâmetros! Digamos que eu quero pausar o 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 continua rodando antes que esse evento externo seja feito.
Para pausar o script por 10 segundos, eu usaria apenas Start-Sleep -Second 10
. Se eu quiser analisar as coisas, eu também poderia especificar o tempo em milisegundos como Start-Sleep -Milliseconds 10000.
Contexto de Exemplo
Um dos usos mais comuns deste cmdlet Start-Sleep está dentro de um loop de while
. Um while
loop é uma construção em PowerShell que executa código enquanto algo mais está acontecendo. Um dos melhores usos de um loop while
é esperar que algo mais aconteça. Ao invés de apenas adivinhar quanto tempo um processo vai levar e rodar este cmdlet diretamente.
Por exemplo, talvez você precise esperar que um arquivo apareça em uma pasta. Talvez esse arquivo seja descartado 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 utilização de um laço while
e Start-Sleep
.
No exemplo abaixo, o meu código está à espera que o ficheiro C:\File.txt
apareça. Se isso estivesse em um script, ele pausaria o script até que esse evento acontecesse. Tecnicamente, não precisamos de Start-Sleep
para fazer isso, mas se não for usado, esse código pode aleijar seu computador. A velocidade a que ele poderia verificar continuamente este arquivo seria até PowerShell!
Não precisamos verificar este arquivo a cada .0455ms. Em vez disso, devíamos abrandar essa verificação e fazer o teste apenas a cada cinco segundos. Abrandar um pouco o loop down é um excelente uso do comando Start-Sleep
comando.
$filePath = 'C:\File.txt'while (-not (Test-Path -Path $filePath)) { ## Wait a specific interval Start-Sleep -Seconds 5}
Para um exemplo de uso deste cmdlet com uma barra de progresso agradável, veja isto.