switch($someString.ToLower())
{
"yes" { $_ = "y" }
"y" { "You entered Yes." }
default { "You entered No." }
}
Таким образом, вы можете произвольно разветвлять, каскадировать и объединять случаи, если целевой регистр расположен ниже / после случая или случаев, когда переменная $ _ соответственно переназначается.
n.b. Каким бы симпатичным это ни было, кажется, что интерпретатор PowerShell не реализует переключение / регистр так эффективно, как можно было бы надеяться или предполагать. С одной стороны, пошаговое выполнение отладчика ISE предполагает, что вместо оптимизированного поиска, хеширования или двоичного ветвления каждый случай проверяется по очереди, как и многие операторы if-else. (Если это так, рассмотрите возможность размещения ваших наиболее распространенных случаев в первую очередь.) Кроме того, как показано в этом ответе, PowerShell продолжает тестировать случаи после их удовлетворения. И достаточно жестоко, что в .NET CIL даже есть специальный оптимизированный код операции переключения, который из-за этого поведения PowerShell не может использовать в своих интересах.