未经手动接受,无法使用注册表项远程卸载 Google Chrome

问题描述

  1. 获取包“谷歌浏览器”| % { & ($_.Meta.Attributes["UninstallString"] -replace '"') /S

此命令卸载除谷歌浏览器之外的其他软件,提供程序为程序。我尝试了很多东西,但这不起作用。 请帮忙

解决方法

您说您的 Google Chrome 安装通过 Programs 包管理提供程序执行的,而不是通过 msi 提供程序(对于后者,见底部)。

假设 $_.Meta.Attributes["UninstallString"] 有一个值,它包含一个包含 no-shell / for-cmd.exe 命令行 的字符串,通常不会 在使用 Invoke-Expression 直接从 PowerShell 执行时有效,因为 PowerShell 比需要 引用cmd.exe 具有更多元字符,特别是 {},用于 GUID。

  • 更根本的是,&call operator支持执行整个命令行,它只需要命令的名称或路径或可执行文件,可选后跟参数。

在最简单的情况下(可能是异步执行,如果卸载可执行文件是一个 GUI 应用程序,例如 msiexec),您可以执行以下操作:

Get-Package 'Google Chrome' | % { 
  cmd /c ($_.Meta.Attributes['UninstallString'] + ' /S')
}

有关详细信息,包括确保同步执行基于 msiexec 的卸载的方法,请参阅 this answer


如果您的 Chrome 浏览器是通过 msi 软件包提供商安装的(验证:(Get-Package 'Google Chrome').ProviderName):

并非所有已安装的程序都具有 UninstallString 属性(拥有 QuietUninstallString 属性的程序更少),并且由 msi 提供程序安装的 Google Chrome 没有。

>

但是,您应该能够通过管道连接到 Uninstall-Package 以进行静默(无人值守)卸载:

Get-Package 'Google Chrome' | Uninstall-Package