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.
Let us begin 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: get-Command
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: get-command |ft 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:
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
Another Command PSSnapin
What PSSnapin does is reveal the sources for the built-in cmdlets:
Get-PSSnapin 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:
Name ---- Microsoft.PowerShell.Core Microsoft.PowerShell.Host Microsoft.PowerShell.Management Microsoft.PowerShell.Security Microsoft.PowerShell.Utility
Guy Recommends: SolarWinds Engineer's Toolset v10
The Engineer's Toolset v10 provides a
comprehensive console of utilities for troubleshooting computer problems. Guy says
it helps me monitor what's occurring on the network, and the tools
teaches me more about how the system literally operates.
There are so many good gadgets, it's like having free rein of a
sweetshop. Thankfully the utilities are displayed logically: monitoring, discovery, diagnostic, and Cisco tools.
Download your copy of the Engineer's Toolset v 10
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 -example. Incidentally, -exampleS also works, a rare case of a plural PowerShell noun.
Get-help get-wmiobject
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:
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 $i=0 $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:
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: Get-process | get-Member
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
Guy Recommends: SolarWinds LANSurveyor
LANSurveyor will produce a neat diagram of your network topology. But that's
just the start;
LANSurveyor can
create an inventory of the hardware and software
of your machines and network devices. Other neat features include dynamic
update for when you add new devices to your network. I also love the ability to export
the diagrams
to Microsoft Visio.
Finally, Guy bets that if you take a free trial of LANSurveyor then you will
find a device on your network that you had forgotten about, or someone else
installed without you realizing!
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.
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.
Please write in if you see errors of any kind. Please report any factual mistakes, grammatical errors or broken links, I will be happy to not only to correct the fault, but also to give you credit.
Guy
Recommends: Orion's NPM - Network Performance Monitor
Orion's performance monitor is designed for detecting network outages.
A network-centric
view make it easy to see what's working, and what needs your attention.
This utility guides you through troubleshooting by indicating whether the
root cause is faulty equipment or resource overload.