Maestro Start-Sleep: Pausa Scripts de manera Eficiente

El cmdlet Start-Sleep de PowerShell o el alias `sleep` es un cmdlet simple 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 entorno PowerShell ISE, el cmdlet simplemente pausa un script o módulo en la sesión de PowerShell hasta que haya transcurrido el tiempo requerido en segundos o milisegundos.

Este cmdlet es simple pero se puede aplicar de varias maneras que nos permitirán crear scripts bien escritos.

Uso de Start-Sleep

Usar el cmdlet Start-Sleep es extremadamente fácil, ¡después de todo, solo tiene dos parámetros! Digamos que quiero pausar mi script porque estoy esperando que se ejecute algún otro proceso ambiental. Ese proceso lleva alrededor de 10 segundos, y necesito asegurarme de que mi script no siga ejecutándose antes de que se complete ese evento externo.

Para pausar el script durante 10 segundos, simplemente usaría `Start-Sleep -Second 10`. Si quiero ser más preciso, 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 algo más. En lugar de adivinar cuánto tiempo va a tomar un proceso y ejecutar este cmdlet directamente.

Por ejemplo, tal vez necesites esperar a que aparezca un archivo en una carpeta. Tal vez ese archivo sea depositado allí por otro software. Una vez que el archivo esté en la carpeta, necesitas ejecutar algún código sobre él. Este ejemplo es un excelente ejemplo de usar un bucle while y Start-Sleep.

En el ejemplo a continuación, mi código está esperando a que aparezca el archivo C:\File.txt. Si esto estuviera en un script, pausaría el script hasta que ocurriera este evento. Técnicamente, no necesitamos Start-Sleep para hacer esto, pero si no se usa, este código podría dejar inutilizable tu computadora. ¡La velocidad a la que podría seguir verificando este archivo estaría determinada por PowerShell!

No necesitamos verificar este archivo cada .0455ms. En cambio, deberíamos ralentizar esa verificación y solo realizar la prueba 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)) {
    ## Esperar un intervalo específico
    Start-Sleep -Seconds 5
}

Para un ejemplo de cómo usar este cmdlet con una bonita barra de progreso, échale un vistazo.

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