Поделиться через


Сведения о переключении

КРАТКОЕ ОПИСАНИЕ

Объясняется, как использовать переключатель для обработки нескольких операторов If.

ПОДРОБНОЕ ОПИСАНИЕ

Чтобы проверка условие в скрипте или функции, используйте If оператор . Оператор If может проверка различных типов условий, включая значение переменных и свойства объектов.

Чтобы проверка нескольких условий, используйте Switch оператор . Оператор Switch эквивалентен последовательности операторов If, но проще. Инструкция Switch перечисляет каждое условие и необязательное действие. Если условие получается, выполняется действие .

Оператор Switch также использует автоматическую $switch переменную. Дополнительные сведения см. в статье about_Automatic_Variables.

Базовая Switch инструкция имеет следующий формат:

Switch (<test-value>)
{
    <condition> {<action>}
    <condition> {<action>}
}

Например, следующая Switch инструкция сравнивает тестовое значение 3 с каждым из условий. Если тестовое значение соответствует условию, выполняется действие .

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
}
It is three.

В этом простом примере значение сравнивается с каждым условием в списке, даже если для значения 3 имеется совпадение. Switch Следующая инструкция имеет два условия для значения 3. Он показывает, что по умолчанию проверяются все условия.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.
Three again.

Чтобы переключить Switch сравнение после совпадения, используйте Break оператор . Оператор Break завершает Switch оператор .

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."; Break}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.

Если тестовое значение является коллекцией, например массивом, каждый элемент в коллекции оценивается в том порядке, в котором он отображается. В следующих примерах вычисляется значение 4, а затем 2.

switch (4, 2)
{
    1 {"It is one." }
    2 {"It is two." }
    3 {"It is three." }
    4 {"It is four." }
    3 {"Three again."}
}
It is four.
It is two.

Все Break инструкции применяются к коллекции, а не к каждому значению, как показано в следующем примере. Оператор Switch завершается оператором Break в условии значения 4.

switch (4, 2)
{
    1 {"It is one."; Break}
    2 {"It is two." ; Break }
    3 {"It is three." ; Break }
    4 {"It is four." ; Break }
    3 {"Three again."}
}
It is four.

Синтаксис

Switch Полный синтаксис инструкции выглядит следующим образом:

switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

или

switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

Если параметры не используются, Switch выполняет точное соответствие значения без учета регистра. Если значением является коллекция, каждый элемент вычисляется в порядке, в котором он отображается.

Оператор Switch должен содержать по крайней мере один оператор условия.

Предложение Default активируется, если значение не соответствует ни одному из условий. Он эквивалентен предложению Else в операторе If . В каждой Switch инструкции допускается только одно Default предложение.

Switch имеет следующие параметры:

Параметр Описание
Подстановочный знак Указывает, что условие является строкой с подстановочными знаками.
Если предложение match не является строкой, параметр имеет значение
Игнорировать.
Exact Указывает, что предложение match, если оно является строкой, должно
совпадение точно. Если предложение match не является строкой, этот параметр
не учитывается.
CaseSensitive Выполняет сопоставление с учетом регистра. Если предложение match не является
строка, этот параметр игнорируется.
Файл Принимает входные данные из файла, а не из оператора value. If
включено несколько параметров файла , только последний —
Использовать. Каждая строка файла считывается и вычисляется с помощью
Оператор Switch.
Regex Выполняет сопоставление регулярного выражения значения со значением
condition. Если
Предложение match не является строкой, этот параметр игнорируется.

Примечание

При указании конфликтующих значений, таких как Regex и Wildcard, последний указанный параметр имеет приоритет, а все конфликтующие параметры игнорируются. Также разрешено использовать несколько экземпляров параметров. Однако действует только последний используемый параметр.

В этом примере нет соответствующего регистра, поэтому выходные данные отсутствуют.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
}

Добавив Default предложение , можно выполнить действие, если другие условия не выполняются.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
    Default {
        "No matches"
    }
}
No matches

Чтобы слово "четырнадцать" соответствовало регистру -Wildcard , необходимо использовать параметр или -Regex .

   PS> switch -Wildcard ("fourteen")
       {
           1 {"It is one."; Break}
           2 {"It is two."; Break}
           3 {"It is three."; Break}
           4 {"It is four."; Break}
           "fo*" {"That's too many."}
       }
That's too many.

В следующем примере используется -Regex параметр .

$target = 'user@contoso.com'
switch -Regex ($target)
{
    'ftp\://.*' { "$_ is an ftp address"; Break }
    '\w+@\w+\.com|edu|org' { "$_ is an email address"; Break }
    'http[s]?\://.*' { "$_ is a web address"; Break }
}
user@contoso.com is an email address

Условие Switch инструкции может быть следующим:

  • Выражение, значение которого сравнивается с входным значением.
  • Блок скрипта, который должен возвращать $true , если условие выполнено. Блок скрипта получает текущий объект для сравнения в автоматической $_ переменной и вычисляется в собственном область.

Действие для каждого условия не зависит от действий в других условиях.

В следующем примере показано использование блоков скрипта в качестве Switch условий инструкции.

switch ("Test")
{
    {$_ -is [String]} {
        "Found a string"
    }
    "Test" {
        "This executes as well"
    }
}
Found a string
This executes as well

Если значение соответствует нескольким условиям, выполняется действие для каждого условия. Чтобы изменить это поведение, используйте ключевые Break слова или Continue .

Ключевое слово Break останавливает обработку и завершает инструкцию Switch .

Ключевое слово Continue прекращает обработку текущего значения, но продолжает обработку всех последующих значений.

В следующем примере обрабатывается массив чисел и отображается, являются ли они нечетными или четными. Отрицательные числа пропускаются с Continue ключевое слово. Если обнаруживается нечисловое значение, выполнение завершается Break с помощью ключевое слово.

switch (1,4,-1,3,"Hello",2,1)
{
    {$_ -lt 0} { Continue }
    {$_ -isnot [Int32]} { Break }
    {$_ % 2} {
        "$_ is Odd"
    }
    {-not ($_ % 2)} {
        "$_ is Even"
    }
}
1 is Odd
4 is Even
3 is Odd

СМ. ТАКЖЕ

about_Break

about_Continue

about_If

about_Script_Blocks