Since we don’t use DHCP in our server subnets, I frequently have to locate free IP addresses when deploying a server. I remembered reading a TechNet Magazine article by Don Jones that used the PowerShell PROCESS block and the Win32_PingStatus WMI class in a sample script.
I took that and rewrote the function a little:
function Ping-Address {
PROCESS {
$ping = 'unreachable'
$formatstring = "{0,-15} {1,-12} {2}"
$queryString = "SELECT * FROM Win32_PingStatus"
$queryString += " WHERE Address = '$_' AND"
$queryString += " ResolveAddressNames = $true"
$results = Get-WmiObject -query $queryString
foreach ($result in $results) {
if ($results.StatusCode -eq 0) {
$ping = 'ping!'
}
}
$formatstring -f $_,$ping,$results.ProtocolAddressResolved
}
}
I can then use this function like so:
PS Z:\> (14..20) | %{ '132.198.59.'+ $_.ToString()} | Ping-Address
132.198.59.14 ping! 132.198.59.14
132.198.59.15 ping! 132.198.59.15
132.198.59.16 ping! xxxxxxx.campus.ad.uvm.edu
132.198.59.17 ping! xxxxxxx.uvm.edu
132.198.59.18 unreachable
132.198.59.19 ping! xxxx.uvm.edu
132.198.59.20 unreachable
I’ve already used it a bunch of times. I think I will probably grow this into a real script, taking the IP address range info as parameters. Another day.