Como faço esse script rodar em paralelo?

2

Eu tenho um script, mas leva horas para ser executado. O que eu preciso fazer para que isso corra em paralelo?

 $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
 }
    
por Jake 14.09.2011 / 13:36

1 resposta

4

Referenciando este post de estouro de pilha

Executando sua construção em 3 servidores meus levou 2:23.

A execução do script abaixo levou 2:07. Não há muita economia, mas a execução em um número maior pode proporcionar mais economia de tempo. Você também pode mexer em como você produz no final, eu acho.

# 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
    
por 14.09.2011 / 19:14

Tags