在继续操作之前,如何让PowerShell等到命令完成?

时间:2014-10-21 17:07:42

标签: powershell powershell-v2.0

我使用以下行根据其产品ID卸载office 2007

Start-Process C:\Windows\System32\msiexec.exe -ArgumentList "/uninstall {90120000-0030-0000-0000-0000000FF1CE}"

我想在卸载完成后强行重启,但是使用-Wait或将结果传递给Out-Null不要等到卸载完成后再处理下一行重启。我也尝试使用cmd进行卸载,但结果相同。

cmd /c "msiexec.exe /uninstall {90120000-0030-0000-0000-0000000FF1CE}"

在处理Restart-Computer命令之前,有没有办法强制powershell等到卸载完成?我想可能会写一些东西来检测setup.exe进程何时停止然后再继续重启?

2 个答案:

答案 0 :(得分:18)

Start-Process有一个等待参数:

Start-Process C:\Windows\System32\msiexec.exe -ArgumentList "/uninstall {90120000-0030-0000-0000-0000000FF1CE}" -wait

misexec.exe卸载后重新启动的解决方案是将/forcerestart参数添加到msiexec调用而不是尝试在powershell中重新启动(Credits to Matt):

Start-Process C:\Windows\System32\msiexec.exe -ArgumentList @("/uninstall {90120000-0030-0000-0000-0000000FF1CE}", "/forcerestart")

答案 1 :(得分:0)

我的建议是实际从Microsoft获取Office删除工具并从中提取VBS脚本。使用-wait参数在Start-Process中运行它,然后重新启动。它不仅会尝试使用msiexec优雅地删除Office,它还会返回并清理任何分散的文件或注册表项,以防应用程序损坏并且不会很好地卸载。