我有一堆服务器,我必须卸载一个应用程序。我正在使用:
$app = Get-WmiObject -Class Win32_Product | Where-Object {
$_.Name -match "application name"
}
$app.Uninstall()
我已经测试了上面的,它工作得很好。我现在要运行这个,它会在一堆服务器上卸载应用。我知道我可以使用每个选项,但由于某种原因,我有一个问题,使它工作。
我创建了一个名为servers的文本文件,并在其中列出了我的服务器,但每次都出错。
是否有人有一个很好的支付,为每个部分添加到我上面的卸载部分,使其工作?
Get-WmiObject
的-ComputerName
参数接受一个计算机名列表。
$servers = Get-Content 'C:yourcomputerlist.txt'
Get-WmiObject -Computer $servers -Class Win32_Product |
? { $_.Name -like '*application name*' } |
% { $_.Uninstall() }
稍后在您获得原始代码的页面上,David Setler给出了您所需要的答案。稍作修改以适应您的场景:
$computers = Get-Content C:servers.txt
foreach($server in $computers){
$app = Get-WmiObject -Class Win32_Product -computer $server | Where-Object {
$_.Name -match "application name"
}
$app.Uninstall()
}
假设$computers
是您的服务器文本文件中的服务器列表
我会远离win32_product,因为这个类不能正常工作。见https://support.microsoft.com/en-us/kb/974524。基本上,当您查询该类时,每次msi都会触发软件包的修复(发送事件日志),这在某些情况下可能会破坏已安装的软件(我在查询该类后看到过一些程序的损坏安装-尽管这种情况很少见,但您不想在生产服务器上冒这个风险)。