Skip to content

Tag: Switch

Understanding the Switch Statement in PowerShell

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 -wildcard for wildcard pattern matching.
  • $variable: The variable or expression whose value will be evaluated.
  • pattern1, pattern2, …, patternN: These are patterns against which the value of $variable will 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 the default case in a switch statement 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 $animal contains “Dog” or “Cat”, it will print “Dog is a mammal”.
  • If $animal contains “Bird”, it will print “Bird is a bird”.
  • If $animal contains “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:

PowerShell Switch Statement Example

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.

© 2024 ScriptWizards.net - Powered by Coffee & Magic