我有一个脚本,它通过分析日志文件来检查PC的健康状况,查找受损的指标。如果脚本找到某个事件ID,它将返回一个规范化的消息。最终目标是对这些返回进行数学运算-这将生成该PC的健康状况得分。
我需要知道的是,如果找到了事件ID,如何设置一个变量(比如X的值为1),如果没有找到事件ID,如何设置同一个变量(比如X的值为2),如果我在脚本中设置这两个变量--在它们各自的if/else块中,那么不管条件如何,最后一个变量是否总是覆盖第一个变量?
我有一个脚本,它通过分析日志文件来检查PC的健康状况,查找受损的指标。如果脚本找到某个事件ID,它将返回一个规范化的消息。最终目标是对这些返回进行数学运算-这将生成该PC的健康状况得分。
我需要知道的是,如果找到了事件ID,如何设置一个变量(比如X的值为1),如果没有找到事件ID,如何设置同一个变量(比如X的值为2),如果我在脚本中设置这两个变量--在它们各自的if/else块中,那么不管条件如何,最后一个变量是否总是覆盖第一个变量?
4条答案
按热度按时间im9ewurl1#
遗憾的是,PowerShell没有像Perl(
$var = (<condition>) ? 1 : 2;
)那样的条件赋值语句,但您可以将if
语句的输出赋值给一个变量:当然,你也可以使用“经典”方法,直接在相应的分支中赋值变量:
第二个赋值不会取代第一个赋值,因为实际上只有一个赋值被执行,这取决于条件的结果。
另一种选择(稍微增加一点hack值)是从条件的布尔结果计算值,对布尔值求反,将其转换为int型,然后加1:
ymzxtsji2#
在Powershell 7中,您可以使用三元运算符:
显示
1
。但是,您可能需要
switch
,例如,显示
2
。isr3a4wc3#
一个小例子,可以帮助理解。
PowerShell脚本:
输出:
如果更改MyNbr变量,则根据if语句中的条件,将得到不同的结果。
w8biq8rn4#
实际上,你可以计算一个条件,然后将结果赋给一个变量。这是你在PowerShell中得到的最接近三元运算符的运算符。我发现,它使复杂的条件语句变得更简单。它使阅读和修改它们变得更容易。下面是一个例子: