问题描述
此命令卸载除谷歌浏览器之外的其他软件,提供程序为程序。我尝试了很多东西,但这不起作用。 请帮忙
解决方法
您说您的 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