Введение в 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. Вы также можете взглянуть на следующие статьи, чтобы узнать больше
- Что такое сценарии оболочки?
- Команды PowerShell
- Операторы PowerShell
- Использование Powershell
- Руководство по массиву в PowerShell с примерами