78

我有一个非常短的 PowerShell 脚本,它连接到服务器并导入 AD 模块。我想通过双击来运行脚本,但恐怕窗口会在最后一行之后立即关闭。

我该如何解决这个问题?

4

6 回答 6

134

您基本上有 3 个选项来阻止 PowerShell 控制台窗口关闭,我在我的博客文章中对此进行了更详细的描述。

  1. 一次性修复:从 PowerShell 控制台运行脚本,或使用 -NoExit 开关启动 PowerShell 进程。例如PowerShell -NoExit "C:\SomeFolder\SomeScript.ps1"
  2. 每个脚本修复:在脚本文件的末尾添加输入提示。例如Read-Host -Prompt "Press Enter to exit"
  3. 全局修复:通过添加开关来更改注册表项,-NoExit以便在脚本完成运行后始终保持 PowerShell 控制台窗口打开。
Registry Key: HKEY_CLASSES_ROOT\Applications\powershell.exe\shell\open\command
Description: Key used when you right-click a .ps1 file and choose Open With -> Windows PowerShell.
Default Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "%1"
Desired Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "& \"%1\""

Registry Key: HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Command
Description: Key used when you right-click a .ps1 file and choose Run with PowerShell (shows up depending on which Windows OS and Updates you have installed).
Default Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
Desired Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & \"%1\""

请参阅我的博客以获取更多信息和下载脚本,该脚本将为您更改注册表。

于 2014-07-07T22:14:00.390 回答
25

Errr ...我应该知道:

powershell -noexit <path\script> 

这就是它的全部内容:)

于 2013-05-24T16:19:46.867 回答
4

以下解决方案可防止脚本在运行 Powershell ISE 时关闭,并允许脚本在其他情况下关闭。

# If running in the console, wait for input before closing.
if ($Host.Name -eq "ConsoleHost")
{
    Write-Host "Press any key to continue..."
    $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null
}
于 2018-10-30T22:31:19.773 回答
0

在我自己的情况下,我想将 powershell 添加到 Windows 7 上的上下文菜单中。即右键单击文件夹或文件夹内以获取菜单以启动 Powershell 窗口,而不会在启动后关闭它。这里的答案帮助我做到了这一点,我想在这里分享它,以防它帮助别人。

  • 按 WIN + R 键入 regedit.exe 并按 Enter 键启动注册表编辑器
  • 导航到HKEY_CLASSES_ROOT\Directory\Background\shell
  • 右键单击外壳并创建一个键,为其命名,例如 PowershellHere
  • 在右侧窗格中,双击默认并提供一个描述性名称,例如 Powershell Here
  • 右键单击您之前创建的 PowershellHere 键并创建一个新键并将其命名为“命令”,请确保您正确命名但不带引号。
  • 在右侧窗格中,双击默认,然后键入以下命令
  • C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -noexit -Command CD '"%1"' -noexit 标志确保 Powershell 窗口不会在启动后立即再次关闭 '"%1"' 标志表示您右键单击的文件夹 -Command CD '"%1"' 将确保 Powershell 更改为右键单击的目录。

要使右键单击在文件夹内工作,这意味着右键单击文件夹内的空白区域,请重复这些步骤,但这一次,注册表位置是:

HKEY_CLASSES_ROOT\Directory\shell
命令为:
C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -noexit

在 Windows 7 Ultimate sp1 上测试,但我想我也可能适用于更高版本的 Windows

于 2020-04-25T00:32:24.313 回答
0

只需在脚本底部的新行上添加暂停,就像在批处理文件中一样。

于 2020-10-22T20:34:26.443 回答
0

pause如果您只想让窗口保持打开状态,您可以在脚本末尾添加,或者powershell如果您希望之后能够运行命令,您可以添加(如果其他人会使用您的代码,显然不要执行第二个选项) .

于 2021-01-29T05:12:11.220 回答