Поиск по сайту:

Как использовать оператор 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

Оператор сравнения PowerShell

Как вы видите, оператор сравнения вернул 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Заменить указанное значение
Операторы PowerShell

Использование 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 сработает:

PowerShell если иначе

Если Иначе Если Иначе заявление

Мы можем еще больше расширить наше условие 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. Это позволяет проверять несколько условий более чистым и простым способом.

Надеюсь, вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.