在多个服务器上卸载程序

时间:2015-06-08 22:26:12

标签: list powershell foreach wmi uninstall

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

$app = Get-WmiObject -Class Win32_Product | Where-Object { 
    $_.Name -match "application name" 
}

$app.Uninstall()

我已经测试了上面的内容并且效果很好。我想现在运行它,以便在一堆服务器上卸载应用程序。我知道我可以使用for each选项但由于某种原因我遇到了让它运行的问题。

我创建了一个名为servers的文本文件,并在那里列出了我的服务器,但每次都出错了。

是否有人为我的上述卸载部分添加每个部分的工资都很高,所以它有效吗?

3 个答案:

答案 0 :(得分:0)

稍后在您got your original code from的页面上,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是服务器文本文件中的服务器列表。

答案 1 :(得分:0)

Get-WmiObject-ComputerName参数接受计算机名列表。

$servers = Get-Content 'C:\your\computerlist.txt'

Get-WmiObject -Computer $servers -Class Win32_Product |
  ? { $_.Name -like '*application name*' } |
  % { $_.Uninstall() }

答案 2 :(得分:0)

我会远离win32_product,因为这个课程没有正常工作。 见https://support.microsoft.com/en-us/kb/974524。 基本上,当您查询此类时会发生的情况是每个msi都会触发修复软件包(垃圾邮件事件日志),这在某些情况下可能会破坏已安装的软件(在查询此类之后我看到某些程序的安装已损坏) - 虽然它很少见,但你不想在生产服务器上冒这个风险。)