# encoding: ascii
# api: powershell
# title: 
# description: Selects only objects containing a hostname that is pingable.
# version: 0.1
# type: function
# license: CC0
# function: Select-Alive
# x-poshcode-id: 601
# x-archived: 2014-08-01T18:21:03
#
#
function Select-Alive {param(	[object]$InputObject,
								[string]$Property,
								[int32]$Requests = 3)

	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}
		
		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) {return $null}
		}
		return $In
	}
}
