如何在条件语句中设置变量?

时间:2015-09-11 04:53:33

标签: powershell if-statement conditional

我有一个脚本,通过解析日志文件来查找妥协指标来检查电脑的运行状况。如果脚本找到某个事件id,则返回一个规范化的消息。最终目标是对这些回报进行数学计算 - 这将为该PC生成健康评分。

我需要知道的是如果找到事件id,如何设置变量(比如说X的值为1),如果找不到事件id,则设置相同的变量(比如说X的值为2) 。如果我只是在脚本中设置两个变量-in各自的if / else块,那么无论条件如何,最后一个变量是否总是会覆盖第一个?

3 个答案:

答案 0 :(得分:4)

不幸的是,PowerShell没有像Perl($var = (<condition>) ? 1 : 2;)这样的条件赋值语句,但您可以将if语句的输出分配给变量:

$var = if (<condition>) { 1 } else { 2 }

当然,您也可以执行“经典”方法并直接在相应的分支中分配变量:

if (<condition>) {
  $var = 1
} else {
  $var = 2
}

第二个赋值不会取代第一个赋值,因为实际上只执行了其中一个赋值,具体取决于条件的结果。

另一个选项(具有更多hack值)将是从条件的布尔结果计算值。取消布尔值,将其强制转换为int并向其中添加1:

$var = [int](-not (<condition>)) + 1

答案 1 :(得分:3)

在Powershell 7中,您可以使用三元运算符:

$x = $true ? 1 : 2
echo $x

显示1

但是您可能想要的是switch,例如

$in = 'test2'

$x = switch ($in) {
'test1' {1}
'test2' {2}
'test3' {4}
}

echo $x

显示2

答案 2 :(得分:0)

一个可以帮助理解的小例子。

PowerShell脚本:

$MyNbr = 10

$MyMessage = "Crucial information: " + $(
    if ($MyNbr -gt 10) {
        "My number is greater than 10"
    } elseif ($MyNbr -lt 10) {
        "My number is lower than 10"
    } else {
        "My number is 10"
    }
)

Write-Host $MyMessage

输出:

Crucial information: My number is 10

如果更改MyNbr变量,根据if语句中的条件,您将得到不同的结果。