すでに多くの調査を行っていますが、やりたいことを達成する方法がまだわかりません。
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 使用率など) を別のファイルに書き込みたいのですが、複数のジョブがこのファイルに同時に書き込もうとしていることです。
私の考えは、すべてのメッセージを配列に保存し、スクリプトの最後 (2 番目の foreach ループ) の内容をファイルに書き込むことです。
しかし、Receive-Job は変数/オブジェクトを返しません。
変数/オブジェクトを返す方法はありますか? または、私がやりたいことを達成する別の方法はありますか?
助けていただければ幸いです。ありがとう。