在多台服务器上卸载程序



我有一堆服务器,我必须卸载一个应用程序。我正在使用:

$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都会触发软件包的修复(发送事件日志),这在某些情况下可能会破坏已安装的软件(我在查询该类后看到过一些程序的损坏安装-尽管这种情况很少见,但您不想在生产服务器上冒这个风险)。

最新更新