Es posible que esté tratando de escribir una secuencia de comandos que requiera la entrada del usuario para completarse o, a veces, la secuencia de comandos requiere un retraso para permitir que otro proceso termine de ejecutarse primero.
El comando más utilizado para propósitos como este es el cmdlet Start-Sleep
. Dado que PowerShell también admite comandos CMD, también puede usar los comandos Pause
Y Timeout
De espera.
En este artículo, explicamos el uso de estos y más comandos para pausar en Powershell.
Cómo pausar PowerShell
Puede usar los siguientes métodos para hacer una pausa en PowerShell. Como hemos incluido métodos nativos y no nativos, puede usarlos según corresponda.
Inicio-Sueño
El propósito del cmdlet Start-Sleep
Es suspender la actividad en un script o sesión durante un período de tiempo específico. Puede usarlo con los parámetros -Seconds
Y -Milliseconds
, como se muestra en los ejemplos a continuación.
Para suspender la actividad durante 5 segundosStart-Sleep -Seconds 5
Para suspender la actividad durante 200 milisegundosStart-Sleep -Milliseconds 200
Para suspender la actividad durante 4,3 segundos, puede usar cualquiera de los siguientes:Start-Sleep -Seconds 4.3
Start-Sleep -Milliseconds 4300
Start-Sleep -Seconds 4 -Milliseconds 300
También puede utilizar los alias de PowerShell integrados. Puede usar sleep y -s en lugar de Start-Sleep
Y -Seconds
Respectivamente. Entonces, el comando anterior se puede escribir como:Sleep -s 4.3
Finalmente, puede presionar CTRL + C para salir de Start-Sleep
.
Host de lectura
El propósito del cmdlet Read-Host
Es leer alguna entrada de la consola y, al hacerlo, detiene el script. Normalmente se usa para solicitar al usuario que ingrese datos como contraseñas, nombres de usuario, etc.
Por ejemplo, el siguiente comando solicita al usuario que ingrese su nombre y la entrada se guarda en la variable $Name.$Name = Read-Host "Enter Your Name"
Si usa esto para solicitar al usuario su contraseña, es posible que desee agregar los parámetros -AsSecureString
O -MaskInput
Al final para mostrar asteriscos en lugar de la contraseña.
Consola.ReadKey
El método Console.ReadKey()
A menudo se usa para pausar la ejecución del programa hasta que el usuario presiona una tecla. Por ejemplo, si está tratando de pausar el programa hasta que el usuario presione Enter, lo usaría como tal:Console.ReadKey().Key != ConsoleKey.Enter
RawUI.ReadKey
El método RawUI.ReadKey
Es similar al método Console ReadKey, excepto que puede usar algunas opciones más con este método. Estas opciones son:
AllowCtrlC
Permite que CTRL + C se procese como una pulsación de tecla en lugar de provocar un evento de interrupción.IncludeKeyDown
Incluye eventos de pulsación de tecla (activados cuando se pulsa una tecla).IncludeKeyUp
Incluye eventos de pulsación de tecla (activados cuando el usuario suelta una tecla en el teclado).NoEcho
No muestra el carácter de la tecla en la ventana cuando se presiona.
Tenga en cuenta que se debe incluir uno de IncluirTeclaAbajo o IncluirTeclaArriba, o ambos. Dicho esto, puede usar este método con las opciones como tales:$host.UI.RawUI.ReadKey(AllowCtrlC,IncludeKeyDown')
Subproceso.Sueño
El método Thread.Sleep
Suspende el subproceso actual durante un período de tiempo específico. Puede usar este método con un argumento milisegundosTiempo de espera o un objeto TimeSpan, como se muestra a continuación.
En el siguiente ejemplo, el hilo actual se detiene durante 3,5 segundos.[System.Threading.Thread].Sleep(3500)
Alternativamente, puede ingresar el valor en forma de Días, Horas, Minutos, Segundos y Milisegundos como se muestra a continuación:[System.Threading.Thread].Sleep([TimeSpan]::New(0, 0, 0, 3, 500))
Establecer-PSBreakPoint
El cmdlet Set-PSBreakpoint
Se usa para depurar scripts de PowerShell. Se usa para establecer puntos de interrupción donde PowerShell deja de ejecutarse temporalmente y entrega el control al depurador.
Puede establecer tres tipos de puntos de interrupción con este cmdlet; Punto de interrupción de línea, Punto de interrupción de comando y Punto de interrupción variable. Los casos de uso para esto son innumerables, por lo que recomendamos consultar la documentación de Microsofts Set-PSBreakPoint para obtener más detalles.
Trabajo en espera
Puede usar el cmdlet Wait-Job
Para esperar a que un trabajo específico o todos los trabajos estén en un estado de finalización (completado, fallido, detenido, suspendido o desconectado) antes de continuar con la ejecución.
En el siguiente ejemplo, el cmdlet pausará el script de PowerShell hasta que Job1 esté en un estado de finalización.Wait-Job -Name "Job1"
Para hacer lo mismo para todos los trabajos, puede usar:Get-Job | Wait-Job
También puede usar el -Timeout
Para especificar en segundos cuánto tiempo debe esperar a que finalice el trabajo antes de que se agote el tiempo de espera y la secuencia de comandos continúe ejecutándose.
Más
En caso de que esté ejecutando un comando o secuencia de comandos que muestre una gran cantidad de resultados, puede usar el comando More
Para hacer una pausa después de que se muestre una pantalla de resultados.
Por ejemplo, para ver la primera pantalla de información de un archivo llamado Testfile.new
, podría usar: More < testfile.new
También puede canalizar a More
Como tal: Type testfile.new | more
Comandos de pausa y tiempo de espera
Vale la pena mencionar que si desea usar comandos CMD en lugar de cmdlets de Powershell, puede usar los comandos de Pause
Y Timeout
De espera, ya que son compatibles con Powershell.
Si solo agrega el comando de Pause
A su secuencia de comandos, recibirá el siguiente mensaje o uno similar cuando se ejecute:
Presione Entrar para continuar
Puede usar el tiempo de Timeout
En su lugar si desea especificar la cantidad de tiempo (en segundos) para hacer una pausa antes de que la sesión continúe como tal: Timeout /t 7
En ocasiones, los usuarios pueden presionar involuntariamente una tecla que terminaría abruptamente el tiempo de espera. Si prefiere ignorar tales pulsaciones de teclas, puede usar el /nobreak
Como tal: Timeout /t 7 /nobreak
Preguntas frecuentes
¿Cómo hacer una pausa en PowerShell hasta que se presione una tecla?
Puede utilizar los métodos ReadKey
O el comando Timeout
Para hacer una pausa hasta que se registre una pulsación de tecla. Los detalles con respecto a estos se mencionan en el artículo anterior.
¿Cómo pausar PowerShell durante X segundos?
Start-Sleep
Es el cmdlet nativo de PowerShell que se usa para pausar una sesión de PowerShell durante la cantidad de segundos especificada. Alternativamente, también puede usar el comando de Timeout
De espera.
¿Cómo hacer una pausa en PowerShell antes de salir?
Console.ReadKey()
Se usa comúnmente para pausar Powershell y mostrar un mensaje como Presione Entrar para salir. Cuando el usuario presione enter, el programa saldrá.
¿Cómo pausar la pantalla de salida de PowerShell?
Puede usar el comando More
Para pausar la pantalla de salida en PowerShell. Hemos incluido más detalles sobre esto en el artículo anterior.
¿Cómo hacer una pausa de PowerShell para la entrada?
Esto depende del tipo exacto de entrada, pero el cmdlet Read-Host
Se usa con mayor frecuencia para este propósito. Aunque se podría argumentar que los métodos Set-PSBreakPoint
Y ReadKey
También conducen a ciertas formas de entrada.