这不使用 Invoke-Command 或 MSIExec,但它是一种功能性卸载方法,用于使用 WMI 删除远程计算机上的应用程序,用于使用 WMI 注册的任何内容(应该是通过 msiexec 安装的任何内容)。
(Get-WmiObject -Class Win32_product -ComputerName ComputerName -Filter {IdentifyingNumber LIKE '{4ADBF5BE-7CAF-4193-A1F9-AM6820E68569}'}).uninstall()
此外,如果您有几台计算机可以执行此操作,则可以将其放入 ForEach 循环中。如果您在 WMI 中列出了 Name、IdentifyingNumber 和 Version,则可以使用以下上下文加快速度(使用 AT&T Connect Participant Application v9.0.82):
$App="IdentifyingNumber=`"`{1F3A6960-8470-4C84-820C-EBFFAF4DA580`}`",Name=`"AT&T Connect Participant Application v9.0.82`",version=`"9.0.82`""
([WMI]\\ComputerName\root\cimv2:Win32_Product.$App).Uninstall()
是的,$App 字符串被可怕地转义了,但这是由于 WMI 要求字符串格式化为大括号和双引号的方式,等等。这对于单个卸载并不完全有用,因为它需要您预先获取所有信息并格式化密钥字符串。但是,如果您要从 30 台机器上删除一个软件,那就更好了。您只需从我的第一个命令中删除 .Uninstall() 方法即可获取所有这些信息,所以...
Get-WmiObject -Class Win32_product -ComputerName RemoteComputer -Filter {IdentifyingNumber LIKE '{1F3A6960-8470-4C84-820C-EBFFAF4DA580}'}
会吐出类似的东西:
IdentifyingNumber : {1F3A6960-8470-4C84-820C-EBFFAF4DA580}
Name : AT&T Connect Participant Application v9.0.82
Vendor : AT&T Inc.
Version : 9.0.82
Caption : AT&T Connect Participant Application v9.0.82
也可以通过将过滤器更改为类似 `{Name LIKE '%AT&T Connect%'} 的方式与名称一起使用,甚至部分名称也可以使用,或者您可以查询 WMI 以列出所有注册的应用程序,方法是将 -完全过滤掉,尽管您可能希望将其通过管道传输到 Format-Table 以使其可读。我用过:
gwmi -class win32_product -computername RemoteComputer|ft IdentifyingNumber,Name,Version
可以在link 找到有关此内容的更多信息的好读物