Powershell:使用UninstallString卸载

时间:2014-03-27 18:09:07

标签: powershell deployment clickonce

当我通过我正在研究的Powershell项目时,我还有一些问题仍未得到解决。

我的目标是创建一个能够卸载ClickOnce部署的C#应用​​程序的Powershell脚本,此外还可能运行各种安装程序(但这部分我稍后会担心)。

我已经能够弄清楚如何为我的应用程序获取UninstallString,我只是坚持我的选择。我尝试使用Invoke-Expression和其他一些方法来运行它,但没有任何结果。由于我对Powershell的全新机会很好,我可能做错了什么,但我希望我找不到这样做的正确方法。这是我目前使用的相关代码片段来获取我的UninstallString:

$App = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" | 
    foreach { gp $_.PSPath } | 
    select DisplayName,DisplayVersion,InstallDate,Publisher,UninstallString | 
    where { $_.DisplayName -match "scan" }

如果有人对如何进行提出建议,我们将不胜感激!

3 个答案:

答案 0 :(得分:1)

哦,好主人带回了几年前我拼凑在一起的VBS脚本的记忆,它会打开一个HTML界面,让你输入一个计算机名称,如果它在网络上,它会扫描远程注册表中的东西在卸载密钥中,删除KB,并提供要卸载的事项的下拉列表。我将永远不会再使用数百行甚至数千行脚本。无论如何,足够的回忆。

您应该能够使用“呼叫”运算符“&”在UninstallString属性中运行字符串,如:

& $App.UninstallString

现在,说过你会想要考虑一些事情。如果它是用MSIEXEC.EXE执行的,那么它们很有可能将它设置为MSIEXEC.EXE /I {<some GUID>},您可能希望将/I替换为/X并附加/NB-!到字符串的末尾(如果我记得我的开关正确,将显示最小进度条显示并禁止任何可能弹出的“卸载完成”窗口。)

答案 1 :(得分:0)

我浏览了这个 - 太累了,无法阅读所有内容:-),我只是想添加一篇带有PowerShell卸载字符串的文章的链接,希望它能向您发送正确的方向:{{3} }

答案 2 :(得分:0)

这是我只需要解决的一个例子。 &或call运算符需要一个cmd字符串,然后是一个参数字符串数组。 Powershell 5.1仅与程序或msi提供程序一起使用。

$uninstall = -split (get-package 'Support Button *bomgar*' | 
  % { $_.metadata['uninstallstring'] })
& $uninstall[0] $uninstall[1..($uninstall.length-2)]  # take off last arg --prompt

或者,如果您要等待,则是相同的主意:

start -wait $uninstall[0] $uninstall[1..($uninstall.length-2)]