Как заставить этот скрипт работать параллельно?
У меня есть сценарий, но выполнение занимает несколько часов. Что мне нужно сделать, чтобы запустить это параллельно?
$servers = Get-Content -Path c:\Scripts\MyServerList.txt
foreach ($Server in $servers)
{
Write-Output $Server;
Get-EventLog -LogName System -EntryType Error -ComputerName $Server | Measure-Object
}
1 ответ
Ссылка на этот пост переполнения стека.
Выполнение вашей конструкции на 3 моих серверах заняло 2:23.
Выполнение приведенного ниже сценария заняло 2:07. Не много сбережений, но использование большего количества может сэкономить вам больше времени. Я думаю, вы также можете возиться с тем, как вы выводите в конце.
# Loop through the server list
Get-Content "C:\scripts\Servers.txt"| %{
# Define what each job does
$ScriptBlock = {
param($Server)
Write-Output $Server;
Get-EventLog -LogName System -EntryType Error -ComputerName $Server | Measure-Object|Out-String -Stream
}
# Execute the jobs in parallel
Start-Job $ScriptBlock -ArgumentList $_
}
# Wait for it all to complete
While (Get-Job -State "Running")
{
Start-Sleep 1
}
# Getting the information back from the jobs
Get-Job | Receive-Job|Write-Host