The switch statement in PowerShell provides a concise way to perform different actions based on the value of a variable or an expression. It’s particularly useful when you have multiple conditions to evaluate and execute corresponding code blocks. Let’s delve into how it works and its syntax:
switch -regex ($variable) {
pattern1 { <code block1> }
pattern2 { <code block2> }
...
patternN { <code blockN> }
default { <default code block> }
}
switch: This keyword initiates the switch statement.-regex: This parameter specifies that the matching is done using regular expressions. Alternatively, you can use-wildcardfor wildcard pattern matching.$variable: The variable or expression whose value will be evaluated.pattern1,pattern2, …,patternN: These are patterns against which the value of$variablewill be matched. They can be regular expressions or wildcard patterns.<code block1>,<code block2>, …,<code blockN>: These are the code blocks to execute when a match is found for the corresponding pattern.default: This optional block is executed when none of the patterns match. It’s similar to thedefaultcase in aswitchstatement in other programming languages.
Example:
Let’s say we want to classify animals based on their type. We’ll use the switch statement to categorize them into mammals, birds, reptiles, and others based on their names.
$animal = "Dog"
switch -wildcard ($animal) {
"*Dog*" { Write-Host "$animal is a mammal" }
"*Cat*" { Write-Host "$animal is a mammal" }
"*Bird*" { Write-Host "$animal is a bird" }
"*Snake*" { Write-Host "$animal is a reptile" }
default { Write-Host "Unable to determine the type of $animal" }
}
In this example:
- If
$animalcontains “Dog” or “Cat”, it will print “Dog is a mammal”. - If
$animalcontains “Bird”, it will print “Bird is a bird”. - If
$animalcontains “Snake”, it will print “Snake is a reptile”. - If none of the patterns match, it will print “Unable to determine the type of <animal>”.
To elaborate further on the above example, we have wrote the following function:
# Function to determine the type of animal
function DetermineAnimalType {
param (
[string]$animal
)
switch -wildcard ($animal) {
"*Dog*" { Write-Host "$animal is a mammal" }
"*Cat*" { Write-Host "$animal is a mammal" }
"*Bird*" { Write-Host "$animal is a bird" }
"*Snake*" { Write-Host "$animal is a reptile" }
default { Write-Host "Unable to determine the type of $animal" }
}
}
# Test cases
$animals = @("Dog", "Cat", "Bird", "Snake", "Elephant", "Fish")
foreach ($a in $animals) {
DetermineAnimalType -animal $a
}
- This defines a PowerShell function named
DetermineAnimalType - It takes one parameter,
$animal, which is expected to be a string representing the name of the animal whose type we want to determine.
Running the above example will produce the following output:

Conclusion
The switch statement in PowerShell offers a convenient way to handle multiple conditions based on the value of a variable or expression. It’s versatile, allowing the use of both regular expressions and wildcard patterns for matching, and it includes a default case for handling unmatched values. Incorporating switch statements in your PowerShell scripts can make your code more readable and maintainable, especially when dealing with complex branching logic.
