高效卸载多台电脑的一个程序

Uninstalling a program of many computers efficiently

我有一个 PowerShell 可以从远程计算机卸载程序,但需要很长时间,因为它遍历了列表中的所有计算机。我只是需要你的帮助来修改它所以它首先检查远程计算机上是否存在该程序然后卸载它:

$comps = gc "C:\Computers.txt"
$appname = gc "C:\appname.txt"
foreach($comp in $comps){
   foreach ($appname in $appname){
      $prod=gwmi -computer $comp win32_product  | ?{$_.name -eq "$appname"}
      $prod.uninstall()
   }
}

尝试使用 foreach –parallel 而不是 foreach。官方文档 here.

workflow uninstallstuff {
    sequence {
        $comps = gc "C:\Computers.txt"
        $appname = gc "C:\appname.txt"
        foreach -parallel ($comp in $comps){
            foreach ($appname in $appname){
                $prod=gwmi -computer $comp win32_product  | ?{$_.name -eq "$appname"}
                $prod.uninstall()
            }
        }
    }
}

这应该 运行 每台计算机并行卸载,但该计算机的每个应用程序将按顺序卸载。

编辑:重写为工作流程。我还没有测试过。

知道了!谢谢

$comps= gc "C:\Computers.txt"
$appname = gc "C:\appname.txt"
foreach($comp in $comps){
$program = gwmi -computer $comp Win32_Product | sort-object Name | select Name | where { $_.Name -match “$appname”}
if($program -eq $null)
{
 Write-host "Does Not"
}
else
{
$prod=gwmi -computer $comp win32_product  | ?{$_.name -eq "$appname"}
$prod.uninstall()
}
}