powershell: exit doesn't really exit
powershell: exit doesn't really exit
我代表另一个正在尝试使用PowerShell和我们的产品的人来调查一个问题。我们的产品可以执行命令来执行操作,大多数人直接调用一个.exe,这样可以正常工作。但有一个用户使用如下方法调用了一些PowerShell:\n
powershell -version 2.0 -NonInteractive -ExecutionPolicy ByPass -file ($ScriptsFolder)p4_commit.ps1 {"($Message)" ($Files)}
\n然而,问题是它永远不会退出,所以我们的软件一直等待。脚本以一个简单的\'exit 0\'结束,而且在此之前的一行是一个调试输出,如果我们在外部取消进程,它就会显示出来,所以它已经到达了脚本的结尾(是的,脚本在其他方面都正常运行)。\n如果我移除exit命令,并用一个PowerShell会话kill命令替换:\n
Stop-Process -Id $PID
\n那么它会终止,但是退出代码不是0,我们会回滚更改,所以这不是一个合适的解决方法。\n否则,回到\'exit 0\',我可以看到使用发送的参数的powershell.exe仍然显示在任务管理器中;所以不是它退出了但我们没有察觉到,它只是不退出。\n可惜,我不是一个很擅长PowerShell的专家-所以问题归结为“是什么导致了exit无法退出?”
问题出现的原因:
在调用PowerShell脚本时,如果使用exit命令来退出脚本,有时会出现脚本无法正常退出的问题。即使脚本已经执行完毕,但命令提示符仍然停留在PowerShell环境中,无法返回到外部命令行或脚本。
解决方法:
一种解决方法是使用start /wait命令来调用powershell.exe。这样可以确保在脚本执行完毕后,命令提示符能够返回到外部命令行或脚本。
以下是一个示例命令的修改:
start /wait powershell.exe -File "脚本路径"
此外,Gordon Smith在stackoverflow.com上的回答也提供了有用的解决方案,链接如下:stackoverflow.com/questions/2041799/…