Introduction
This tool is designed so you can test ping response to
multiple addresses, in a clear and compact display. An example of the output is
below, in which the tool is being run against 7 IP addresses (of which 3 are
down). The tool simply refreshes the display after every test.
Image: PingTestingTool.ps1
Note: The asterisk indicates
which address is currently being tested. When addresses are up, this asterisk
moves very quickly. If all IP addresses are up, sometimes the asterisk moves so
quickly that it stays still!
The Script
Save the below as say PingTestingTool.ps1, and right-click the file and select “Run with PowerShell” to run, or run
from PowerShell as .\PingTestingTool.ps1.
Alternatively you can provide a PingTestingTool.ini
file with the list of addresses to be pinged.
#######################
# PingTestingTool.ps1 #
#######################
Function
ProcessArray {
Param([System.Array]$ArrayToProcess)
[System.Array]$ProcessedArray = @()
Foreach ($ArrayLine in $ArrayToProcess){
If( ($ArrayLine -ne "") -and
($ArrayLine.substring(0,1) -ne "#") ){ $ProcessedArray += $ArrayLine
}
}
, $ProcessedArray
}
[Int16]$i
= 1
[System.Array]$targets
= @()
If(
!(Test-Path PingTestingTool.ini) ){
"Enter IP Addresses/Hostnames of Targets
(press enter to terminate entry)"
[String]$answer = $True
While ($answer -ne ""){
$answer = Read-Host "$i"
If(
$answer -ne "" ){ $targets += $answer}
If( ($answer -eq "") -and ($i -eq
1) ){ "No input - exiting!"; Sleep 5; EXIT }
$i++
}
}
else {
$targets = Get-Content PingTestingTool.ini
$targets = ProcessArray $targets
If(!$targets){ "Empty file -
exiting!"; Sleep 5; EXIT }
}
[System.Array]$status
= @()
$targets
| Foreach { $status += "Unitialized" }
Function
PrintStatus{
Param([Int16]$pointer)
If ($pointer -eq ($targets.Count - 1) ){
$pointer = 0}
else { $pointer ++
}
cls
$i = 0
$targets | Foreach {
If
($pointer -eq $i){ $Display = " * $_ " }
else
{ $Display = " $_ " }
If
($status[$i] -eq "UP" ){
Write-Host ($Display.PadRight(50)) -BackgroundColor Green -ForegroundColor
Black }
elseif
($status[$i] -eq "DOWN"){ Write-Host ($Display.PadRight(50))
-BackgroundColor Red -ForegroundColor
White }
else { Write-Host
($Display.PadRight(50)) -BackgroundColor Gray
-ForegroundColor Black }
$i ++
}
}
Function
GetResult{
[Int16]$j = 0
$targets | Foreach{
[Boolean]$Result = Test-Connection
-ComputerName $_ -Count 1 -Quiet
If ($Result){ $status[$j] = "UP"
}
If(!$Result){ $status[$j] =
"DOWN" }
PrintStatus $j
$j++
}
}
While
($true){ GetResult }
Comments
Post a Comment