У меня есть сценарий, но его выполнение занимает несколько часов. Что мне нужно сделать, чтобы запустить это параллельно?
$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
}
Ссылка этот Сообщение о переполнении стека.
Запуск вашей конструкции на трех моих серверах занял 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