Mantener abierta la consola de PowerShell después de la ejecución del script

Mantener abierta la consola de PowerShell después de la ejecución del script

Si se ejecuta un script haciendo doble clic en él o haciendo clic con el botón derecho y seleccionando Ejecutar con PowerShell o Abrir con Windows PowerShell, el usuario verá aparecer brevemente la consola de PowerShell antes de desaparecer. Este escenario ocurre porque la secuencia de comandos se finaliza naturalmente, especialmente si arroja un error.

Veremos algunas opciones para mantener abierta la consola de PowerShell después de que se haya ejecutado el script, y las repasaremos en este artículo.

Impedir que PowerShell salga

Convenientemente, Windows PowerShell tiene un argumento de cambio que podemos pasar cuando ejecutamos nuestros scripts. Este argumento se denomina parámetro -NoExit.

Agregar esto al ejecutar un script evitará que la consola de PowerShell finalice cuando haya un error o la ejecución del script finalice correctamente.

powershell.exe "C:\PS\sample_script.ps1" -NoExit

Sin embargo, esto solo es posible si está ejecutando o llamando a su secuencia de comandos externamente. ¿Qué pasa si hay una manera de sostener la pantalla y evitar que termine mientras ejecuta y edita su secuencia de comandos en un editor de código como PowerShell ISE?

Es posible que no haya un comando de PowerShell para hacer esto de forma nativa; sin embargo, podemos ser creativos y crear métodos para lograr nuestro objetivo. Antes de continuar, vale la pena señalar que puede usar el comando heredado pausar para mantener la pantalla cuando ejecuta un script de PowerShell.

Producción :

Press any key to continue...

Puede que no haya una contraparte para el comando heredado pause, pero podemos recrearlo usando el comando PowerShell Read-Host.

Código de ejemplo:

Read-Host -Prompt "Press Enter to continue..."

La única advertencia de este método es que, a diferencia del comando pause, no acepta pulsaciones de teclado, pero solo aceptará la tecla Enter para finalizar el script. Puede que no sea similar al comando pausar, pero el fragmento de código anterior aún mantendrá la pantalla antes de finalizar el script.

Hay una forma de evitar que el script se cierre de forma permanente y persistente mediante la edición del registro. Dado que el registro tiene un alcance de sistema operativo, cualquier cambio que hagamos afectará no solo a un script en particular, sino a todos los scripts que ejecutará en el futuro.

Así que ten esto en cuenta antes de continuar.

Ahora, para continuar, primero debemos hacer una copia de seguridad del registro. Estaremos manipulando los archivos de registro HKEY_CLASSES_ROOT para este artículo, así que hagamos una copia de seguridad abriendo el símbolo del sistema y ejecutando el siguiente comando.

reg export HKCR C:\Temp\HKCR.Reg /y

Ahora que hemos respaldado con éxito nuestro registro, podemos continuar. Copie los comandos a continuación y guarde el archivo con una extensión .reg.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Applications\powershell.exe\shell\open\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"& \\\"%1\\\"\""

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"-Command\" \"if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & \\\"%1\\\"\""

Una vez guardado, haga doble clic en el archivo reg recién creado para que los cambios surtan efecto. Los comandos anteriores cambiarán la política de ejecución de PowerShell e incluirán el parámetro de cambio -NoExit de forma predeterminada al ejecutar un script de PowerShell.

Al ejecutar nuestros scripts creados, no necesitamos agregar un argumento -NoExit.

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn