Cómo detener temporalmente un script de PowerShell



Los scripts son una forma práctica de automatizar tareas, especialmente en Windows. PowerShell se usa a menudo para esto por su gran flexibilidad. Sin embargo, a veces es necesario pausar un script, ya sea para esperar una entrada manual o simplemente para dar un respiro a un proceso. Puede ser un poco complicado determinar la mejor manera de hacerlo, especialmente cuando se buscan retrasos programados en lugar de esperar a que el usuario presione una tecla. Por lo tanto, esta guía explica cómo pausar los scripts de PowerShell, ya sea durante una cantidad determinada de segundos o hasta que el usuario presione una tecla. Además, es útil saber cómo funcionan en comparación con el símbolo del sistema (cmd.exe), ya que no todos son intercambiables.

Al crear scripts, es posible que te canses de que se ejecuten sin parar, y ahí es donde estas pausas resultan útiles. Si intentas automatizar un proceso pero quieres tener más control, estas pausas te permiten gestionar mejor el flujo. Por ejemplo, puedes añadir un retraso antes de comenzar el siguiente paso o esperar la intervención del usuario antes de continuar. Un aviso: algunos comandos funcionan de forma diferente según estés en PowerShell o en cmd, así que conocer las diferencias ayuda a evitar confusiones.

Cómo pausar un script de PowerShell durante un tiempo específico o hasta que el usuario lo ingrese

Pausar un script durante un número exacto de segundos

Este es el método más sencillo y bastante fiable. Si solo necesitas retrasar el script durante unos segundos, puedes usar el comando Start-Sleep. Es sencillo y funciona bien porque no depende de la interacción del usuario. Simplemente especifica cuántos segundos (o milisegundos) quieres esperar.

  • Uso: Start-Sleep -Seconds 5— Esto espera exactamente cinco segundos. No sé por qué funciona, pero en algunas configuraciones, la duración del modo de suspensión puede variar ligeramente, especialmente si el sistema está bajo carga. Aun así, suele ser bastante preciso para la mayoría de las necesidades.

También es posible especificar milisegundos si se necesita una pausa más corta: Start-Sleep -Milliseconds 500. Esto puede ser útil si se desea un retraso de medio segundo.

Pausa con un tiempo de espera que el usuario puede cancelar

Otra forma es usar el comando timeout en PowerShell, que es un poco peculiar. Se puede establecer un tiempo de espera máximo, pero la función clave es que el usuario puede presionar cualquier tecla para omitir el tiempo de espera restante. Esto es útil si se desea una pausa, pero se le da al usuario la opción de continuar antes.

  • Ejemplo: timeout /t 10— esto espera 10 segundos, pero si el usuario presiona cualquier tecla, avanza inmediatamente.

Aquí es donde la cosa se pone rara: en PowerShell, puedes ejecutar timeout /t 10desde dentro y esperar, pero si pulsas una tecla, se interrumpe antes de tiempo. Es una especie de híbrido: una pausa temporizada con una interrupción anticipada opcional. Ten en cuenta que esto no funciona con comandos puros de PowerShell sin invocar el símbolo del sistema. Además, algunos usuarios informan que, en ciertas versiones de Windows, podría comportarse de forma diferente o requerir una sintaxis especial.

Cómo detener un script y esperar la entrada del usuario con PAUSE

Si el objetivo es detener por completo el proceso y esperar a que el usuario presione Intro, puede usar el comando clásico PASUE. Este no es un comando nativo de PowerShell, pero puede ejecutarlo desde cmd /c pausePowerShell o directamente en cmd.exe.

  • Ejemplo: cmd /c pauseAl ejecutarse, se mostrará «Presione cualquier tecla para continuar…» y luego esperará hasta que se presione una tecla.

Este método es útil para scripts manuales donde se necesita asegurar que alguien esté listo antes de continuar. Tenga en cuenta que no es adecuado para tareas en segundo plano ni scripts automatizados, ya que no pueden responder a la entrada del usuario.

¿Esto también funciona en cmd.exe?

Sí, los mismos comandos funcionan en el símbolo del sistema, pero con algunas salvedades.Start-Sleepes un cmdlet de PowerShell, por lo que no se ejecutará en cmd a menos que se invoque PowerShell explícitamente. Sin embargo, comandos como timeout /ty pauseestán integrados en cmd. El timeoutcomando en cmd es perfecto si quieres que el script espere un poco, pero permite la cancelación anticipada pulsando una tecla.

Curiosamente, Sleep(sin el guion ni el módulo de PowerShell) no funciona en cmd, por lo que es exclusivo de PowerShell. Por otro lado, si escribes archivos por lotes timeouty pauseson tus amigos…

En definitiva, determinar qué método de pausa funciona depende del entorno. A veces, es solo cuestión de prueba y error, sobre todo si el script no funciona exactamente como se espera en diferentes versiones o configuraciones de Windows.



¿Te resultó útil este artículo?