我正在尝试使Powershell脚本在发生故障时重新启动。在几个参考文献之后,我发现了here和here我已经添加了这一行...
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file "$PSCommandPath"'
($ PSCommandPath是脚本的路径和文件名) 当我的脚本到达这一点时,会发生一个闪烁的窗口,然后关闭它。
我认为(但不能确定)出现的窗口是Powershell控制台-它消失得太快而无法阅读。
第一个问题是-noexit参数为什么不起作用-即使出现错误,它也应使新进程的窗口保持打开状态。
第二个问题是如何使其工作,我尝试了命令的各种组合,包括......
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file c:\my_dir\my_script.ps1 '
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file $PSCommandPath'
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file "$PSCommandPath"'
(几乎)唯一起作用的版本是...。
Invoke-Expression -Command ($PSCommandPath)
确实会重新启动脚本,但不会在新窗口中执行它,而是在现有窗口中重新启动(不是我要查找的内容)。该脚本具有读取和执行权限(所有用户)。这是一个特别令人沮丧的问题,因为我很确定这在过去是可行的,因此它可能是系统问题,而不是脚本问题。
更新-我使用了Invoke-Expressions,因为那是我发现的示例所使用的(当时我确定我可以使用它!)
此解决方案确实有效。...
Start-Process -FilePath "$PSHOME\powershell.exe" -ArgumentList '-NoExit', '-File', """$PSCommandPath"""
谢谢
答案 0 :(得分:0)
目前无需搜索...
. $PSCommandPath
注意点和 $PSCommandPath
之间的空格。