Microsoft's PowerShell is a scripting environment based on the .Net framework. PowerShell is aimed at replacing Windows Cmd and Windows Scripting Host (WSH) for administrative tasks. What interests me is that I can use .Net objects interactively and in a script, without having to write and compile a program. As I explore PowerShell, I'll write about features that I find interesting and useful.
In this first article, I describe really basic use of the PowerShell console. I assume you downloaded and installed Powershell.
Powershell installation provides a lot of on-line help. You obtain information using the get-help cmdlet (essentially a built-in command). There's so much information that the trick is to figure out the appropriate help topic:
> help # or 'get-help' < 299 lines … > > help about_Arithmetic_Operators TOPIC Arithmetic operators SHORT DESCRIPTION Operators that can be used in the Windows PowerShell to perform mathematical operations …
You can also download the on-line help as a CHM file (search for "Windows PowerShell Graphical Help File").
You can enter commands for processing immediately:
> 'abc' + 'def' # String concatenation abcdef > 5+6 # Addition 11 > 5*6 # Multiplication 30 > 30%7 # Remainder 2
The '#' marks the start of a comment. All text from '#' to the end of the line is a comment.
Using .Net Classes and Objects
How long is a string (said with a straight face)? Since we are using .Net String objects, each string should have a Length property:
> 'abc'.Length 3 > 'def'.Length 3 > ('abc' + 'def').Length 6
You can find the methods of an object using get-member.
> 'abc' | get-member TypeName: System.String Name MemberType Definition ---- ---------- ---------- … get_Length Method System.Int32 get_Length() …
What's 2 to the power of 8? The .Net System.Math class defines a set of common mathematical functions. Again, you can use the get-member cmdlet to find out what functions are available in any class, but this time, with the -static option because the class, not individual objects, define these functions.
> [math] | get-member -static TypeName: System.Math Name MemberType Definition ---- ---------- ---------- … Pow Method static System.Double Pow(Double x, Double y) … > [math]::Pow(2,8) 256
The System.Math is pre-loaded by PowerShell and can be accessed as [System.Math], [Math] or [math]. Square brackets refer to .Net classes and some aliases have been defined for these classes.
How do you know whether an object or a class has the required function? No easy answer: trial-and-error, and experience with other class libraries.
Tab Expansion and Aliases
It's pretty tedious typing a full cmdlet string, so there are two shortcuts available: tab expansion and aliases.
If you enter get-m<TAB>, you should see Get-Member. For some reason, you have to enter the name of cmdlet up to the '-' (dash) character before tab expansion works.
The get-member cmdlet also aliased as gm. What aliases are available? Use the get-alias cmdlet, which is also aliased as gal, for a list of available aliases.
> Get-Alias CommandType Name Definition ----------- ---- ---------- Alias gal Get-Alias … Alias gm Get-Member …
At this point, you can run some simple commands using PowerShell and know how to find some on-line information.