# encoding: ascii
# api: powershell
# title: Select-Alive
# description: Selects only objects containing a hostname that is pingable.
# version: 0.1
# type: function
# author: dragonmc77
# license: CC0
# function: Select-Alive
# x-poshcode-id: 604
# x-archived: 2014-08-01T20:44:26
# x-published: 2009-09-25T13:51:00
#
#
## this filer passes through only objects that are pingable
## it takes any object as input, but the property containing the hostname
## to ping must be specified if the object is not a string
function Select-Alive {param( [object]$InputObject,
[string]$Property,
[int32]$Requests = 3,
[switch]$Verbose)
PROCESS {
if ($InputObject -eq $null) {$In = $_} else {$In = $InputObject}
if ($In.GetType().Name -eq "String") {
$HostName = $In
}
elseif (($In | Get-Member | Where-Object {$In.Name -eq $Property}) -ne $null) {
$HostName = $In.$Property
} else {return $null}
if ($Verbose) {Write-Host "Pinging $HostName..." -NoNewline}
for ($i = 1; $i -le $Requests; $i++) {
$Result = Get-WmiObject -Class Win32_PingStatus -ComputerName . -Filter "Address='$HostName'"
Start-Sleep -Seconds 1
if ($Result.StatusCode -ne 0) {
if ($Verbose) {Write-Host "No response." -ForegroundColor "Red"}
return $null
}
}
if ($Verbose) {Write-Host "Success." -ForegroundColor "Green"}
return $In
}
}