编写Powershell脚本以重新启动自身

时间:2018-10-25 14:14:40

标签: windows powershell

我正在尝试使Powershell脚本在发生故障时重新启动。在几个参考文献之后,我发现了herehere我已经添加了这一行...

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"""

谢谢

1 个答案:

答案 0 :(得分:0)

目前无需搜索...

. $PSCommandPath

注意点和 $PSCommandPath 之间的空格。