我將使用 ping 開發資產發現。我需要同時 ping 多個網路,所以發現速度會增加。為了做到這一點,我定義了一個哈希表如下,其中包含目標網路。那么,如何同時ping多個網路呢?
請看一下我的代碼片段:
$Hosts = @{}
$Time = Get-Date
$Networks = @{
Network_X = 1..254 | ForEach-Object{ "192.168.50.$_"}
Network_Y = 1..254 | ForEach-Object{ "192.168.63.$_"}
Network_Z = 1..254 | ForEach-Object{ "192.168.65.$_"}
}
我使用“ForEach-Object”或“Foreach”失敗了。
uj5u.com熱心網友回復:
您可以使用Ping.SendPingAsync()異步啟動 ping:
$PingTasks = foreach($network in $Networks.GetEnumerator()) {
foreach($ip in $network.Value){
# for each IP in each network, create a new object with both details an async ping task
[pscustomobject]@{
Network = $network.Name
IP = $ip
Request = [System.Net.NetworkInformation.Ping]::new().SendPingAsync($IP)
}
}
}
# Wait for all tasks to finish
[System.Threading.Tasks.Task]::WaitAll($PingTasks.Request)
# Gather results
foreach($task in $PingTasks){
if($task.Request.Result.Status -eq 'Success'){
# Extract Network IP from the hosts that responded to our ping
$Hosts[$task.IP] = $task |Select-Object Network,IP
}
}
$Hosts 現在將包含每個成功 ping 的 IP 的條目,并附有網路名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/323342.html
