Actions

Powershell: Ping Many Servers

From Mike Beane's Blog


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
		}
	}