我正在尝试使用Invoke-Command
cmdlet 删除远程计算机上的应用程序,但它不起作用。
这是我的脚本:
Invoke-Command -ComputerName "Computername" -Verbose -ScriptBlock {
msiexec.exe /x '{4ADBF5BE-7CAF-4193-A1F9-AM6820E68569}' /qn /passive
}
在这种情况下是否有任何可靠、可行的替代方案?
我正在尝试使用Invoke-Command
cmdlet 删除远程计算机上的应用程序,但它不起作用。
这是我的脚本:
Invoke-Command -ComputerName "Computername" -Verbose -ScriptBlock {
msiexec.exe /x '{4ADBF5BE-7CAF-4193-A1F9-AM6820E68569}' /qn /passive
}
在这种情况下是否有任何可靠、可行的替代方案?
这不使用 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%'} ,尽管您可能希望将其传送到 Format-Table 以使其可读。我用了:
gwmi -class win32_product -computername RemoteComputer|ft IdentifyingNumber,Name,Version
这是我想出的解决方案
$myses = New-PSSession -ComputerName "Computer"
Invoke-Command -Session $myses -ScriptBlock {
#finds all instances of Java installed
$find_sep = gwmi win32_product -filter "Name LIKE '%Java%'" | select -ExpandProperty IdentifyingNumber
foreach($i in $find_sep){
msiexec.exe /x $i /qn /passive /l*v! c:\uninst.log
}
}