我有一个脚本,通过解析日志文件来查找妥协指标来检查电脑的运行状况。如果脚本找到某个事件id,则返回一个规范化的消息。最终目标是对这些回报进行数学计算 - 这将为该PC生成健康评分。
我需要知道的是如果找到事件id,如何设置变量(比如说X的值为1),如果找不到事件id,则设置相同的变量(比如说X的值为2) 。如果我只是在脚本中设置两个变量-in各自的if / else块,那么无论条件如何,最后一个变量是否总是会覆盖第一个?
答案 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语句中的条件,您将得到不同的结果。