El cmdlet de PowerShell Start-Sleep o el alias sleep
es un simple cmdlet con un único propósito; pausar un script. Cuando se ejecuta, en la consola de PowerShell, un script ejecutado por la consola o en el ISE de PowerShell, el cmdlet pausa simplemente un script o módulo en la sesión de PowerShell para que no se ejecute hasta que haya transcurrido el tiempo requerido en segundos o milisegundos.
Este cmdlet es sencillo pero se puede aplicar de diferentes maneras que nos permitirán a los scripters saludar a los scripts bien escritos.
Uso de Start-Sleep
Usar el cmdlet Start-Sleep es extremadamente fácil ya que, después de todo, ¡sólo tiene dos parámetros! Digamos que quiero pausar mi script porque estoy esperando que se ejecute algún otro proceso del entorno. Ese proceso tarda alrededor de 10 segundos, y necesito asegurarme de que mi script no siga ejecutándose antes de que ese evento externo termine.
Para pausar el script durante 10 segundos, simplemente usaría Start-Sleep -Second 10
. Si quiero ponerme analítico, también podría especificar el tiempo en milisegundos como Start-Sleep -Milliseconds 10000.
Ejemplo de Contexto
Uno de los usos más comunes de este cmdlet Start-Sleep es dentro de un bucle while
. Un bucle while
es una construcción en PowerShell que ejecuta código mientras algo más está sucediendo. Uno de los mejores usos de un bucle while
es esperar a que ocurra otra cosa. En lugar de simplemente adivinar cuánto tiempo va a tomar un proceso y ejecutar este cmdlet directamente.
Por ejemplo, tal vez usted necesita esperar a que un archivo aparezca en una carpeta. Tal vez ese archivo se deja caer allí por algún otro software. Una vez que el archivo está en la carpeta, necesita ejecutar algún código contra él. Este ejemplo es un excelente ejemplo del uso de un bucle while
y Start-Sleep
.
En el ejemplo siguiente, mi código está esperando que el archivo C:\File.txt
aparezca. Si esto estuviera en un script, pausaría el script hasta que este evento ocurriera. Técnicamente, no necesitamos Start-Sleep
para hacer esto, pero si no se utiliza, este código podría paralizar su ordenador. La velocidad a la que podría comprobar continuamente para este archivo sería hasta PowerShell!
No necesitamos comprobar este archivo cada .0455ms. En su lugar, deberíamos ralentizar esa comprobación y realizarla sólo cada cinco segundos. Ralentizar un bucle while es un excelente uso del comando Start-Sleep
.
$filePath = 'C:\File.txt'while (-not (Test-Path -Path $filePath)) { ## Wait a specific interval Start-Sleep -Seconds 5}
Para un ejemplo de uso de este cmdlet con una bonita barra de progreso, mira esto.