PowerShell Tutorial – Three Key Commands

Introduction to Key PowerShell Commands

Here are three simple, yet key commands, which are designed to get you started with PowerShell.  As you study, my example scripts keep in mind the golden rule, Verb-Noun, for example, Get-PSProvider.

Three Key PowerShell Commands or Cmdlets

  1. Get-Command
  2. Get-Help
  3. Get-Member


1. PowerShell Get-Command

Let us begin this PowerShell scripting tutorial by testing Get-Command.  What this instruction does is list all of PowerShell’s noun-verb pairs; incidentally, these are also referred to as built-in cmdlets.  Assuming that you have opened a PowerShell session, then you should see a prompt like: PS >   Now type just one hyphenated phrase:

# Windows PowerShell Tutorial

To filter the list, employ the famous star * wildcard; here are three examples:
Get-Command out*
Get-Command add*
Get-Command Get-*

Let us experiment with a variation of this wildcard theme which displays only cmdlets beginning with the verb ‘set’:
Get-Command set* -commandType cmdlet

It is possible to tweak the display of your output columns with ft (Format-Table).  My hidden agenda here is to give you practice with PowerShell’s Pipe symbol (|), try:

#PowerShell Scripting Tutorial
Get-Command | Format-Table name, definition -auto

At the moment we are just ‘playing’, testing, or feeling our way, thus do feel free to experiment with your own variations of my suggestions.  Once you have seen the long list of all possible commands, chose one cmdlet for further research, for example:

Refine Get-Command with -CommandType

# PowerShell WhatIf cmdlets
Get-Command -commandType cmdlet `
| where { $_.parameters.keys -Contains "WhatIf"}

Get-PSProvider  (Or plain: PSProvider)

This is what happened when I typed just: Get-Psprovider  <carriage return>

Name Capabilities Drives
—- ———— ——
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, D, E, H…}
Function ShouldProcess {Function}
Registry ShouldProcess {HKLM, HKCU}
Variable ShouldProcess {Variable}
Certificate ShouldProcess {cert}

Challenge: try
PSProvider | Get-Member

Guy Recommends: Free WMI Monitor for PowerShellSolarwinds Free WMI Monitor for PowerShell

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft’s operating systems.  Fortunately, SolarWinds have created a Free WMI Monitor so that you can discover these gems of performance information, and thus improve your PowerShell scripts.

Take the guess work out of which WMI counters to use when scripting the operating system, Active Directory, or Exchange Server. Give this WMI monitor a try – it’s free.

Download your free copy of WMI Monitor

Another Command PSSnapin

What PSSnapin does is reveal the sources for the built-in cmdlets:

# Or
Get-PSSnapin |ft name, description -autosize

Note how every PowerShell noun is singular, PSSnapin, Command, PSProvider. Also note how a Pipe (|) followed by ft means format the output as a table, as opposed to format the results as a list (fl).  Any words which follow ‘ft’ are names of the fields, each separated by a comma.  At the end of the above command is the switch -autosize,  this extra parameter tells PowerShell to close-up the width of the columns.  When ever you use Format-Table, or ft, try appending -autosize, or the shorter version: -auto.

In the example below, I have used ft to omit the Description field and just displayed the name: 
Get-PSSnapin |ft name:


More Windows PowerShell Tutorial Commands

2. PowerShell Get-Help

Avoid arrogance, put aside pride, and call for PowerShell’s built-in help.  We all have to learn somewhere and only you know what you type in the privacy of your PowerShell command line.

Perhaps what puts us off trying built-in help is a bad experience with the stilted help of an old DOS system.  Dare I suggest that experience with internet search techniques makes us more willing to try a modern application’s own help?

PowerShell’s help has some interesting switches, such as: -full and -examples.  Incidentally, -exampleS also works, a rare case of a plural PowerShell noun.

# Key Windows PowerShell Command
Get-Help Get-Wmiobject -full

Note: Get-Help does not require the pipe symbol.  In fact, the pipe (|) only gets in the way of Get-Help; PowerShell does its best to interpret:
Get-Help | Get-WmiObject cim_chip   But it still results in an error, therefore stick with plain simple:
Get-Help Get-WmiObject

Guy’s List of Useful Information Revealed by Get-Help


Beginners love PowerShell’s Get-Help, whereas intermediates ignore it. Experts on the other hand return to Get-Member.  Indeed, PowerShell experts are expert because they know how and when to use a tool such as Get-Help, for example:

-filter (wmi Win32_Share)
-computerName  (help wmi)

PowerShell’s Hidden ‘About’ files

In the PowerShell folder referenced by: $PSHome **, you will find a whole family of About help files. In these files, which all begin with About_, you will discover information on topics such as Foreach, If and ElseIf. My point is that you cannot get assistance by typing: Get-Help foreach, yet you can find a wealth of information if you read the file at: $PSHome\about_foreach.help.txt.

Here is a cmdlet that reveals the names of these About files:

Example 1: Guy’s Original Method

Beware – This just plain does not work in PowerShell v2.0

# List all the About help files
$Homes = Get-ChildItem "$PSHome\about*.*" -recurse
foreach ($About in $Homes) {$About.name; $i++}
"There are $i about files"

Result: A list of 55 files.

** On my system $PSHome translated to: C:\WINDOWS\system32\WindowsPowerShell\v1.0

Example 2: Michael’s Method

Michael Klement suggests a better way to display this information.

($aboutFiles = gci -recurse $pshome -filter about*.txt) | Format-Table Name
"There are $($aboutFiles.Count) ‘about’ files."

Note 1: gci is an alias for Get-ChildItem.

Note 2:  Michael’s point is that you need to separate the target folder and the file mask into 2 parameters for this command to work as intended.

Example 3: Simplicity Rules

An even simpler technique is to use Get-Help thus:

# PowerShell Tutorial Help Files
Get-Help about_*

Guy Recommends:  A Free Trial of the Network Performance Monitor (NPM)Review of Orion NPM v11.5 v11.5

SolarWinds’ Network Performance Monitor will help you discover what’s happening on your network.  This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.

What I like best is the way NPM suggests solutions to network problems.  Its also has the ability to monitor the health of individual VMware virtual machines.  If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM now.

Download a free trial of Solarwinds’ Network Performance Monitor

Research PowerShell Verbs

It may have struck you how PowerShell’s building block is the cmdlet, furthermore it always uses Verb-Noun pairs.  Take the noun Service as an example, firstly, as with all PowerShell nouns Service is singular.  Secondly, ‘Get’ is the most common PowerShell noun, and is the default should you call for a noun without a verb, such as

# PowerShell example illustrating why get is the default verb
Service | Where-Object {$_.status -eq ‘Stopped’ }

Time to investigate more PowerShell nouns.

# PowerShell Verbs for Service
Get-Command -Noun Service

See more PowerShell examples for Get-Service

Another Windows PowerShell Tutorial Command

3. Get-Member

Learn from my mistakes, and take a minute to imprint the format of this Get-Member command into your brain.  The key point is that the object you want information about comes at the beginning, and not at the end of the command.  My second error was (is) forgetting the pipe symbol.

# Here is the correct format for Get-Member:
Get-Process | Get-Member

Get-Member | Get-Process  (sequence incorrect)
Get-Process Get-Member (forgot the pipe symbol)

# Windows PowerShell Tutorial Filter -MemberType
Get-process | Get-Member -MemberType property

Note: You could also append method thus:
Get-process | Get-Member -MemberType method

Call me lazy, or call me showing that commands are not case sensitive.  My point is that Get-Process, get-Process and get-process are all interpreted identically.  In PowerShell, capitalization of command statements has no effect on successful execution.   See more on the Get-Member cmdlet

SolarWinds Response Time Viewer for WiresharkGuy Recommends: Response Time Viewer for Wireshark

Here is a free tool to troubleshoot network connection and latency problems.  Key concept: this is a free tool from SolarWinds that analyzes network packets captured by Wireshark (also a free tool).

When you inspect the data in the Response Time Dashboard, if you hover over an application such as Teredo or TCP, then you get an orange box showing a breakdown of network and application response times, note the 'Peak value' in addition to the 'Average'.

Download your free trial of SolarWinds Response Time Viewer for Wireshark

Tab Completion

Talking of being lazy, PowerShell also supports a tab auto-complete feature.  Once you have typed enough of a command to make it unique, you can press tab and PowerShell completes the rest of the command.

Get-Process Get-mem(tab) automatically expands to: Get-Process Get-Member.  As you can probably guess, this tab completion works for all commands not just this one.  Incidentally, when you employ PowerShell’s parameters you can take advantage of similar automatic completion, for example -auto instead of -autosize and -f instead of -filter.  Once again, there are many more such auto-completions.

Review of PowerShell ISE »

Summary of PowerShell’s Commands

Talk to an experienced PowerShell user, or talk to a teaching guru, they will each tell you that that the secret of success is simple, keep returning to the basics until you gain mastery. Those basics are: Get-Command, Get-Member and Get-Help.

If you like this page then please share it with your friends


See more Windows PowerShell tutorials

PShell Home   • Introduction   • Dreams   • 3 Key Commands   • PowerShell Help About   • Get-Help

PowerShell v 3.0   • Set-ExecutionPolicy   • Get-Command   • Cmdlet scripts   • Import-Module

PowerShell Version Check   • Backtick   • PowerShell examples   • PowerShell ISE   • Get-Member

Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.