我已經做了大量的研究,但仍然無法弄清楚如何完成我想要做的事情。Powershell並行作業輸出文件
我想在100臺Linux服務器上並行執行相同的任務。
這裏是我的腳本的一個簡單的例子:
$computer=Get-Content "serverList.txt"
[email protected]()
$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不返回任何變量/對象。
有沒有辦法返回變量/對象?還是有另一種方法來實現我想要做的事情?
我將不勝感激任何幫助。謝謝。
非常感謝您的快速回復。應該考慮使用不同的輸出流... 我唯一的問題是$ job.ChildJobs [0] .Warning返回一個包含所有消息的對象。 什麼是擺脫消息頭的最佳方式? 寫輸出$警告|選擇消息| Format-Table -HideTableHeaders 這就是我現在正在做的。有更好的解決方案嗎? – user3015914
$警告|寫輸出似乎工作 – mjolinor