首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让PowerShell等待命令完成后再继续?

如何让PowerShell等待命令完成后再继续?
EN

Stack Overflow用户
提问于 2014-10-22 01:07:42
回答 3查看 27.8K关注 0票数 9

我正在使用下面这行代码根据office 2007的产品ID卸载office 2007

代码语言:javascript
复制
Start-Process C:\Windows\System32\msiexec.exe -ArgumentList "/uninstall {90120000-0030-0000-0000-0000000FF1CE}"

我想在卸载完成后强制重启,但是使用-Wait或通过管道将结果传递给Out-Null不要等到卸载完成后才处理下一行,也就是重新启动。我也尝试过使用cmd卸载,但结果是一样的。

代码语言:javascript
复制
cmd /c "msiexec.exe /uninstall {90120000-0030-0000-0000-0000000FF1CE}"

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-22 01:11:33

Start-Process有一个wait参数:

代码语言:javascript
复制
Start-Process C:\Windows\System32\msiexec.exe -ArgumentList "/uninstall {90120000-0030-0000-0000-0000000FF1CE}" -wait

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

代码语言:javascript
复制
Start-Process C:\Windows\System32\msiexec.exe -ArgumentList @("/uninstall {90120000-0030-0000-0000-0000000FF1CE}", "/forcerestart")
票数 28
EN

Stack Overflow用户

发布于 2021-09-14 21:52:32

最简单的解决方法:通过管道输出结果。这将强制等待,直到该过程完成。

不需要start-processcmd

您可以通过管道连接到out-defaultout-fileout-nullout-host,这取决于您希望如何处理输出。(如果您不关心输出,只需使用out-null。)

代码语言:javascript
复制
& msiexec.exe /uninstall "{90120000-0030-0000-0000-0000000FF1CE}" | Out-Null    
票数 2
EN

Stack Overflow用户

发布于 2014-10-22 02:31:42

我的建议是从微软获取Office删除工具,并从中提取VBS脚本。在带有-wait参数的启动进程中运行该命令,然后重新启动。它不仅会像您正在做的那样尝试使用msiexec优雅地删除Office,而且还会返回并清理任何散乱的文件或注册表项,以防应用程序损坏,无法很好地卸载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26492328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档