3

我以为这很简单。我确信它是。但是,我似乎无法破解它。

我有 3 个返回truefalse值的函数。

在以后的if评估中,我试图or将 3 个结果合在一起。

像这样的东西:

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

Powershell 不仅突出显示第一个 Fnc1 与其他 Fnc1 的语法不同,而且它仅根据我所知道的 Fnc1 的值返回 true 或 false。

我知道这有效:

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

但是,这似乎是矫枉过正和不必要的。

我错过了什么?

4

2 回答 2

4

-or当您将令牌放在类似的函数名称之后时,PowerShell 会尝试将其解析为函数参数。包围每个函数调用()

if ((Fnc1) -or (Fnc2) -or (Fnc3)) { write-host "Yes" }
于 2021-12-15T20:41:30.233 回答
1

另一种方法是使用-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 指出这一点。[咧嘴笑]

于 2021-12-15T21:30:20.017 回答