如何在 Powershell 中对多个变量进行逻辑或运算

How to logical OR multiple variables in Powershell

我以为这很简单。我确定是的。但是,我好像破解不了。

我有 3 个函数 return 一个 truefalse 值。

在稍后的 if 评估中,我试图将 3 个结果合乎逻辑 or

像这样:

if (Fnc1 -or Fnc2 -or Fnc3) { write-host "Yes" }

不仅 Powershell 突出显示第一个 Fnc1 的语法与其他 Fnc1 的语法不同,而且根据我所知道的 Fnc1 的值,它只是 return判断真假。

我知道这行得通:

if ((Fnc1 -eq $true) -or (Fnc2 -eq $true) -or (Fnc3 -eq $true)) { write-host "Yes" }

但是,这似乎有点过分而且没有必要。

我错过了什么?

当您将 -or 标记放在函数名称之后时,PowerShell 会尝试将其解析为函数参数。在 ():

中包围每个函数调用
if ((Fnc1) -or (Fnc2) -or (Fnc3)) { write-host "Yes" }

另一种方法是使用 -contains 集合运算符。看...

function Get-True {$True}
function Get-False {$False}


@((Get-True), (Get-False), (Get-True)) -contains $True

输出=True

如果所有这些都是 Get-False,结果将是 False


请注意,此方法要求 所有函数调用 为 运行,然后 -contains 运算符才能测试任何内容。这意味着 -or 解决方案会更有效,因为这会 运行 每个函数按顺序调用并在 -or 满足时停止。

如果函数调用占用大量时间或资源,-or 解决方案可以 高效得多

感谢@SagePourpre 指出这一点。 [咧嘴一笑]