Referencing this Stack Overflow post.
Running your construct on 3 servers of mine took 2:23.
Running the below script took 2:07. Not a lot of savings, but running on a larger number may get you more time savings. You can also mess around with how you output at the end I think.
# 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