Guy recommends :
Free Solarwinds
VM Console

Solarwinds VM Console Free Download

Find out which of your VMs are a waste of space and which VMs need more resources.



PowerShell Switch Parameter

Introduction to Windows PowerShell's Switch Parameter

Whenever I add a 'Switch' parameter 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'.

Topics for PowerShell's Switch Command

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.

 ♣

The Basic Structure of PowerShell's Switch Parameter

A curious feature of the construction is that the word 'Switch' introduces the input, and is then never seen again, all that 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.}

Case Study for Switch - WMI Disk

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 with output

# 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 'If' statements would be cumbersome, 'Switch' is more elegant.

Guy Recommends: WMI Monitor and It's Free!Solarwinds Free WMI Monitor

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft 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.

Download your free copy of WMI Monitor

Case Study 2 - Solution with 'Switch'

# Case Study 2 - Solution with PowerShell 'Switch' Param
$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 in Case Study 2, take the time to understand the underlying WmiObject construction in Case Study 1.  In particular observe the format:
foreach (condition) {Block Command}.

Note 2: The case study solution builds on the first 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.

Learning More About PowerShell's Switch Parameter

When I wanted help about the switch command, at first PowerShell's help did not do what I wanted.  The secret was to add the about_ prefix.  Try:
help about_switch

What the about_switch help file reveals is that you could use wildcards in the matching clause.

Incidentally, PowerShell supports a whole family of about_ commands, for example you could try:
help about_foreach

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

Solarwinds' Orion 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.

Perhaps the NPM's best feature is the way it suggests solutions to network problems.  Its second best feature is 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 take advantage of Solarwinds' offer.

Download a free trial of the Network Performance Monitor.

Switch Case Study 2 - Featuring Switch with -wildcard

Case Study 2 - Count the types of error message in the Application eventlog

# PowerShell Switch script to count eventlog messages
function EventType{
BEGIN {
$errors = 0
$warnings = 0
$info = 0
}
PROCESS {
switch -wildcard ($_.entrytype) {
   "err*" {$errors++}
   "warn*" {$warnings++}
   "info*" {$info++}
    default {}
    }#switch block
}#process block
END {
"The Application log contains " + $errors + " error messages."
"The Application log contains " + $warnings + " warning messages."
"The Application log contains " + $info + " information messages."
}#end block
}#function block
Get-eventlog "application" -newest 250 | EventType

Note 1: Observe the -wildcard switch with err*, info* and warn*.  To test the effect, try removing the -wildcard parameter.

Summary of PowerShell's 'Switch' Parameter

The '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
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.

 *


Custom Search

Guy Recommends: WMI Monitor and It's Free!Solarwinds WMI Monitor

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft operating systems.

Fortunately, Solarwinds have created the Free WMI Monitor so that you can actually see and understand these gems of performance information.  Take the guess work out of which WMI counters to use for applications like Microsoft Active Directory, SQL or Exchange Server.

Download your free copy of WMI Monitor

 

Home Copyright © 1999-2012 Computer Performance LTD All rights reserved

Please report a broken link, or an error.