Skip to content

Watch-Ping

Watch pinging a host

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: $($Error[0]) (script line $($_.InvocationInfo.ScriptLineNumber))"
	exit 1
}

Specifies the hostname or IP address to ping (windows.com by default)

Specifies the time interval in milliseconds between two pings (1000 by default)

An interactive directory of PowerShell scripts.