Improved ping-host.ps1

This commit is contained in:
Markus Fleschutz 2024-11-04 15:08:49 +01:00
parent d72ffb9490
commit e09c53bcc5

View File

@ -1,75 +1,40 @@
<#
.SYNOPSIS
Ping a host
Pings a host
.DESCRIPTION
This PowerShell script pings the given host continously and shows the roundtrip times in a horizontal chart.
This PowerShell script pings the given host.
.PARAMETER hostname
Specifies the hostname or IP address of the host to ping (windows.com by default)
.PARAMETER timeInterval
Specifies the time interval in milliseconds to repeat the ping (1000 by default)
Specifies the hostname or IP address to ping (windows.com by default)
.EXAMPLE
PS> ./ping-host.ps1
-----------------------------------------
Ping Roundtrip Times to windows.com
-----------------------------------------
#1 ██████████████ 136ms
#2 ████████████████ 154ms
#3 █████████████████████████ 234ms
...
PS> ./ping-host.ps1 x.com
x.com is up with 10ms latency.
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$hostname = "windows.com", [int]$timeInterval = 1000)
param([string]$hostname = "windows.com")
function GetPingLatency([string]$hostname) {
$hostsArray = $hostname.Split(",")
$tasks = $hostsArray | foreach {
(New-Object Net.NetworkInformation.Ping).SendPingAsync($_,1000)
(New-Object Net.NetworkInformation.Ping).SendPingAsync($_,1500)
}
[Threading.Tasks.Task]::WaitAll($tasks)
foreach($ping in $tasks.Result) {
if ($ping.Status -eq "Success") { return $ping.RoundtripTime }
}
return 1000
}
function WriteChartLine { param([float]$value, [float]$maxValue, [string]$text)
$num = ($value * 108.0) / $maxValue
while ($num -ge 1.0) {
Write-Host -noNewLine ""
$num -= 1.0
}
if ($num -ge 0.875) {
Write-Host -noNewLine ""
} elseif ($num -ge 0.75) {
Write-Host -noNewLine ""
} elseif ($num -ge 0.625) {
Write-Host -noNewLine ""
} elseif ($num -ge 0.5) {
Write-Host -noNewLine ""
} elseif ($num -ge 0.375) {
Write-Host -noNewLine ""
} elseif ($num -ge 0.25) {
Write-Host -noNewLine ""
} elseif ($num -ge 0.125) {
Write-Host -noNewLine ""
}
Write-Host " $text"
return 1500
}
try {
Write-Host "`n PING ROUNDTRIP TIMES TO: $hostname" -foregroundColor green
[int]$count = 1
do {
[float]$latency = GetPingLatency $hostname
Write-Host "#$count " -noNewline
WriteChartLine $latency 1000.0 "$($latency)ms"
Start-Sleep -Milliseconds $timeInterval
$count++
} while($true)
[int]$latency = GetPingLatency($hostname)
if ($latency -eq 1500) {
Write-Host "⚠️ Host '$hostname' is offline"
} else {
Write-Host "$hostname is up with $($latency)ms ping latency."
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"