Actions

Powershell: Ping Many Servers

From Rabbi Blog

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


There are probably better ways to do this, but when I'm working on multiple servers I like to open a CMD and ping <host> so I have an eye on it when it comes back up. Many servers... many cmd... messy.

Instead, let's make a PowerShell script that takes in server name input from the user and spawns a PS window that is small and checking the server for up\down via Test-Connection.

This one is messy, it's been a long night\early morning, but it functionally meets the goal.

psping.ps1

  • maybe someday just check the local dir vs hard-coding it? Did you even really need that? Tired...
$name=""

while ($name -ne 0)
{
$name = Read-Host 'Enter Computer Name or IP:'
cmd /c start powershell -noexit -command "c:\powershell\ping\step2.ps1 -server $name"
}

step2.ps1

  • The title bar is the only really needed element here. Making the window small and with a little color change is just a thing to do.
param (
        [Parameter(Mandatory=$true)][string]$server
     )

function Set-ConsoleWindow
{
    param(
        [int]$Width,
        [int]$Height
    )

    $WindowSize = $Host.UI.RawUI.WindowSize
    $WindowSize.Width  = [Math]::Min($Width, $Host.UI.RawUI.BufferSize.Width)
    $WindowSize.Height = $Height

    try{
        $Host.UI.RawUI.WindowSize = $WindowSize
    }
    catch [System.Management.Automation.SetValueInvocationException] {
        $Maxvalue = ($_.Exception.Message |Select-String "\d+").Matches[0].Value
        $WindowSize.Height = $Maxvalue
        $Host.UI.RawUI.WindowSize = $WindowSize
    }
}

Set-ConsoleWindow 35 2

$Host.UI.RawUI.WindowTitle = "Server: $server | Checking..."

$SERVERWINDOW=$server

write-host "Checking $SERVERWINDOW"

$FOREVER=666

while ($FOREVER -eq 666)
	{
	If (Test-Connection $server -count 1 -delay 4 -quiet) 
		{
		Write-Host '***' $SERVERWINDOW 'responded' -ForegroundColor Black
		$Host.UI.RawUI.BackgroundColor = ($bckgrnd = 'Green')
		$Host.UI.RawUI.WindowTitle = "UP: "+ $SERVERWINDOW 
		cls
		}
	else
		{
		Write-Host '!!!' $SERVERWINDOW 'no response' -ForegroundColor Black
		$Host.UI.RawUI.WindowTitle = "DN: "+ $SERVERWINDOW 
		$Host.UI.RawUI.BackgroundColor = ($bckgrnd = 'Yellow')
		cls
		}
	}