Windows 编写powershell脚本以重新启动自身

Windows 编写powershell脚本以重新启动自身,windows,powershell,Windows,Powershell,我正在尝试使powershell脚本在发生故障时自行重新启动。下面是我找到的几个参考资料,我添加了这一行 Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file "$PSCommandPath"' ($PSCommandPath是脚本的路径和文件名) 当我的脚本到达这一点时,一个窗口会闪烁几秒钟,然后关闭 我认为(但不能确定)出现的窗口是powershell控制台-它消失得太快,无法读取 第一个问题是,-noe

我正在尝试使powershell脚本在发生故障时自行重新启动。下面是我找到的几个参考资料,我添加了这一行

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表达式,因为我发现这些示例都使用了它(当时我确信我已经使用它了!)

这个解决方案确实有效

  Start-Process -FilePath "$PSHOME\powershell.exe" -ArgumentList '-NoExit', '-File', """$PSCommandPath"""

谢谢

目前无需搜索

. $PSCommandPath

注意点和
$PSCommandPath

之间的空格,为什么要使用
调用表达式
cmd/c
?只需使用
Start Process-FilePath“$PSHOME\powershell.exe”-ArgumentList'-NoExit','-File',“$PSCommandPath”“”
也可以。你需要它的案例很少
. $PSCommandPath