PowerShell Functions: Test-Ping

This is my first PowerShell function, Test-Ping. This simply returns $true if a given host is pingable, which is pretty useful. This function also makes use of PowerShell’s built in Comment Based Help.  Here is the code:

 ##--------------------------------------------------------------------------
 ##  FUNCTION.......:  Test-Ping
 ##  PURPOSE........:  Returns "True" of the host is pingable, or "False" if
 ##                    not.
 ##                    This uses the .NET NetworkInformation.Ping method.
 ##  ARGUMENTS......:  A computer name or IP address (just one at a time).
 ##  EXAMPLE........:  Test-Ping 127.0.0.1
 ##                    Test-Ping google.com
 ##  REQUIREMENTS...:  PowerShell 2.0
 ##  NOTES..........: 
 ##--------------------------------------------------------------------------
 function Test-Ping
 {
 <#
 .SYNOPSIS
 Determines if a given device is pingable from the computer where the
 function is used. This can only be used with one device at a time. For
 examples type:
 Get-Help Test-Ping -examples
 .DESCRIPTION
 This function uses the .NET NetworkInformation.Ping method to determine
 if a device is reachable using an ICMP echo message. The Function
 returns $true if the device is pingable, and $false if it is not (or if
 ICMP echo message replies are not returned).
 .EXAMPLE
 Test-Ping google.com
 Will return "True" if DNS is working in the environment that the script
 is run in, and the site is pingable.
 .EXAMPLE
 Test-Ping 127.0.0.1
 Will return "True" if the IPAddress is pingable.
 .EXAMPLE
 exampleScript.ps1
 ##-------------------------------------------------------------
 ## Contents of exampleScript.ps1
 ##-------------------------------------------------------------
 If (!(Test-Ping deadHost)) {
 Write-Host "Host 'deadHost' not Live!" -Fo Red
 }
 Else {
 Write-Host "Host 'deadHost' is Live!" -Fo Cyan
 }
 ##-------------------------------------------------------------

 Assuming that this script also contains the Test-Ping function, this
 script will return the string "Host 'deadHost' not Live!" (unless you
 have a device named "deadHost" in your environment for some reason).
 .NOTES
 NAME......:  Test-Ping
 AUTHOR....:  Joe Glessner
 LAST EDIT.:  18FEB11
 CREATED...:  17AUG10
 .LINK
 https://joeit.wordpress.com/2011/02/23/powershell-functions-test-ping/
 #>
 param($ip)
 trap {$false; continue}
 $timeout = 1000
 $object = New-Object system.Net.NetworkInformation.Ping
 (($object.Send($ip, $timeout)).Status -eq 'Success')
 }

Save the code into a file called C:\test-ping.ps1

Open up powershell, and run this command:

. c:\test-ping.ps1

And hit ENTER (this is called “dot sourcing” by the way). Now run this command:

get-help Test-Ping

And hit ENTER again. Pretty cool eh? It also makes it much easier to remember how your functions are used from the command line, if you keep them all in one file, and then dot source that file.

New category: PowerShell Functions

Like many of my fellow IT Professionals out in the world, I’m digging me some PowerShell. I find it really funny that For all these years the *NIX admins have been laughing their asses off because the Windows admins have not really had a decent shell scripting language. And then came PowerShell. PowerShell is like the command shell and a programming language had a baby. A baby that has superpowers. This is exactly what Windows admins the world over have wanted all this time.

And it’s so easy to use. In fact, even if you’ve never opened a PowerShell prompt before, you already know some stuff that you can use in it (assuming that you’ve opened a command prompt in the last twenty years). Go ahead and open up a PowerShell prompt (Win+R, type: powershell, and then hit ENTER, or just type powershell into the search box on the start menu).

Type: dir, and then hit ENTER.

Looks familiar right?

But try this, type:

get-alias dir, and hit ENTER.

You just ran a PowerShell cmdlet (pronounced “command let”).

And there are a ton more. And unlike some people I could name, Microsoft didn’t forget the other guys when they built PowerShell, try typing the following in the PowerShell Window: ls, and then hit ENTER. Yep they make it pretty easy to harness what you know, whether that be *NIX, or Win32.

One of the most awesome things about PowerShell is that you can extend it. Easily. And make the extension seamless. And Functions are pretty awesome. So expect to see more on this here.

%d bloggers like this: