From d72ffb94904532a9e104aa0ee67aa3042e4b3a33 Mon Sep 17 00:00:00 2001 From: Markus Fleschutz Date: Mon, 4 Nov 2024 10:58:37 +0100 Subject: [PATCH] Added watch-ping.ps1 --- scripts/watch-ping.ps1 | 76 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 scripts/watch-ping.ps1 diff --git a/scripts/watch-ping.ps1 b/scripts/watch-ping.ps1 new file mode 100644 index 00000000..618e8bb4 --- /dev/null +++ b/scripts/watch-ping.ps1 @@ -0,0 +1,76 @@ +<# +.SYNOPSIS + Watch pinging a host +.DESCRIPTION + This PowerShell script pings the given host continously and shows the roundtrip times in a horizontal chart. +.PARAMETER hostname + Specifies the hostname or IP address to ping (windows.com by default) +.PARAMETER timeInterval + Specifies the time interval in milliseconds between two pings (1000 by default) +.EXAMPLE + PS> ./watch-ping.ps1 + + PING ROUNDTRIP TIMES TO: windows.com + #1 ██████████████ 136ms + #2 ████████████████ 154ms + #3 █████████████████████████ 234ms + ... +.LINK + https://github.com/fleschutz/PowerShell +.NOTES + Author: Markus Fleschutz | License: CC0 +#> + +param([string]$hostname = "windows.com", [int]$timeInterval = 1000) + +function GetPingLatency([string]$hostname) { + $hostsArray = $hostname.Split(",") + $tasks = $hostsArray | foreach { + (New-Object Net.NetworkInformation.Ping).SendPingAsync($_,1000) + } + [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" +} + +try { + Write-Host "`n PING ROUNDTRIP TIMES TO: $hostname" -foregroundColor green + [int]$count = 1 + do { + Write-Host "#$count " -noNewline + [float]$latency = GetPingLatency $hostname + WriteChartLine $latency 1000.0 "$($latency)ms" + Start-Sleep -Milliseconds $timeInterval + $count++ + } while($true) + exit 0 # success +} catch { + "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" + exit 1 +} \ No newline at end of file