Введение в S ведьмы в PowerShell

Функция переключения в PowerShell используется для обработки нескольких операторов If или, другими словами, это замена нескольких условий If / Else If / Else. Чтобы проверить отдельное условие в скрипте или функции, вы можете использовать оператор If / else, но если вы хотите оценить больше операторов IF, тогда используйте Switch.

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

Синтаксис:

Switch ()
(
(Action1)
(Action2)
)

Полный синтаксис:

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

ИЛИ

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

Параметры регистра переключателя в PowerShell

  • Регулярное выражение: это также называется регулярное выражение. Выполняет проверку Регулярного выражения по значению условия. Если вы используете Regex, WildCard и Exacts игнорируются. Кроме того, если предложение соответствия не является строкой, этот параметр игнорируется.
  • Подстановочный знак: указывает, что условие является подстановочной строкой. Если вы используете Wildcard, Regex и Exacts игнорируются. Кроме того, если предложение соответствия не является строкой, этот параметр игнорируется.
  • Точный : выполняет сопоставление с точной строкой. Если вы используете Exact, Wildcard и Regex игнорируются, а если предложение match не является строкой, то этот параметр игнорируется.
  • CaseSensitive: этот параметр будет проверять условие, которое точно соответствует переданному значению (с учетом регистра), если оно не совпадает, то этот параметр игнорируется. Это также нуждается в строковом значении.
  • Файл : принимает путь к файлу в качестве входного значения, а не строкового значения. Если передано несколько параметров файла, он принимает только последний. Каждая строка файла читается и оценивается в соответствии с условием, и если условие совпадает, то оно выполняет это значение или отображает письменное сообщение.

блок - схема

Как работает коммутатор в PowerShell?

Как показано на приведенной выше диаграмме, всякий раз, когда передается любое значение (строка, целое число, число с плавающей запятой или другие типы данных), массив, подстановочные знаки, файлы и т. Д., Он начинает сопоставлять условия одно за другим, а когда условие совпадает, сценарий выполняет этот блок., Для нескольких совпадающих значений будет выполнен блок из нескольких скриптов, и если не найдено подходящего значения и если задано условие по умолчанию, он выполняет этот блок, в противном случае выводится ноль.

Примеры случая переключения в PowerShell

Давайте посмотрим на приведенный пример:

Пример № 1

1. Простая функция переключения со строкой, переданное целочисленное значение.

Код:

switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)

Выход: три

Код:

switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)

Вывод: данные выполнены

Теперь, что если параметр не соответствует выражению. В качестве примера, приведенного ниже, 5 не соответствует ни одному из случаев Switch. В этом случае вывод будет нулевым.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)

Чтобы преодолеть вышеуказанную проблему, необходимо указать default и блок по умолчанию выполняется, когда ни один из параметров не совпадает.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)

Вывод: совпадение не найдено

Пример № 2

Давайте посмотрим на приведенный пример:

Разница между if / else if / else и Switch. Из приведенного ниже примера вы можете понять, как легко написать скрипт с помощью функции Switch.

$time = 3
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")

$time = 3
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)

Выход: это 3 часа

Время выполнения для обоих методов.

$time = 3
Measure-Command (
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")
)

Всего миллисекунд: 39, 1416

$time = 3
Measure-Command (
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)
)

Всего миллисекунд: 25, 6802

Разница: 13, 4614 миллисекунд

Эта разница становится огромной, когда вы пишете массивный скрипт или функции внутри коммутатора.

1. Переключение с помощью параметра Regex

Если Regex упоминается в switch, он оценивает выражение с переданным значением и, если часть условия совпадает, выполняет эту операцию.

Рассмотрим пример ниже.

Код:

Switch ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Вывод: ничего не упоминается

После добавления Regex.

Код:

Switch -Regex ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Вывод : упоминается осел

Осел снова упоминается

2. Переключите с параметром подстановочного знака

Подстановочный знак работает аналогично параметру Like.

Код:

$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)

Выход: ошибка WMI

3. Переключение с точным параметром

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

Код:

Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Выход: нет мира

Код:

Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Вывод: Hello World

4. Переключить с параметром файла

Вы можете указать путь к файлу непосредственно к коммутатору в качестве параметра. Вы можете использовать File с путем к файлу вместо того, чтобы дать ему выражение переменной.

Код:

Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)

Выход:

Вы можете использовать $ PSItem или $ _ для работы с текущими элементами.

5. Переключите с параметром CaseSensitive

Когда вы используете параметр Casesensitive в переключателе, тогда условие должно точно соответствовать каждому символу.

Код:

switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)

Вывод: это не соответствует

6. Передача значения массива для переключения функции

Простой массив:

switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)

Выход:

10

Двенадцать

Передающий объект Array

Код:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)

Выход:

Операция удаления виртуальной машины

VM Create Operation

7. Разрывное состояние

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

Код:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" (
"VM Delete Operation"
break )
"VM_Create" (
"VM Create Operation"
break)
"VM_Shutdown" (
"VM Shutdown Operation"
break
)
)

Выход:

Операция удаления виртуальной машины

Если вы заметили, что выполняется только один блок, а затем он выходит из функции переключения.

8. Продолжить Условие

Параметр Continue используется для пропуска определенной итерации. Например, если есть 3 элемента для сопоставления, то он будет выполнен первым, а когда условие соответствует, тогда он пропустит другие шаги и перейдет к следующему шагу.

Код:

switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)

Вывод: первый блок выполняется

Как вы можете видеть, передается только один аргумент ('Hello'), первый блок выполняется только потому, что выражение совпадает, и нет другого аргумента для выполнения, сценарий завершится.

  • Еще один смешанный пример разрыва и продолжения с Switch.

Код:

switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)

Выход:

Первый блок выполняется

Выполняется второй блок

Вывод

В целом, Switch намного лучше, чем реализация нескольких условий If, и обеспечивает большую функциональность и сокращение времени выполнения.

Рекомендуемые статьи

Это было руководство для Switch Case в PowerShell. Здесь мы также обсудим синтаксис, параметры и примеры регистра переключателей в Powershell. Вы также можете взглянуть на следующие статьи, чтобы узнать больше

  1. Что такое сценарии оболочки?
  2. Команды PowerShell
  3. Операторы PowerShell
  4. Использование Powershell
  5. Руководство по массиву в PowerShell с примерами