Поделиться через


about_If

Краткое описание

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

Подробное описание

Оператор можно использовать if для выполнения блоков кода, если заданный условный тест имеет значение true. Можно также указать один или несколько дополнительных условных тестов для выполнения, если все предыдущие тесты имеют значение false. Наконец, можно указать дополнительный блок кода, который выполняется, если ни один другой предыдущий условный тест не имеет значения true.

Синтаксис

В следующем примере показан синтаксис инструкции if :

if (<test1>)
    {<statement list 1>}
[elseif (<test2>)
    {<statement list 2>}]
[else
    {<statement list 3>}]

При выполнении инструкции if PowerShell оценивает условное <test1> выражение как true или false. Если <test1> имеет значение true, <statement list 1> выполняется и PowerShell завершает инструкцию if . Если <test1> значение равно false, PowerShell оценивает условие, указанное условным оператором <test2> .

Дополнительные сведения о логической оценке см. в разделе about_Booleans.

Если <test2> имеет значение true, <statement list 2> выполняется и PowerShell завершает инструкцию if . Если оба <test1> значения и <test2> имеют значение false, <statement list 3> выполняется блок кода и PowerShell завершает инструкцию if .

Для цепочки последовательности условных тестов можно использовать несколько elseif операторов. Каждый тест выполняется, только если все предыдущие тесты имеют значение false. Если необходимо создать инструкцию if , которая содержит много elseif операторов, рассмотрите возможность использования инструкции Switch.

Примеры:

Простейшая if инструкция содержит одну команду и не содержит никаких elseif инструкций или else инструкций. В следующем примере показана простейшая форма if оператора :

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}

В этом примере, если $a переменная больше 2, условие принимает значение true и выполняется список инструкций. Однако если $a значение меньше или равно 2 или не является существующей переменной if , инструкция не отображает сообщение.

При добавлении оператора Else отображается сообщение, если $a меньше или равно 2. Как показано в следующем примере:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
else {
    Write-Host ("The value $a is less than or equal to 2," +
        " is not created or is not initialized.")
}

Чтобы дополнительно уточнить этот пример, можно использовать elseif оператор для отображения сообщения, если значение $a равно 2. Как показано в следующем примере:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
elseif ($a -eq 2) {
    Write-Host "The value $a is equal to 2."
}
else {
    Write-Host ("The value $a is less than 2 or" +
        " was not created or initialized.")
}

Использование синтаксиса тернарного оператора

В PowerShell 7.0 появился новый синтаксис с использованием тернарного оператора. Он соответствует синтаксису тернарного оператора C#:

<condition> ? <if-true> : <if-false>

Тернарный оператор ведет себя так же, как упрощенный if-else оператор . Выражение <condition> вычисляется, а результат преобразуется в логическое значение, чтобы определить, какая ветвь должна быть оценена далее:

  • Выражение <if-true> выполняется, если выражение <condition> имеет значение true.
  • Выражение <if-false> выполняется, если выражение <condition> имеет значение false.

Пример:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

В этом примере значение $message равно Path exists , если Test-Path возвращает .$true Если Test-Path возвращает $falseзначение , значение равно $messagePath not found.

$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)

В этом примере, если служба запущена, она останавливается, а если ее состояние не выполняется, она запускается.

<condition>Если выражение , <if-true>или <if-false> вызывает команду, необходимо заключить ее в круглые скобки. В противном случае PowerShell создает исключение аргумента для команды в <condition> выражении и выполняет анализ исключений для выражений <if-true> и <if-false> .

Например, PowerShell вызывает исключения для следующих тернаров:

Test-Path .vscode   ? Write-Host 'exists'   : Write-Host 'not found'
(Test-Path .vscode) ? Write-Host 'exists'   : Write-Host 'not found'
(Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
Test-Path: A positional parameter cannot be found that accepts argument '?'.
ParserError:
Line |
   1 |  (Test-Path .vscode) ? Write-Host 'exists'   : Write-Host 'not found'
     |                       ~
     | You must provide a value expression following the '?' operator.
ParserError:
Line |
   1 |  (Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
     |                                               ~
     | You must provide a value expression following the ':' operator.

В этом примере выполняется анализ:

(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists

См. также раздел