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

此命令卸载除 Google chrome 以外的其他软件,提供程序是程序。我尝试了很多东西,但这不起作用。请帮忙

4

1 回答 1

3

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

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

  • 更根本&的是,调用运算符不支持执行整个命令行它只需要命令或可执行文件的名称或路径,可选地后跟参数。

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

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

有关更多信息,包括确保同步执行msiexec基于卸载的方法,请参阅此答案


如果您的 Google Chrome 是通过msi包提供程序安装的(使用:验证(Get-Package 'Google Chrome').ProviderName):

并非所有已安装的程序都有UninstallString属性(甚至更少有属性QuietUninstallString),并且msi-provider-installed Google Chrome 没有属性。

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

Get-Package 'Google Chrome' | Uninstall-Package
于 2021-07-24T21:29:03.320 回答