Ezine 153 PowerShell's Switch
Ezine 153 - PowerShell's Switch
VBScript has its 'Case Select', PowerShell has 'Switch'. The idea
is to turn a meaningless number or phrase into a more useful output.
Actually, you could do much more than change the 'Label', you can execute an
entire script block.
Topics for PowerShell's Switch Command
♣
Bill Gates of all people, once said: 'Your most unhappy customers are your greatest source of learning'. What I find is that my HAPPY customers are also a goldmine of sage advice. It was my readers
who said: 'Guy the ebooks are OK, but we want PDFs'. Last week other readers say, actually, we still love the ebooks. Typical customers! They want BOTH an ebook and a PDF, so this is what I have created
and made available free but only to ezine subscribers. Just as I was about to publish these ezine, 3 readers wrote in with corrections to the initial PDF, not only do I want to thank them, but also I want
to say that whenever a reader takes the trouble to write in, they are always right and Guy is always wrong. Strange but true. My
PowerShell ebook is really 3 ebooks in one: 1) Getting Started, 2) Real-life Tasks and 3) Examples of PowerShell's Syntax. As a consequence it's more difficult to proof read and to manage. What I discovered was that I had covered out-File twice, so I have
amended the ebook / PDF to include a section on the 'Switch' command. To draw attention to the main difference between the PDF I issued a fortnight ago and today's free offering, I am featuring 'Switch'
in this week's ezine.
Whenever I add a 'Switch' clause to my script, I think - 'good job'. And I follow up by saying: 'Why don't I use the Switch construction more often?' As with other scripting languages,
PowerShell provides a variety of commands to perform branching logic. For simple cases, with few options, the 'If' construction works well. The difficult arises when 'If' becomes a
victim of its own success and you have 5 or 6 options, for that
situation it is more efficient to use PowerShell's 'Switch' command. Incidentally, the
equivalent of 'Switch' in VBScript is 'Select Case'.
It is likely that your real-life task for Switch will be trickier than
the following simple examples. However, it is worth studying a range
of basic examples to get a feel for the structure and the rhythm of the command.
If you are looking for handy network utilities, try some of the free downloads at
Tools4Ever
A curious feature of the construction is that the word 'Switch' introduces the input, and is then never seen again. All you see thereafter is rows of patterns and matching
{Statement Blocks}. Also observe that there is an extra pair of {braces}
surrounding the whole pattern section. The layout below emphasises the branches, or the multiple 'Patterns' whose values
get switched to their respective {Blocks}.
Switch (pipeline) {
Pattern 1 {Statement block}
Pattern 2 {Statement block}
Pattern n {Statement block}
}
For simple examples, you could write the Switch command all on one line:
Switch (3) {1 { "Red" } 2{ "Yellow" } 3{ "Green" } }
Result Green. PowerShell switches the input 3 for Green.
Learning Points
Note 1: Trace the overall structure of the Switch
command:
Switch
(Value, or Pipeline in
parenthesis) {Actions in braces}
Note 2: The "Block" for each Switch is enclosed not only
by {braces}, but also by speech marks { "Yellow" }.
Note 3: Remember to pair the initial { brace, with a
final matching brace, even if the whole structure spans multiple lines.}
Calculating IP Address
ranges is a black art, which many network managers solve by creating custom
Excel spreadsheets. IPAT cracks this problem of allocating IP addresses
in networks in two ways:
For Mr Organized there is a nifty subnet
calculator, you enter the network address and the subnet mask, then IPAT
works out the usable addresses and their ranges.
For Mr Lazy IPAT
discovers and then displays the IP addresses of existing computers.
Download the Free IP Address Tracker
A difficulty occurred when we interrogated the computer's disks with WMI.
Specifically, the output reports DriveType as a number, whereas we want a meaningful name for the type of disk. The extra step in this example was to research which drive type corresponded to which
number, for example if $Drive.DeviceID returns a value of 3, that means the disk type is a "Hard drive".
# Case Study - 1 Problem $Disk = get-WmiObject win32_logicaldisk
foreach ($Drive in $Disk) {
$Drive.DeviceID + $Drive.DriveType
}
We want an answer to the question: 'What does the DriveType number
mean?' It would be useful if the script gave us a name rather than a
number. Research reveals that there are at least 5 possible
disk types, therefore multiple 'ifs' would be cumbersome, Switch is more
elegant.
# Case Study - 2 Solution $Disk = get-WmiObject win32_logicaldisk
foreach ($Drive in $Disk) {switch ($Drive.DriveType) {
1{ $Drive.DeviceID + " Unknown" }
2{ $Drive.DeviceID + " Floppy" }
3{ $Drive.DeviceID + " Hard Drive" }
4{ $Drive.DeviceID + " Network Drive" }
5{ $Drive.DeviceID + " CD" }
6{ $Drive.DeviceID + " RAM Disk" }
}
}
Learning Points
Note 1: Before examining the solution, study the
first problem
script which demonstrates the WmiObject construction. In particular
study the foreach (condition) {Block Command}.
Note 2: The case study solution builds on the problem
script by adding the Switch block. To my way of thinking, there are
two loops, the outer foreach and an inner Switch loop. Check what I
mean by matching the last two (lonely) braces with their opening
counterparts.
Challenges
Challenge 1: Just to get experience and control of
the script try changing "Hard Drive" to "Fixed Disk"
Challenge 2: Create a mapped network drive, then
run the script again. Launch Windows Explorer then click on the Tools
menu, this is the easiest way to map a local drive letter to a UNC share.
For once PowerShell's help did not do what I wanted. The secret was
the about_ prefix. Try:
help about_switch
PowerShell supports a whole family of about_ commands, for example you
could try
help about_foreach
More about PowerShell's Switch
command
Summary of PowerShell's 'Switch' commandThe 'If' family are easy to use for scripts that require branching logic. However, when the number of options exceeds about 5,
then 'Switch' is easier to code and easier to add more options. By trying a few simple examples you will soon appreciate the types of bracket, and the structure of the pattern with its matching
statement block. I say again, 'Switch' is one of the most satisfying constructions to create, therefore never miss a chance to replace multiple 'If's with one 'Switch'.
If you like this page then please share it with your friends
See more Windows PowerShell examples
• PowerShell Home •
PowerShell If Statement •
PowerShell ElseIf •
PowerShell If -Not
• PowerShell comparison operators
• PowerShell If -And
• PowerShell If -Or
•
Where Filter • Loops • Brackets •
-Match •
Switch • Conditional Operators
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.
Download my ebook: Getting Started with PowerShell - only $9.25
You get 36 topics organized into these 3 sections: 1) Getting Started 2) Real-life tasks 3) Examples of Syntax.
In addition to the ebook, you get a PDF version of this Introduction to PowerShell ebook It runs to 120
pages of A4.
|