{"id":529,"date":"2014-06-26T07:37:58","date_gmt":"2014-06-26T07:37:58","guid":{"rendered":"http:\/\/giraffeit.com\/?p=529"},"modified":"2014-06-26T07:37:58","modified_gmt":"2014-06-26T07:37:58","slug":"psping","status":"publish","type":"post","link":"https:\/\/giraffeit.com\/index.php\/2014\/06\/26\/psping\/","title":{"rendered":"Powershell : Ping all machines"},"content":{"rendered":"<p>In theory you should know if all your machines are active or not in your environment. However as the environment gets bigger or more people work on it this can become confusing.<\/p>\n<p>This powershell script reads a list ( in txt format ) of machines you want to ping , how many pings , max concurrent pings times to ping and gives you an output file. We cant claim any glory on the the script but we are sharing the knowledge<\/p>\n<p>&nbsp;<\/p>\n<p>Param(<br \/>\n[parameter(Mandatory=$true)]<br \/>\n$InputFilePath,<br \/>\n[parameter(Mandatory=$true)]<br \/>\n$MaxConcurrent,<br \/>\n[parameter(Mandatory=$true)]<br \/>\n$TimesToPing,<br \/>\n$TimeoutInSeconds,<br \/>\n$ResolveNames<br \/>\n)<\/p>\n<p>$Start = [System.DateTime]::Now<br \/>\nWrite-Host &#8220;Version 1.0&#8221;<br \/>\nWrite-Host &#8220;InputFilePath:&#8221;$InputFilePath<br \/>\nWrite-Host &#8220;MaxConcurrent:&#8221;$MaxConcurrent<br \/>\nWrite-Host &#8220;TimesToPing:&#8221;$TimesToPing<br \/>\nWrite-Host &#8220;TimeoutInSeconds:&#8221;$TimeoutInSeconds<br \/>\nWrite-Host &#8220;ResolveNames:&#8221;$ResolveNames<\/p>\n<p>function GetNamesFromTextFile<br \/>\n{<br \/>\nparam($file)<\/p>\n<p>$ht = @{}<\/p>\n<p>try<br \/>\n{<br \/>\nforeach ($line in [System.IO.File]::ReadLines($file))<br \/>\n{<br \/>\ntry { $ht.Add($line.ToString().Trim(), $line.ToString().Trim()) } catch {}<br \/>\n}<br \/>\n}<br \/>\ncatch<br \/>\n{<br \/>\nWrite-Host &#8220;Failed to Read File, Exiting:&#8221;$ms -ForegroundColor Red<br \/>\nWrite-Host $_.Exception.Message -ForegroundColor Yellow<br \/>\nexit<br \/>\n}<\/p>\n<p>return $ht<br \/>\n}<\/p>\n<p>function GetStatusCodeString<br \/>\n{<br \/>\nparam ($code)<\/p>\n<p>switch ($code)<br \/>\n{<br \/>\n$null {$ret = &#8220;Ping Command Failed&#8221;}<br \/>\n0 {$ret = &#8220;Success&#8221;}<br \/>\n11001 {$ret = &#8220;Buffer Too Small&#8221;}<br \/>\n11002 {$ret = &#8220;Destination Net Unreachable&#8221;}<br \/>\n11003 {$ret = &#8220;Destination Host Unreachable&#8221;}<br \/>\n11004 {$ret = &#8220;Destination Protocol Unreachable&#8221;}<br \/>\n11005 {$ret = &#8220;Destination Port Unreachable&#8221;}<br \/>\n11006 {$ret = &#8220;No Resources&#8221;}<br \/>\n11007 {$ret = &#8220;Bad Option&#8221;}<br \/>\n11008 {$ret = &#8220;Hardware Error&#8221;}<br \/>\n11009 {$ret = &#8220;Packet Too Big&#8221;}<br \/>\n11010 {$ret = &#8220;Request Timed Out&#8221;}<br \/>\n11011 {$ret = &#8220;Bad Request&#8221;}<br \/>\n11012 {$ret = &#8220;Bad Route&#8221;}<br \/>\n11013 {$ret = &#8220;TimeToLive Expired Transit&#8221;}<br \/>\n11014 {$ret = &#8220;TimeToLive Expired Reassembly&#8221;}<br \/>\n11015 {$ret = &#8220;Parameter Problem&#8221;}<br \/>\n11016 {$ret = &#8220;Source Quench&#8221;}<br \/>\n11017 {$ret = &#8220;Option Too Big&#8221;}<br \/>\n11018 {$ret = &#8220;Bad Destination&#8221;}<br \/>\n11032 {$ret = &#8220;Negotiating IPSEC&#8221;}<br \/>\n11050 {$ret = &#8220;General Error&#8221;}<br \/>\ndefault {$ret = &#8220;Ping Failed&#8221;}<br \/>\n}<\/p>\n<p>return $ret<br \/>\n}<\/p>\n<p>function GetPingResultsFromHashTable<br \/>\n{<br \/>\nparam($ht, $maxConcurrent, $count, $timeout)<\/p>\n<p>$bDone = $false<br \/>\n$i = 0<br \/>\n$totalMachines = 0<br \/>\n$htResults = @{}<br \/>\n$dotTime = [System.DateTime]::Now<br \/>\nif ($timeout -eq $null) {$timeout = 120}<\/p>\n<p>Write-Host (&#8220;Sending Ping Command to {0} Machines&#8221; -f $ht.Count) -NoNewline<\/p>\n<p>foreach ($name in $ht.GetEnumerator())<br \/>\n{<br \/>\nwhile ((Get-Job -State Running).Count -ge $maxConcurrent)<br \/>\n{<br \/>\nStart-Sleep -Seconds 1<br \/>\nif ($i -ge 50) { Write-Host &#8220;*&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;*&#8221; -NoNewline; $i++ }<br \/>\n}<\/p>\n<p>$job = Test-Connection -ComputerName $name.Key.ToString() -Count $count -AsJob<br \/>\n$job.name = &#8220;ping:{0}&#8221; -f $name.Key.ToString()<\/p>\n<p>if ([System.DateTime]::Now -gt $dotTime)<br \/>\n{<br \/>\n$dotTime = ([System.DateTime]::Now).AddSeconds(1)<br \/>\nif ($i -ge 50) { Write-Host &#8220;.&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;.&#8221; -NoNewline; $i++ }<br \/>\n}<br \/>\n}<\/p>\n<p>#Start time now, exit in case of timeout<br \/>\n$timeout = ([System.DateTime]::Now).AddSeconds($timeout)<br \/>\n$dotTime = [System.DateTime]::Now<br \/>\n$i = 0<br \/>\nWrite-Host<br \/>\nWrite-Host &#8220;Getting Ping Results&#8221; -NoNewline<\/p>\n<p>while(!($bDone))<br \/>\n{<br \/>\n$results = Get-Job -Name &#8216;ping:*&#8217;<br \/>\n$bRunning = $false<\/p>\n<p>foreach ($result in $results)<br \/>\n{<br \/>\nif ($result.State -ne &#8216;Running&#8217;)<br \/>\n{<br \/>\nif ($result.State -eq &#8216;Failed&#8217;)<br \/>\n{<br \/>\n#resubmit job<br \/>\nif ($i -ge 50) { Write-Host &#8220;+&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;+&#8221; -NoNewline; $i++ }<br \/>\n$job = Test-Connection -ComputerName $result.Name.ToString().Split(&#8220;:&#8221;)[1] -Count $count -AsJob<br \/>\n$job.name = &#8220;ping:{0}&#8221; -f $result.Name.ToString().Split(&#8220;:&#8221;)[1]<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\ntry { $htResults.Add($result.Name.ToString().Split(&#8220;:&#8221;)[1], (Receive-Job $result)) } catch {}<br \/>\n$totalMachines++<br \/>\n}<\/p>\n<p>if ([System.DateTime]::Now -gt $dotTime)<br \/>\n{<br \/>\n$dotTime = ([System.DateTime]::Now).AddSeconds(1)<br \/>\nif ($i -ge 50) { Write-Host &#8220;.&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;.&#8221; -NoNewline; $i++ }<br \/>\n}<\/p>\n<p>try { Remove-Job $result } catch {}<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n$bRunning = $true<br \/>\n}<br \/>\n}<\/p>\n<p>#Check for timeout condition, clean up all jobs if true<br \/>\nif ([System.DateTime]::Now -gt $timeout)<br \/>\n{<br \/>\n$bDone = $true<br \/>\nWrite-Host &#8220;Timeout reached, removing jobs&#8221;<br \/>\n$results = Get-Job -Name &#8216;ping:*&#8217;<br \/>\nforeach ($result in $results)<br \/>\n{<br \/>\nWrite-Host &#8220;RemoveJob:&#8221;$result.Name<br \/>\ntry<br \/>\n{<br \/>\nStop-Job $result<br \/>\ntry { Remove-Job $result -Force } catch {}<br \/>\n}<br \/>\ncatch {}<br \/>\n}<br \/>\n}<\/p>\n<p>#If the timeout hasn&#8217;t been reached and jobs are still running, loop again<br \/>\nif (!($bRunning)) { $bDone = $true }<br \/>\n}<\/p>\n<p>Write-Host<br \/>\nWrite-Host (&#8220;Received Ping Results From {0} Machines&#8221; -f $totalMachines)<\/p>\n<p>return $htResults<br \/>\n}<\/p>\n<p>function ResolveNamesFromPingResults<br \/>\n{<br \/>\nparam($array, $maxConcurrent, $resolveNames, $timeout)<\/p>\n<p>try { if ($resolveNames -ne $null) { [bool]$resolveNames = [System.Convert]::ToBoolean($resolveNames) } } catch {}<\/p>\n<p>$htResults = @{}<\/p>\n<p>if ($resolveNames)<br \/>\n{<br \/>\n$dotTime = ([System.DateTime]::Now)<br \/>\nif ($timeout -eq $null) {$timeout = 120}<br \/>\n$i = 0<br \/>\n$scriptBlock =<br \/>\n{<br \/>\nparam($s)<br \/>\ntry { $ret = [System.Net.DNS]::GetHostEntry($s) } catch {}<br \/>\nreturn $ret<br \/>\n}<br \/>\nWrite-Host (&#8220;Resolving DNS Names for {0} Machines&#8221; -f $array.Count) -NoNewline<br \/>\nforeach ($name in $array)<br \/>\n{<br \/>\nwhile ((Get-Job -State Running).Count -ge $maxConcurrent)<br \/>\n{<br \/>\nStart-Sleep -Seconds 1<br \/>\nif ($i -ge 50) { Write-Host &#8220;*&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;*&#8221; -NoNewline; $i++ }<br \/>\n}<br \/>\n$job = Start-Job -ScriptBlock $scriptBlock -ArgumentList $name.NameInList<br \/>\n$job.name = &#8220;resolve:{0}&#8221; -f $name.NameInList<br \/>\nif ([System.DateTime]::Now -gt $dotTime)<br \/>\n{<br \/>\n$dotTime = ([System.DateTime]::Now).AddSeconds(1)<br \/>\nif ($i -ge 50) { Write-Host &#8220;.&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;.&#8221; -NoNewline; $i++ }<br \/>\n}<br \/>\n}<\/p>\n<p>#Start time now, exit in case of timeout<br \/>\n$timeout = ([System.DateTime]::Now).AddSeconds($timeout)<br \/>\n$dotTime = ([System.DateTime]::Now)<br \/>\n$i = 0<br \/>\n$bDone = $false<\/p>\n<p>Write-Host<br \/>\nWrite-Host &#8220;Getting DNS Results&#8221; -NoNewline<br \/>\nwhile(!($bDone))<br \/>\n{<br \/>\n$results = Get-Job -Name &#8216;resolve:*&#8217;<br \/>\n$bRunning = $false<\/p>\n<p>foreach ($result in $results)<br \/>\n{<br \/>\nif ($result.State -ne &#8216;Running&#8217;)<br \/>\n{<br \/>\nif ($result.State -eq &#8216;Failed&#8217;)<br \/>\n{<br \/>\n#resubmit job<br \/>\nif ($i -ge 50) { Write-Host &#8220;+&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;+&#8221; -NoNewline; $i++ }<br \/>\n$job = Start-Job -ScriptBlock $scriptBlock -ArgumentList $result.Name.ToString().Split(&#8220;:&#8221;)[1]<br \/>\n$job.name = &#8220;resolve:{0}&#8221; -f $result.Name.ToString().Split(&#8220;:&#8221;)[1]<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\ntry { $htResults.Add($result.Name.ToString().Split(&#8220;:&#8221;)[1], (Receive-Job $result)) } catch {continue}<br \/>\n}<\/p>\n<p>if ([System.DateTime]::Now -gt $dotTime)<br \/>\n{<br \/>\n$dotTime = ([System.DateTime]::Now).AddSeconds(1)<br \/>\nif ($i -ge 50) { Write-Host &#8220;.&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;.&#8221; -NoNewline; $i++ }<br \/>\n}<\/p>\n<p>try { Remove-Job $result -Force} catch {}<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n$bRunning = $true<br \/>\n}<br \/>\n}<\/p>\n<p>#Check for timeout condition, clean up all jobs if true<br \/>\nif ([System.DateTime]::Now -gt $timeout)<br \/>\n{<br \/>\n$bDone = $true<br \/>\nWrite-Host &#8220;Timeout reached, removing jobs&#8221;<br \/>\n$results = Get-Job -Name &#8216;resolve:*&#8217;<br \/>\nforeach ($result in $results)<br \/>\n{<br \/>\nWrite-Host &#8220;RemoveJob:&#8221;$result.Name<br \/>\ntry<br \/>\n{<br \/>\nStop-Job $result<br \/>\ntry { Remove-Job $result -Force } catch {}<br \/>\n}<br \/>\ncatch {}<br \/>\n}<br \/>\n}<\/p>\n<p>#If the timeout hasn&#8217;t been reached and jobs are still running, loop again<br \/>\nif (!($bRunning)) { $bDone = $true }<br \/>\n}<br \/>\nWrite-Host<br \/>\nWrite-Host (&#8220;Received DNS Results From {0} Machines&#8221; -f $htResults.Count)<br \/>\n}<\/p>\n<p>return $htResults<br \/>\n}<\/p>\n<p>function GetFormattedPingResultsFromHashTable<br \/>\n{<br \/>\nparam($ht)<\/p>\n<p>$fResults = New-Object System.Collections.ArrayList<br \/>\n$dotTime = ([System.DateTime]::Now)<br \/>\n$i = 0<br \/>\nWrite-Host &#8220;Formatting Ping Results&#8221; -NoNewLine<\/p>\n<p>foreach ($result in $ht.GetEnumerator())<br \/>\n{<br \/>\n#There are multiple pings here if we ping more than once per computer<br \/>\n$originalAddress = $result.Key.ToString()<br \/>\n$pingCount = 0<br \/>\n$successCount = 0<br \/>\n$status = &#8216;Ping Job Failed&#8217;<br \/>\n$pingedFrom = &#8216;Ping Job Failed&#8217;<br \/>\n$successPercentage = 0<\/p>\n<p>try { $pings = $result.Value.Count } catch { $pings = 0 }<br \/>\nif ($pings -gt 0)<br \/>\n{<br \/>\n$status = GetStatusCodeString -code $result.Value[$pings-1].StatusCode<br \/>\n$pingedFrom = $result.Value[$pings-1].PSComputerName<br \/>\n}<\/p>\n<p>foreach ($ping in $result.Value)<br \/>\n{<br \/>\n$pingCount++<br \/>\nif ($ping.StatusCode -eq 0) { $successCount++ }<br \/>\n#If you try to get the IPv4Address or IPv6Address it slows down this loop significantly<br \/>\n}<\/p>\n<p>#Calculate percentage<br \/>\nif ($pingCount -ne 0) { $successPercentage = ($successCount \/ $pingCount) * 100 }<br \/>\nelse { $successPercentage = 0 }<\/p>\n<p>#Add to array<br \/>\n$o = New-Object PSObject -Property @{<br \/>\nNameInList = $originalAddress<br \/>\nPingedFrom = $pingedFrom<br \/>\nSuccessPercentage = $successPercentage<br \/>\nLastPingStatus = $status<br \/>\n}<\/p>\n<p>[void]$fResults.Add($o)<\/p>\n<p>if ([System.DateTime]::Now -gt $dotTime)<br \/>\n{<br \/>\n$dotTime = ([System.DateTime]::Now).AddSeconds(1)<br \/>\nif ($i -ge 50) { Write-Host &#8220;.&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;.&#8221; -NoNewline; $i++ }<br \/>\n}<br \/>\n}<\/p>\n<p>Write-Host<br \/>\nWrite-Host (&#8220;Formatted Ping Results for {0} Machines&#8221; -f $fResults.Count)<\/p>\n<p>return $fResults<br \/>\n}<\/p>\n<p>function GetFormattedPingAndDNSResults<br \/>\n{<br \/>\nparam($pingResults, $dnsResults)<\/p>\n<p>if ($dnsResults.Count -ne 0)<br \/>\n{<br \/>\nWrite-Host &#8220;Formatting DNS Results&#8221; -NoNewLine<br \/>\n$dotTime = ([System.DateTime]::Now)<br \/>\n$i = 0<br \/>\nforeach ($ping in $pingResults)<br \/>\n{<br \/>\n$dns = $dnsResults.Get_Item($ping.NameInList)<br \/>\nif ($dns -ne $null)<br \/>\n{<br \/>\n$bFirst = $true<br \/>\nforeach ($ip in $dns.AddressList)<br \/>\n{<br \/>\nif ($bFirst){ $ipList = $ip }<br \/>\nelse { $ipList += &#8220;|&#8221; + $ip }<br \/>\n}<\/p>\n<p>$fqdn = $dns.HostName<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n$ipList = $null<br \/>\n$fqdn = &#8216;No DNS Entry Found&#8217;<br \/>\n}<\/p>\n<p>$ping | Add-Member -MemberType NoteProperty -Name NameFromDNS -value $fqdn -Force<br \/>\n$ping | Add-Member -MemberType NoteProperty -Name IPAddressListFromDNS -value $ipList -Force<\/p>\n<p>if ([System.DateTime]::Now -gt $dotTime)<br \/>\n{<br \/>\n$dotTime = ([System.DateTime]::Now).AddSeconds(1)<br \/>\nif ($i -ge 50) { Write-Host &#8220;.&#8221;; $i = 0 }<br \/>\nelse { Write-Host &#8220;.&#8221; -NoNewline; $i++ }<br \/>\n}<br \/>\n}<br \/>\nWrite-Host<br \/>\nWrite-Host (&#8220;Formatted DNS Results for {0} Machines&#8221; -f $pingResults.Count)<br \/>\n}<\/p>\n<p>return $pingResults<br \/>\n}<\/p>\n<p>function GetOutputPath<br \/>\n{<br \/>\nparam($fileName, $dir)<br \/>\n$outputPath = $dir + &#8220;&#8221; + $fileName<br \/>\nreturn $outputPath<br \/>\n}<\/p>\n<p>function GetTimeSpanStringInMinutesAndSeconds<br \/>\n{<br \/>\nparam($startTime, $endTime)<\/p>\n<p>$time = $startTime.Subtract($endTime)<br \/>\n$minutes = $time.ToString().Split(&#8220;:&#8221;)[1]<br \/>\n$seconds = $time.ToString().Split(&#8220;:&#8221;)[2].Split(&#8220;.&#8221;)[0]<br \/>\n$timeSpan = &#8220;{0} Minutes and {1} Seconds&#8221; -f $minutes, $seconds<br \/>\nreturn $timeSpan<br \/>\n}<\/p>\n<p>function GetSuccessPingCount<br \/>\n{<br \/>\nparam($results)<\/p>\n<p>$successCount = 0<br \/>\nforeach ($result in $results)<br \/>\n{<br \/>\nif ($result.SuccessPercentage -gt 0) { $successCount++ }<br \/>\n}<\/p>\n<p>return $successCount<br \/>\n}<\/p>\n<p>function GetDNSNamesResolvedCount<br \/>\n{<br \/>\nparam($results)<\/p>\n<p>$namesResolved = 0<br \/>\nforeach ($result in $results)<br \/>\n{<br \/>\nif ($result.IPAddressListFromDNS -ne $null) { $namesResolved++ }<br \/>\n}<\/p>\n<p>return $namesResolved<br \/>\n}<\/p>\n<p>function GetPercentageAsString<br \/>\n{<br \/>\nparam($n1, $n2)<\/p>\n<p>if ($n1 -ne 0) { $percentage = ($n1 \/ $n2) * 100 }<br \/>\nelse { $percentage = 0 }<\/p>\n<p>$percentage = (&#8220;{0:N0}&#8221; -f $percentage) + &#8220;%&#8221;<\/p>\n<p>return $percentage<br \/>\n}<\/p>\n<p>#Read in Names from text file<br \/>\n$Names = GetNamesFromTextFile -file $InputFilePath<\/p>\n<p>#Get ping results in a hash table. The key is the name and the value is the returned array of ping objects (one element per ping).<br \/>\n$Results = GetPingResultsFromHashTable -ht $Names -maxConcurrent $MaxConcurrent -count $TimesToPing -timeout $TimeoutInSeconds<\/p>\n<p>#Format ping results into an array of objects<br \/>\n$FormattedPingResults = GetFormattedPingResultsFromHashTable -ht $Results<\/p>\n<p>#Resolve DNS Names if specified<br \/>\n$DNSResults = ResolveNamesFromPingResults -array $FormattedPingResults -maxConcurrent 5 -resolveNames $ResolveNames -timeout $TimeoutInSeconds<\/p>\n<p>#Format DNS results by adding them to the ping results<br \/>\n$FormattedPingResults = GetFormattedPingAndDNSResults -pingResults $FormattedPingResults -dnsResults $DNSResults<\/p>\n<p>#Output to CSV<br \/>\n$OutputPath = GetOutputPath -fileName &#8216;PingResults.csv&#8217; -dir ([Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath)<br \/>\ntry { if ($ResolveNames -ne $null) { [bool]$ResolveNames = [System.Convert]::ToBoolean($ResolveNames) } } catch {}<br \/>\nif ($ResolveNames) { $FormattedPingResults | Sort-Object SuccessPercentage | Select-Object NameInList, NameFromDNS, IPAddressListFromDNS, SuccessPercentage, LastPingStatus, PingedFrom | Export-Csv -Path $OutputPath -NoTypeInformation }<br \/>\nelse { $FormattedPingResults | Sort-Object SuccessPercentage | Select-Object NameInList, SuccessPercentage, LastPingStatus, PingedFrom | Export-Csv -Path $OutputPath -NoTypeInformation }<\/p>\n<p>#Output Statistics<br \/>\n$SuccessPingCount = GetSuccessPingCount -results $FormattedPingResults<br \/>\nWrite-Host &#8220;&#8212;Statistics&#8212;&#8221; -ForegroundColor Green<br \/>\nWrite-Host (&#8220;Total Time Elapsed: &#8221; + (GetTimeSpanStringInMinutesAndSeconds -startTime $Start -endTime ([System.DateTime]::Now))) -ForegroundColor Green<br \/>\nWrite-Host &#8220;Total Names Pinged:&#8221;$FormattedPingResults.Count -ForegroundColor Green<br \/>\nWrite-Host (&#8220;Hosts that Responded: &#8221; + ($SuccessPingCount)) -ForegroundColor Green<br \/>\nWrite-Host (&#8220;DNS Names Resolved: &#8221; + (GetDNSNamesResolvedCount -results $FormattedPingResults)) -ForegroundColor Green<br \/>\nWrite-Host (&#8220;Percentage of Hosts that Responded at Least Once: &#8221; + (GetPercentageAsString -n1 $SuccessPingCount -n2 $FormattedPingResults.Count)) -ForegroundColor Green<br \/>\nWrite-Host &#8220;CSV Output Location:&#8221;$OutputPath -ForegroundColor Yellow<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In theory you should know if all your machines are active or not in your environment. However as the environment gets bigger or more people work on it this can become confusing. This powershell script reads a list ( in txt format ) of machines you want to ping , how many pings , max &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/giraffeit.com\/index.php\/2014\/06\/26\/psping\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Powershell : Ping all machines&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-529","post","type-post","status-publish","format-standard","hentry","category-bog"],"_links":{"self":[{"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/posts\/529","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/comments?post=529"}],"version-history":[{"count":0,"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/posts\/529\/revisions"}],"wp:attachment":[{"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/media?parent=529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/categories?post=529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/giraffeit.com\/index.php\/wp-json\/wp\/v2\/tags?post=529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}