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

inkz8wg9  于 2023-01-13  发布在  Shell
关注(0)|答案(4)|浏览(152)

我有一个脚本,它通过分析日志文件来检查PC的健康状况,查找受损的指标。如果脚本找到某个事件ID,它将返回一个规范化的消息。最终目标是对这些返回进行数学运算-这将生成该PC的健康状况得分。
我需要知道的是,如果找到了事件ID,如何设置一个变量(比如X的值为1),如果没有找到事件ID,如何设置同一个变量(比如X的值为2),如果我在脚本中设置这两个变量--在它们各自的if/else块中,那么不管条件如何,最后一个变量是否总是覆盖第一个变量?

im9ewurl

im9ewurl1#

遗憾的是,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
ymzxtsji

ymzxtsji2#

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

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

显示1
但是,您可能需要switch,例如,

$in = 'test2'

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

echo $x

显示2

isr3a4wc

isr3a4wc3#

一个小例子,可以帮助理解。
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语句中的条件,将得到不同的结果。

w8biq8rn

w8biq8rn4#

实际上,你可以计算一个条件,然后将结果赋给一个变量。这是你在PowerShell中得到的最接近三元运算符的运算符。我发现,它使复杂的条件语句变得更简单。它使阅读和修改它们变得更容易。下面是一个例子:

$theEventIdIWant = 6000  
$eventId = 5000
$correct = $eventID -eq $theEventIdIWant
if($correct) {$true} else {$false}

相关问题