about_If

简短说明

介绍可用于基于一个或多个条件测试结果运行语句列表的语言命令。

长说明

如果指定的条件测试的计算结果为 true, if 则可以使用 语句运行代码块。 如果之前的所有测试的计算结果均为 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> false,则<statement list 3>代码块将运行,PowerShell 将退出 语句if<test2>

可以使用多个 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> 表达式,并将结果转换为布尔值,以确定接下来应计算哪个分支:

  • 如果 <condition> 表达式为 true,则执行 <if-true> 表达式
  • 如果 <condition> 表达式为 false,则执行 <if-false> 表达式

例如:

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

在此示例中,当 返回 时, $message 的值为 Path existsTest-Path$true $false返回 时Test-Path,的$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-false> 表达式的<if-true>异常。

例如,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

另请参阅