我已经做了很多研究,但仍然无法弄清楚如何完成我想做的事情。
我想在 100 台 Linux 服务器上并行执行相同的任务。
这是我的脚本的简化示例:
$computer=Get-Content "serverList.txt"
$jobArray=@()
$script={
$cpuThresh=70
$cpuUsage=<Get CPU usage of the host>
Write-Host "CPU Usage: $cpuUsage %"
if ($cpuUsage -ge $cpuThresh) {
Write-Host "Unexpected CPU Usage" -ForegroundColor Red
}
}
foreach ($system in $computer) {
$jobArray += Start-Job -ScriptBlock $script -ArgumentList $system
While ((Get-Job -State 'Running').Count -ge 10) {
Start-Sleep -Milliseconds 10
}
}
foreach ($job in $jobArray) {
While ($job.State -eq 'Running') {
Start-Sleep -Milliseconds 10
}
Receive-Job -Job $job
Remove-Job -Job $job
}
我遇到的问题是我想将某些消息(例如意外的 CPU 使用率)写入单独的文件,并且多个作业正在尝试同时写入该文件。
我的想法是将所有消息保存到一个数组中,并将脚本末尾的内容(第二个 foreach 循环)写入文件。
但 Receive-Job 不返回任何变量/对象。
有没有办法返回一个变量/对象?还是有另一种方法来实现我想做的事情?
我将不胜感激任何帮助。谢谢。