about_If

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

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

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

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

Синтаксис

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

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

При выполнении инструкции PowerShell вычисляет условное if<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 операторов. Каждый тест выполняется только в том случае, если все предыдущие тесты являются ложными. Если вам нужно создать инструкцию if , содержащую множество elseif инструкций, рекомендуется использовать вместо этого инструкцию Switch.

Примеры:

Простейшая if инструкция содержит одну команду и не содержит никаких инструкций или каких-либо elseifelse инструкций. В следующем примере показана простейшая форма инструкции 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.")
}

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

PowerShell 7.0 представила новый синтаксис с помощью тернарного оператора. Он соответствует синтаксису оператора C# ternary:

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

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

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

Например:

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

В этом примере значение $message возвращается Test-PathPath exists$true. При Test-Path возврате $falseзначение $message равно Path 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 вызывает исключения для этих ternaries:

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

См. также