有效地卸载许多计算机的程序

时间:2015-06-16 18:05:32

标签: powershell powershell-v3.0 powershell-v4.0

我有一个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()
   }
}

2 个答案:

答案 0 :(得分:1)

尝试使用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()
            }
        }
    }
}

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

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

答案 1 :(得分:0)

知道了!感谢

$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()
}
}