使用 Powershell 静默卸载 Chrome

Posted

技术标签:

【中文标题】使用 Powershell 静默卸载 Chrome【英文标题】:Uninstall Chrome silently using Powershell 【发布时间】:2020-05-30 09:44:19 【问题描述】:

我有以下 PowerShell 脚本,用于获取 Google Chrome 的卸载字符串,然后我想静默卸载它。脚本中的第 3 行将弹出 GUI 卸载程序(因此到目前为止似乎一切都是正确的),但如果我将“/qn”或“/quiet”添加到参数列表中,卸载似乎不会在全部,即使我让它静置几个小时。

我错过了什么?

    $AppName = "Google Chrome"
    $Chrome = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object $_.DisplayName -match $($AppName)
    Start-Process -Wait -FilePath MsiExec.exe -Argumentlist "/X",$Chrome.UninstallString.TrimStart("MsiExec.exe /X")

【问题讨论】:

【参考方案1】:

如果是 msi 你可以使用uninstall-package:

get-package *chrome* | uninstall-package -whatif

【讨论】:

这当然是一个好方法,但我会小心使用 *s :) 为什么?你不能不解释就说出这样的话! ;-) @Jawad 万一不止一件事匹配。好的,我加了-whatif【参考方案2】:

不要尝试使用 /X 并删除 /X 和其他东西,而是尝试以下操作

# Get the key to uninstall
$chromeUninstall = $Chrome.Pspath.Split("\")[-1]

Start-Process -Wait -FilePath MsiExec.exe -Argumentlist "/X $ChromeUninstall /quiet /norestart"

甚至更简单,

Start-Process -Wait cmd.exe -ArgumentList "/c msiexec /X $ChromeUninstall /quiet /norestart"

/c - 执行字符串指定的命令然后终止


注意

在我的系统上,我得到两个卸载字符串。您可能想考虑使用[0] 循环或选择列表中的第一个

【讨论】:

您的第一个示例引发了一些错误。使用您的第二个示例看起来像是在任务管理器中启动了“Windows Installer”进程,但仍或多或少地立即返回到命令提示符,并且似乎没有卸载 Chrome。我很好奇,“/c”是做什么的? @Andrew 更新了我的答案。不要使用 UninstallString,而是使用 PSPath 获取用于卸载的密钥。 很遗憾,没有改善。和以前一样,它会启动一个 Windows 安装程序进程并立即返回到命令提示符,但似乎什么也没做,即使等待了一段时间。 好的,我认为管理员权限与此有关,即使我的用户名在这台 PC 上的本地管理员组中。我将您的一个建议简化为“cmd.exe /c $Chrome.UninstallString /Passive”,并在运行时注意到 UAC 提示。然后我将 /Passive 更改为 /qn 并以管理员身份打开 Powershell ISE,它快速轻松地删除了 Chrome。再次感谢您的帮助!

以上是关于使用 Powershell 静默卸载 Chrome的主要内容,如果未能解决你的问题,请参考以下文章

通过 NSIS 静默运行 Powershell

Android静默安装和静默卸载代码

使用 setup.exe 在后台静默卸载

Android静默安装与静默卸载(系统应用)

如何在 Windows 上静默卸载 Python 2.7?

如何使用 WiX 和 MSI 进行静默安装和卸载?