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

Cha*_*les 7 powershell conditional if-statement

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

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

Ans*_*ers 8

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

$var = if (<condition>) { 1 } else { 2 }
Run Code Online (Sandbox Code Playgroud)

当然,您也可以采用“经典”方法并直接在各自的分支中分配变量:

if (<condition>) {
  $var = 1
} else {
  $var = 2
}
Run Code Online (Sandbox Code Playgroud)

第二个赋值不会取代第一个赋值,因为根据条件的结果,只有其中一个被实际执行。

另一种选择(具有更多的 hack 值)是根据条件的布尔结果计算值。否定布尔值,将其转换为 int 并将其加 1:

$var = [int](-not (<condition>)) + 1
Run Code Online (Sandbox Code Playgroud)


小智 8

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

$x = $true ? 1 : 2
echo $x
Run Code Online (Sandbox Code Playgroud)

显示1.

然而,您可能想要的是switch,例如,

$in = 'test2'

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

echo $x
Run Code Online (Sandbox Code Playgroud)

显示2.