29

我知道-noexitPowerShell 有一个小开关。

无论如何,不​​使用那个开关就可以留在外壳中吗?

换句话说,我想要一个脚本命令执行然后让外壳保持打开状态。

4

10 回答 10

28

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

  1. 一次性修复:从 PowerShell 控制台运行脚本,或使用 -NoExit 开关启动 PowerShell 进程。例如PowerShell -NoExit "C:\SomeFolder\SomeScript.ps1"
  2. 每个脚本修复:在脚本文件的末尾添加输入提示。例如Read-Host -Prompt "Press Enter to exit"
  3. 全局修复:更改您的注册表项以在脚本完成运行后始终保持 PowerShell 控制台窗口打开。

有关要修改哪些注册表项的更多信息,请参阅我的博客。

听起来您正在寻找选项#1 或#3。

于 2014-07-07T22:38:05.590 回答
19

如果您在没有参数的情况下运行该脚本,例如通过双击它,该脚本将不会退出:

param($Work)

# restart PowerShell with -noexit, the same script, and 1
if (!$Work) {
    powershell -noexit -file $MyInvocation.MyCommand.Path 1
    return
}

# now the script does something
# this script just outputs this:
'I am not exiting'
于 2012-02-20T17:04:42.740 回答
14

你有没有尝试过

$host.enternestedprompt()

这将停止执行并将它们放到嵌套提示中。当他们退出该提示时,脚本将完成并且窗口将关闭。

于 2012-02-20T17:15:25.413 回答
10
"do stuff"
Pause

是的,就像命令行一样 -- 输出:

do stuff
Press Enter to continue...:
于 2013-11-29T23:47:52.477 回答
4

我不知道您可以在脚本中运行的命令,如果没有使用该-noexit命令调用它会阻止 shell 退出。

Read-Host "Press ENTER to continue"如果我不想关闭外壳,我通常在最后使用。但是,如果外壳不是以-noexit.

于 2012-02-20T14:38:49.920 回答
3

这个简单脚本末尾的 while 循环提示我输入命令并执行它。它与脚本环境一起运行,因此可以检查变量的值。输入“exit”会在执行时终止循环。

# Do something.

cd D:\temp
$current_directory = $(pwd)
dir

write-host  # Just add a little space after the dir

# Stay in the shell and execute commands.

while ($TRUE) {
  $cmd = Read-Host "PS $(pwd)"
  if ($cmd[0] -eq '"') { iex "& $cmd" } 
    else { iex $cmd }
}

我相信其他人将能够分享一些改进,但这是一个开始。问候。

于 2014-02-19T00:51:22.660 回答
2

像这样?

PowerShell -File  c:\myscript.ps1 -NoExit
于 2012-02-20T14:34:21.223 回答
1

另一种方法是使用$null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown").

结合其他答案,有几个选项:

    1. 从命令提示符运行:PowerShell -NoExit "Path\to\Script\script.ps1"
    1. 添加到脚本末尾:pause
    1. 添加到脚本末尾:read-Host -Prompt "Press Enter to exit"
    1. 添加到脚本末尾:$host.enternestedprompt()
    1. 添加到脚本末尾:$null = host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
于 2021-02-07T00:35:26.923 回答
-1
Powershell -noexit -command {
$a=1
Echo $a
} # End block
# Script ends but PowerShell windows remains.
于 2021-04-27T14:17:08.660 回答
-7

不要恢复一个 6 年前的线程或任何东西,但任何阅读的人都应该注意,你可以用

Stop-Process -processname regedit

如果您启用了注册表调整(全局修复)并且实际上想要运行自动关闭脚本。

于 2018-04-26T06:47:22.513 回答