【发布时间】:2021-01-19 14:04:26
【问题描述】:
我编写了一个简短的脚本来卸载多台计算机上的程序(来自主机名的文本文档)。该脚本按预期工作,但每个主机大约需要 2-3 分钟。有没有办法在所有机器上同时执行此操作?
这是我的脚本。
$computers = Get-Content C:\Computernames.txt
foreach($Computer in $computers){
Invoke-Command -ComputerName $Computer -ScriptBlock{
$application = Get-WmiObject -Class Win32_Product -Filter "Name LIKE '%Appname%'"
#uninstall the app if it exists
if($application){
$application.Uninstall()
Write-Output "Application uninstalled successfully.."
}
else{
Write-Output "Application not found.."
}
}
}
我可以在Invoke-Command -ComputerName $Computers 上同时做所有机器以避免循环吗?
【问题讨论】:
-
-ComputerName参数支持计算机阵列。所以$Computers应该可以工作,只要它包含计算机名称。 -
“我可以……” - 你……试过了吗? :-) 这里没有人会阻止你
-
我试过了,但我或多或少不确定如何在不手动检查的情况下验证脚本是否真的在每台机器上运行。我添加了一个`Write-Output $env:COMPUTERNAME` 去掉了循环,并使用了
Invoke-Command -ComputerName $Computer -ScriptBlock{ ...,它打印了每个主机名,所以我相信它有效。
标签: powershell powershell-2.0 powershell-3.0 powershell-4.0