Эта статья обновлена для 2023 года!
Сценарии могут принимать решения. Как? Используя концепцию, называемую условной логикой. Оператор if в PowerShell и конструкции if/else – это общие способы определения условий.
Когда вы пишете сценарии PowerShell, вы делаете это с определенной задачей или задачами в виду. Но операция может иметь несколько возможных действий на основе одного или нескольких условий. В этой ситуации на помощь приходит конструкция if в PowerShell.
В этой статье вы узнаете о конструкции If-Else в PowerShell и поймете ее синтаксис и принцип работы. Вы также узнаете некоторые способы использования оператора If в PowerShell для добавления обработки условной логики в ваши сценарии на примерах.
Понимание синтаксиса оператора If в PowerShell
Конструкция if-else в PowerShell оценивает одно или несколько условных выражений. Ниже вы увидите синтаксис оператора If. Этот стиль часто называют управлением потоком.
Как видно из приведенного выше синтаксиса, каждый тест заключен в круглые скобки ()
. Тесты могут использовать различные операторы, такие как операторы сравнения и логические операторы,
Списки инструкций содержат код, предназначенный для выполнения, если результат теста оценивается как true.
Затем в группе операторов условия If есть три возможных выражения. Это операторы IF, ELSEIF и ELSE.
- Оператор
if
содержит первое условие для оценки, за которым следует список операторов, заключенных в фигурные скобки{}
. Оператор if является единственным обязательным оператором в PowerShell. - Оператор
elseif
используется для добавления дополнительных условий. Можно добавить несколько операторов ElseIf, когда имеется несколько условий. PowerShell будет оценивать каждое из этих условий последовательно. - Оператор
else
не принимает никаких условий. Список операторов в этом операторе содержит код, который будет выполняться, если все предыдущие условия оказались ложными.
Понимание логики оператора условия If в PowerShell
Чтобы лучше понять, как работает конструкция If-Else в PowerShell, ознакомьтесь с его логикой. Ниже приведена диаграмма основного потока выполнения оператора If-Else в PowerShell.

Когда выполняется оператор if, PowerShell последовательно оценивает каждое условие, проверяя, возвращает ли код true или false. Ниже приведено краткое описание этого поведения:
- PowerShell оценивает условие в Тест 1.
- Если результат Теста 1 равен true, выполняется код внутри списка операторов If, а затем PowerShell выходит из оператора If.
- Если результат Теста 1 равен false, PowerShell продолжает оценивать условие (Тест n) в следующем операторе ElseIf.
- Если результат Тест n возвращает false, PowerShell продолжает оценивать условие (Тест n) в следующем операторе ElseIf, если другой оператор ElseIf существует -ИЛИ-
- Если результат теста n возвращает false, код в операторе Else выполняется, и PowerShell выйдет из оператора If -ИЛИ-
- Если результат теста n возвращает true, код в операторе ElseIf выполняется, и PowerShell выйдет из оператора If.
Использование оператора If-Else PowerShell
В следующих разделах приведены несколько примеров использования оператора If PowerShell при написании сценариев. Техники, которые вы узнаете, могут помочь вам использовать оператор If, если вы столкнетесь с реальной ситуацией, требующей его использования.
Одиночное условие If-Else
Начнем с самого простого – с одиночного оператора If в PowerShell. Вы должны использовать одиночный оператор if, когда есть только одно условие для проверки.
Ниже приведен пример проверки, больше ли значение переменной $num
10. Если результат истинный, на экране будет отображен результат "$num больше 10"
. Если результат ложный, PowerShell ничего не делает, потому что есть только одно условие для проверки.
Если вы проверяете только определенное значение, например,
if ($Value) { }
, то PowerShell проверит, не является ли$Value
$Null
,0
,$False
, пустой строкой или пустым массивом.
Вставка указанного выше кода в PowerShell даст вам показанный ниже результат.

Теперь вы можете добавить оператор Else, если хотите добавить “запасное” действие по умолчанию, а не просто позволить PowerShell ничего не делать, когда результат проверки является ложным.
В приведенном ниже примере код в блоке Else будет выполняться, если значение переменной $num
НЕ больше 10.
Запуск измененного кода в PowerShell дает вам следующий вывод.

Начиная с PowerShell 7.0, был введен новый синтаксис для оператора If с использованием тернарного оператора. Одиночные операторы If могут хорошо использовать этот новый синтаксис.
Используя тот же пример выше, так будет выглядеть код с использованием тернарного оператора.

Тестирование на $Null в операторе If PowerShell
Вы можете подумать, что тестирование условия $Null
просто. Но сторона, на которой вы размещаете значение $Null
, важна, так как это может не привести к одинаковым результатам в каждом случае. Лучше всего всегда размещать условие $Null
слева, как показано ниже.
Если вы разместите проверку $Null
справа, а значение слева будет списком, например массивом, тогда $Null
будет действовать как фильтр. Как видно из приведенного ниже примера, если $Null
размещен слева, у вас будут последовательные логические результаты.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

Множественные условия If-Else с ElseIf
При оценке нескольких условий необходимо добавить один или несколько операторов ElseIf. Каждый оператор ElseIf содержит выражение проверки и свой код для выполнения.
Сценарий ниже, при выполнении, будет продолжать запрашивать название фрукта до тех пор, пока не будет нажата комбинация клавиш CTRL+C
, или пользователь не введет букву “X
“.
Затем оператор If будет последовательно проверять каждое условие до тех пор, пока не найдет совпадение. Если ввод не соответствует ни одному из условий, будет выполнен код внутри оператора Else.
Ниже приведена демонстрация того, как ведет себя указанный сценарий при выполнении в PowerShell.

Сообщение о свободном месте на диске
Отчет о свободном месте на диске – одна из распространенных задач для системных администраторов. Обычным способом сообщения информации о свободном месте на жестких дисках в системе Windows является код ниже.
Информация, которую вернет код выше, будет выглядеть так, как показано на следующем скриншоте.

Как видите, вывод выше показывает букву диска, значения свободного места и другие свойства. Хотя вывод выше нормален, он неинтуитивен. Представленная информация не указывает, находится ли свободное место на диске в критическом, предупредительном или нормальном состоянии.
Использование оператора If в PowerShell для улучшения кода
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
Приведенный ниже пример скрипта выполняет следующее:
- Используя значение переменной
$Critical
, определите порог, при котором процент свободного места будет считаться критическим. - Используя значение переменной
$Warning
, определите порог, до которого процент свободного места будет помечен как предупреждение. - Получите всю информацию о фиксированных дисках с локальной машины
- Переберите всю информацию о дисках, чтобы определить свободное место и пометить его статус.
- Если процент свободного места выше значения переменной
$Warning
, статус дискового пространства помечается как нормальный. - Если процент свободного места выше значения переменной
$Critical
, статус дискового пространства помечается как предупреждение. - Если процент свободного места меньше или равен значению переменной
$Critical
, статус дискового пространства помечается как критический.
- Если процент свободного места выше значения переменной
- Составьте свойства объекта
'Буква диска'
,'Имя диска'
,'Общее пространство (ГБ)'
,'Свободное пространство (ГБ)'
,'Свободное пространство (%)'
и'Статус'
. - Верните окончательный отчет.
Скопируйте код ниже и сохраните сценарий с именем файла Get-DiskSpace.ps1
. Не забудьте изменить значения переменных $Critical
и $Warning
для тестирования с разными пороговыми значениями.
Вы также можете присвоить результат условия if/else переменной, например,
$Status = if ($percentFree -gt $Warning) { 'Normal' }
, чтобы, возможно, сделать более короткое условие.
После сохранения скрипта протестируйте его, вызвав его имя в PowerShell. Ниже приведен пример демонстрации того, как работает этот скрипт.

Как видно из вывода, статус для каждого диска определяется процентом свободного дискового пространства, который был результатом использования нескольких условий с PowerShell If-Else.
Несколько и вложенных условий If-Else
Предположим, у вас есть оператор if-else с условием, определенным в блоке else
. Когда выполняется оператор if-else, блок else
вызывается, если код внутри блока if
возвращает false.
Внутри блока else
вам нужно выполнить еще один условный тест. В результате вам нужен еще один оператор If-Else. Этот сценарий называется вложенным If-Else. Вложенный оператор If-Else обычно используется, если внутренний оператор If-Else зависит от результата операции во внешнем операторе If-Else.
Использование нескольких и вложенных операторов If-Else может быть довольно запутанным. Ключевым моментом является помещение опорной структуры и обеспечение отступов в вашем коде. Отступы в вашем коде помогут вам легко распознать и разделить ваши операторы If-Else.
Примеры нескольких/вложенных операторов If-Else
Приведенный ниже пример скрипта показывает, как несколько и вложенных операторов If-Else могут зависеть от результатов друг друга. Логика кода ниже следующая.
- Если
$SendEmail
равен$false
, скрипт ничего не будет делать и завершится. - Если
$SendEmail
равен$true
, то переменные$From
и$To
не должны быть пустыми или null. В противном случае флаг$abortFlag
будет установлен в 1. - Если
$SendEmail
равен$true
и$CCEnabled
равен$true
, то переменная$CC
не должна быть пустой или null. В противном случае флаг$abortFlag
будет установлен в 1. - Если
$SendEmail
равен$true
, а$BCCEnabled
равен$true
, то переменная$BCC
не должна быть пустой или равной нулю. В противном случае значение переменной$abortFlag
будет установлено равным 1. - Если значение переменной
$abortFlag
равно 1, скрипт завершит работу на этом этапе и не будет продолжать выполнение. - Если значение переменной
$abortFlag
равно 0, скрипт продолжит выполнение до конца.
Скопируйте код ниже и сохраните его как Send-MyMail.ps1
. Не изменяйте значения пока.
После сохранения файла выполните его в PowerShell, как показано ниже. Ниже приведен демонстрационный результат скрипта при неизменных значениях переменных.

Затем отредактируйте скрипт и правильно обновите все переменные, как показано ниже.
После редактирования переменных сохраните скрипт и запустите его снова. Результат должен быть тот же, что и приведенный ниже.

Теперь измените переменные и попробуйте различные комбинации, чтобы проверить, как будут влиять вложенные условные конструкции If-Else. Изменение и тестирование на практике помогут вам лучше понять логику.
Сводка
В этой статье вы узнали о конструкции условной логики – конструкции If-Else в PowerShell. Условный оператор If-Else позволяет скриптерам формулировать условную логику и направлять действия своих скриптов на основе результатов тестирования.
С помощью примеров в этой статье вы должны были узнать способы и техники использования оператора If-Else при создании кода, зависящего от принятия решений. If-Else может быть простым при использовании одного условия и становится более сложным по мере погружения во вложенные конструкции If-Else.
Что вы думаете о операторе If-Else? Считаете ли вы, что будете использовать его все больше и больше после прочтения этой статьи? Какие другие цели вы можете рассмотреть, где можно применить полученные знания?