[This example is code from a book I am writing to be titled "Powershell: Logic, Syntax, and Semantics". All rights for the code below are reserved.] The code below uses .NET as the basis for a ping by name or IP function. RTT statistics are returned as objects.
# Uncomment two lines below to expose Methods and Properties:
# ([System.Net.NetworkInformation.Ping]).DeclaredMethods.Name
# ([System.Net.NetworkInformation.PingOptions]).DeclaredProperties.Name
$ping
= new-object System.Net.NetworkInformation.Ping
$pingoptions
= new-object System.Net.NetworkInformation.PingOptions
$pingoptions.ttl=255
$pingoptions.dontfragment=$false
function
pingstring($x,$y) {$i=0;$count=$y; do {$ping.Send("$x");$i++}
while($i -lt $count)}
[array[]]$hosts="nyt.com","latimes.com","sfgate.com","wapo.com"
Function
Ping-Collection ($hosts, $PingCount) {
foreach
($i in $hosts) {
$host_stats
= $i | foreach-object {pingstring $psitem $PingCount }
New-Object
psobject -property @{
Host
= [STRING]$i
IPAddresses=($host_stats.get_Address()).IPAddressToString
RTTs
= $host_stats.roundtriptime
RTT_Count
= [FLOAT]($host_stats | Measure-object -property roundtriptime).count
RTT_Sum
= [FLOAT]($host_stats | Measure-object -property roundtriptime
-sum).sum
RTT_Average
= [FLOAT]($host_stats | Measure-object -property roundtriptime
-average).average
}
| Select @{Name="IPAddress";Expression={$_.IPAddresses |
get-unique}},Host,RTTs,RTT_Count,RTT_Sum,RTT_Average
}
}
#[Result
as show below]
PS C:\ps1> Ping-Collection $hosts 12 | ft -auto
IPAddress Host RTTs RTT_Count RTT_Sum RTT_Average
--------- ---- ---- --------- ------- -----------
170.149.172.130 nyt.com {18, 19, 20, 20...} 12 241 20.08333
163.192.187.17 latimes.com {79, 71, 86, 73...} 12 884 73.66666
174.143.228.153 sfgate.com {58, 58, 57, 56...} 12 695 57.91667
208.185.109.113 wapo.com {90, 91, 93, 91...} 12 1103 91.91666
For a class C subnet range of IP Addresses of 10 pings of default packet size (255 addresses * 10 RTT * 32 bytes) :
$hosts = foreach($i in (1..255)) {[IPAddress]"23.1.1.$i"}
PS C:\> measure-command {$PingCollection=Ping-Collection $hosts 10}
Days : 0
Hours : 0
Minutes : 7
Seconds : 15
Milliseconds : 619
Ticks : 4356193908
TotalDays : 0.00504189109722222
TotalHours : 0.121005386333333
TotalMinutes : 7.26032318
TotalSeconds : 435.6193908
TotalMilliseconds : 435619.3908
PS C:\> $PingCollection.count
255
PS C:\> $PingCollection.count | sort RTT_Average | ft -auto | more
255
PS C:\> $PingCollection | sort RTT_Average | ft -auto | more
IPAddress Host RTTs RTT_Count RTT_Sum RTT_Average
--------- ---- ---- --------- ------- -----------
23.1.1.255 {0, 0, 0, 0...} 10 0 0
23.1.1.1 {0, 0, 0, 0...} 10 0 0
23.1.1.5 23.1.1.5 {99, 98, 99, 100...} 10 1084 108.4
23.1.1.137 23.1.1.137 {129, 115, 124, 117...} 10 1097 109.7
23.1.1.40 23.1.1.40 {110, 136, 106, 106...} 10 1125 112.5
23.1.1.198 23.1.1.198 {111, 106, 121, 109...} 10 1131 113.1
23.1.1.27 23.1.1.27 {117, 107, 132, 108...} 10 1132 113.2
23.1.1.33 23.1.1.33 {106, 142, 110, 108...} 10 1137 113.7
23.1.1.251 23.1.1.251 {107, 119, 113, 111...} 10 1138 113.8
23.1.1.41 23.1.1.41 {133, 106, 102, 101...} 10 1146 114.6
23.1.1.178 23.1.1.178 {111, 110, 119, 134...} 10 1147 114.7
....
No comments:
Post a Comment