$timeout=1000 Write-Host "Remove all existing former events" Get-EventSubscriber "PingEvent-*" | Unregister-Event Get-Event | Remove-Event Write-Host "Start Pings" foreach ($count in (1..254)) { $hostip = "192.168.178.$($count)" # Jeder Ping muss eine eindeutige Kennzeichnung bekommen [string]$VarName = "SyncPing_$($hostip)" # Die Variable wir dann mit einem PING-Objekt belegt New-Variable ` -Name $VarName ` -Value (New-Object System.Net.NetworkInformation.Ping) # Dann registrieren wir auf diese Variable den "PingCompleted"-Event Register-ObjectEvent ` -InputObject (Get-Variable $VarName -ValueOnly) ` -EventName PingCompleted ` -SourceIdentifier "PingEvent-$VarName" # und dann senden wir den Ping mit dem Timeout Write-Progress ` -Activity "Send ping" ` -Status "Ping $($VarName)" ` -PercentComplete ($count/254*100) (Get-Variable $VarName -ValueOnly).SendAsync($hostip, $timeout, $VarName) } Write-Host "PING Send. wait for completion" do { $totalevents = (Get-Event "PingEvent-*").count Write-Progress ` -Activity "Wait for completion" ` -Status "Completed: $($totalevents)" ` -PercentComplete ($totalevents/254*100) Start-Sleep -milliseconds 10 } while ($totalevents -lt 254) foreach ($event in (Get-Event "PingEvent-*")) { $event.SourceEventArgs ` | select @{Label="HostIP";Expression={$_.Userstate.Replace("SyncPing_-*","")}},` @{Label="Status";Expression={$_.Reply.Status}},` @{Label="RTT";Expression={$_.Reply.RoundTripTime}} } Write-host "Cleanup Evens and Subscribers" Get-EventSubscriber "PingEvent-*" | Unregister-Event Get-Event | Remove-Event