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