脚本执行后保持 PowerShell 控制台打开

Marion Paul Kenneth Mendoza 2022年6月7日
脚本执行后保持 PowerShell 控制台打开

如果通过双击或右键单击脚本并选择使用 PowerShell 运行使用 Windows PowerShell 打开来执行脚本,用户将看到 PowerShell 控制台在消失之前短暂出现。出现这种情况是因为脚本自然会自行终止,尤其是在它抛出错误时。

我们将研究一些在脚本运行后保持 PowerShell 控制台打开的选项,我们将在本文中介绍它们。

阻止 PowerShell 退出

方便的是,Windows PowerShell 有一个 switch 参数,我们可以在运行脚本时传递它。该参数称为 -NoExit 参数。

在运行脚本时附加此内容将防止 PowerShell 控制台在出现错误或脚本执行成功完成时终止。

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

但是,这只有在你在外部运行或调用脚本时才有可能。如果有一种方法可以在 PowerShell ISE 等代码编辑器中运行和编辑脚本时保持屏幕并防止其终止,该怎么办?

本机可能没有 PowerShell 命令来执行此操作;但是,我们可以发挥创造力并创造方法来实现我们的目标。在我们继续之前,值得注意的是,你可以在运行 PowerShell 脚本时使用旧命令 pause 来保持屏幕。

输出:

Press any key to continue...

可能没有对应的 pause 传统命令,但我们可以使用 Read-Host PowerShell 命令重新创建它。

示例代码:

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

该方法唯一需要注意的是与 pause 命令不同,它不接受任何键盘敲击,而只接受 Enter 键来终止脚本。它可能与 pause 命令不同,但上面的代码段仍将在终止脚本之前保持屏幕。

有一种方法可以通过编辑注册表来永久和持久地阻止脚本退出。由于注册表具有操作系统范围,因此我们所做的任何更改不仅会影响一个特定的脚本,还会影响你将来运行的所有脚本。

因此,在继续之前请记住这一点。

现在,要继续,我们应该先备份注册表。我们将为本文操作 HKEY_CLASSES_ROOT 注册表文件,因此让我们通过打开命令提示符并运行以下命令来备份它。

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

现在我们已经成功备份了我们的注册表,我们可以继续进行。复制下面的命令并使用 .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\\\"\""

保存后,双击新创建的 reg 文件以使更改生效。上面的命令将更改 PowerShell 的执行策略,并在执行 PowerShell 脚本时默认包含 -NoExit 开关参数。

运行我们创建的脚本时,我们不需要添加 -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