Как использовать оператор If Else в PowerShell
Условия If-Else являются основой любого языка программирования, в том числе и PowerShell. Они используются для проверки, выполнено ли условие, позволяя выполнять разные действия в зависимости от результата.
Множественные условия, инструкции if-not и else-if предоставляют вам множество вариантов для проверки условий в каждой ситуации. Хорошее понимание инструкций if и различных методов может действительно помочь вам написать лучшие скрипты PowerShell.
В этой статье мы рассмотрим операторы If Else в PowerShell, используя различные методы, такие как if not, if и как использовать несколько условий.
Инструкция If в PowerShell
Давайте начнем с базового оператора If в PowerShell. Оператор If без каких-либо операторов будет проверять, истинно ли условие или нет. Когда условие истинно, блок сценария будет выполнен. Условие помещается в круглые скобки ( ), а блок сценария помещается в фигурные скобки { }.
if (condition) {
# code to execute if condition is true
}В приведенном ниже примере мы установили переменную $isAdmin в значение True. Далее мы собираемся проверить с помощью оператора if, установлена ли переменная в true, и вывести результат:
$isAdmin = $true
if ($isAdmin) {
Write-Host "You have administrator privileges."
}
В приведенном выше примере мы использовали простую переменную, которая установлена в $true для условного выражения. Но мы также можем использовать оператор сравнения в условии. Операторы сравнения возвращают истину или ложь в зависимости от результата. Попробуйте следующее в окне PowerShell:
$num = 10
$num -gt 5
Result
TrueКак вы видите, оператор сравнения вернул true. Поэтому, если мы добавим этот пример в часть условия оператора If, мы сможем проверить, больше ли число $num чем 5, и вывести строку в консоль:
$num = 10
if ($num -gt 5) {
# $num is greater then 5
Write-Host "$num is greater then 5"
}Другие операторы сравнения, которые вы используете в PowerShell:
| Оператор | Оператор контрпартии | Описание |
|---|---|---|
| -eq | -ne | Равно или не равно |
| -gt | -lt | Больше или меньше чем |
| -ge | Больше или равно | |
| -le | Меньше или равно | |
| -Like | -NotLike | Сопоставить строку с помощью подстановочного знака * или без него |
| -Match | -NotMatch | Совпадает или нет с указанным регулярным выражением |
| -Contains | -NotContains | Коллекция содержит заданное значение или нет |
| -In | -NotIn | Указанное значение в коллекции или нет |
| -Replace | Заменить указанное значение |
Использование Cmdlet в условиях if
Помимо переменных и операторов сравнения, мы также можем использовать cmdlets внутри условия запроса if. Например, мы можем создать сессию PowerShell к Server01 только в том случае, если ping к серверу был успешным, используя cmdlet test-connection.
if (Test-Connection -TargetName Server01 -Quiet) {
New-PSSession -ComputerName Server01
}else{
Write-Host "Unable to connect to server01"
}Совет
Хотите узнать больше о написании скриптов PowerShell? Тогда обязательно прочитайте это руководство по началу работы с написанием скриптов PowerShell.
Условный оператор If-Else
Инструкция if часто сопровождается инструкцией else в PowerShell. Часть else инструкции выполняется, когда условие ложно или равно нулю. Возьмем наш последний пример, мы можем добавить инструкцию else, которая сообщит нам, если $num меньше 5:
$num = 10
if ($num -gt 5) {
# $num is greater then 5
Write-Host "$num is greater then 5"
}else{
# $num is less then 5
Write-Host "$num is less then 5"
}Часть else операторов if-else также будет срабатывать, когда переменная не задана. Например, если мы установим переменную $num в пустую строку, условие else сработает:
Если Иначе Если Иначе заявление
Мы можем еще больше расширить наше условие If Else с помощью оператора elseif. Elseif позволяет проверять дополнительное условие. Хорошо знать, что вы не ограничены одним условием elseif, вы можете добавить столько, сколько хотите, между вашими операторами if и else. Но имейте в виду, что когда выполняется оператор if или одно из условий elseif, остальные уже не будут тестироваться.
$num = 10
if ($num -gt 10) {
Write-Host "$num is greater then 10"
}elseif ($num -gt 5) {
Write-Host "$num is greater then 5"
}else{
Write-Host "$num is less then 5"
}
Result
10 is greater then 5
Другим вариантом для нескольких elseif операторов является использование оператора switch или использование коллекции и оператора сравнения -in. Оператор -in позволяет вам проверить, содержит ли коллекция заданное значение или нет. Например, мы можем проверить, указаны ли фрукты в коллекции:
$collection = @(
'apple',
'banana',
'kiwi',
'raspberry'
)
$fruit = 'kiwi'
if ($fruit -in $collection) {
write-host "$fruit is a approved fruit"
}
Result
kiwi is a approved fruitУсловие If And в PowerShell
Инструкция If And в PowerShell позволяет проверять несколько условий внутри одного оператора if. Это иногда устраняет необходимость в вложенных операторах If или множественных операторах if-else. Операторы If и And проверяют, истинны ли два или более условий. Когда все условия истинны, исполняется блок скрипта:
Using the -and operator
if ((condition1) -and (condition2)) {
# code to execute when condition 1 and condition 2
# are both true
}Я предпочитаю ставить каждое условие в скобки ( ), что делает код более читаемым. Но они не всегда необходимы, в приведенном выше примере вы также можете их оставить, например, так:
if ($num -ge 1t -and $num -lt 20) { #code }Итак, давайте начнем с простого примера, мы собираемся проверить, находится ли число между 10 и 20. Сначала мы проверяем, больше ли переменная $num 10, а во втором условии — меньше ли она 20.
$num = 12
if (($num -gt 10) -and ($num -lt 20)) {
Write-Host "$num is between 10 and 20"
}
Tip: you could also use the -in operator to check if the number is withing a range:
if ($num -in 11..19) {
Write-Host "$num is between 10 and 20"
}Обратите внимание, что мы проверяем, находится ли число между 10 и 20. Если вы хотите включить 10 и 20, то используйте операторы -ge (больше или равно) и -le (меньше или равно).
Использование операторов If или Or
Аналогично проверке с помощью оператора if и проверки, выполнены ли несколько условий, мы также можем проверить, выполнено ли одно из условий, с помощью условного оператора -or. При использовании оператора -or должно быть истинным только одно из условий, чтобы блок скрипта был выполнен.
if ((condition1) -or (condition2)) {
# code to execute when condition 1 or condition 2 is true
}Например, мы можем проверить, является ли роль пользователя администратором или разработчиком, прежде чем продолжить:
$role = "developer"
if (($role -eq 'admin') -or ($role -eq 'developer')) {
# code to execute
write-host 'The user is allowed to continue'
}Powershell Если не
Инструкция If в PowerShell проверяет, истинно ли определенное условие, но иногда вам нужно проверить, является ли условие ложным. Для этого мы можем использовать инструкцию If Not в PowerShell. Это проверит, выполнено ли условие. Инструкция if not записывается, помещая условие в скобки ( ) и ставя перед ним ! или -not:
if (!(condition1)) {
# code to execute when condition 1 is false
}
or using -not
if (-not(condition1)) {
# code to execute when condition 1 is false
}Хорошим примером этого является команда Test-Path, которая проверяет, существует ли путь или файл. Прежде чем копировать файлы в каталог, нам нужно проверить, существует ли папка, если нет, нам нужно ее создать.
If (!(Test-Path -Path $pathToFolder -PathType Container)) {
New-Item -ItemType Directory -Path $pathToFolder | Out-Null
}Оператор тернарного выбора PowerShell
Однострочные операторы if являются обычной практикой во многих языках программирования в наши дни. Однострочный оператор if на самом деле называется тернарным оператором, и мы можем использовать его в PowerShell 7. Тернарный оператор отлично подходит, когда у вас есть простые короткие операторы if, которые можно написать в одну строку. Когда оператор if запускает многострочный блок скрипта, тернарный оператор не является лучшим выбором.
Тернарный оператор использует следующую структуру для условия if-else:
<condition> ? <script-when-true> : <script-when-false>;Давайте возьмем наш пример с начала статьи. Мы собираемся проверить, больше ли число 5 или нет. Вместо того чтобы писать полный оператор if-else, который состоит как минимум из 5 строк, мы можем записать его в одну строку, используя тернарный оператор:
$value = 10
$value -gt 5 ? (Write-Host 'Greater than 5') : (Write-Host 'Less than or equal to 5')PowerShell Если Нуль
Еще одной распространенной практикой является проверка, является ли переменная или результат команды null или нет. Null-переменная — это переменная, которой не было присвоено никакое значение или которой было явно присвоено значение null. Простой язык, null-переменная не имеет никаких данных, хранящихся в ней.
Чтобы проверить, является ли переменная или результат нулевыми или пустыми, мы сравниваем их с переменной $null. Переменная $null должна находиться с левой стороны, чтобы гарантировать правильное сравнение значения в PowerShell.
Допустим, мы хотим проверить, пуста ли переменная. Если мы поместим переменную с пустой строкой слева, результатом будет то, что переменная не пуста.
$var = ""
if ($var -eq $null) {
Write-Host "The variable is null."
}else{
Write-Host "The variable is not empty."
}
Result
The variable is not empty.Однако, если мы разместим переменную $null на первом месте, то результатом будет то, что переменная пуста:
$var = ""
if ($null -eq $var) {
Write-Host "The variable is null."
}else{
Write-Host "The variable is not empty."
}
Result
The variable is null.Разные результаты происходят по двум причинам в PowerShell:
$nullявляется скалярным значением. Операторы сравнения возвращают булево значение, когда значение слева является скалярным, или сопоставимые значения/пустой массив, если это коллекция.- PowerShell выполняет приведение типов слева направо. Это приводит к неправильным сравнением, когда
$nullприводится к другим скалярным типам.
Итак, если вы хотите проверить, является ли значение нулевым, то вы должны поместить $null с левой стороны.
Проверка, является ли значение нулевым в PowerShell, используется не только с переменными. Вы также можете использовать это для проверки, возвращает ли cmdlet какие-либо данные или нет. Например, мы можем проверить, установлен ли модуль PowerShell, с помощью следующего кода:
if ($null -eq (Get-Module -ListAvailable -Name Microsoft.Graph)) {
Write-host "Microsoft Graph module is not installed"
}Заключение
Условия If Else в PowerShell составляют основу написания скриптов. Они позволяют сравнивать значения и принимать решения в вашем скрипте на основе результатов. При использовании нескольких условий elseif вам может быть полезно рассмотреть возможность использования операторов Switch в PowerShell. Это позволяет проверять несколько условий более чистым и простым способом.
Надеюсь, вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.

