FuncOne()和FuncTwo()不起作用

这是我的代码:

if (FuncOne($valOne) -and FuncTwo($valTwo)) { ... } 

当这两个函数的计算结果为$false ,if语句中的代码仍然执行。 这是为什么? 这也不能按预期工作:

 if (FuncOne($valOne) -eq $true -and FuncTwo($valTwo) -eq $true) { ... } 

这样写的时候,它按预期工作。

 $a = FuncOne($valOne) $b = FuncTwo($valTwo) if($a -and $b) { ... } 

这是怎么回事?

    这是一个语法问题。

    在PowerShell中调用函数的正确语法不是:

     functionName($arg1[,$arg2,$arg3]) 

    反而:

     functionName [-parameterName1] $arg1 [[-parameterName2] $arg2] 

    现在,让我们将其应用于if()示例表达式:

     FuncOne $valOne -and FuncTwo $valTwo 

    您会注意到显式参数名称( -ParameterName )和运算符( -and )是完全无法区分的 – 解析器无法判断是否应该被解释为参数名称或运算符。 此外,字符串文字FuncTwo也可以被解释为参数参数,这正是发生的情况。

    为了使解析器知道您打算将表达式视为两个单独的表达式,请使用()强制执行评估顺序:

     if ((FuncOne $valOne) -and (FuncTwo $valTwo)) { # They both returns a truthy value } 

    您实际上需要将函数放在括号中以便调用它:

     if ((FuncOne($valOne)) -and (FuncTwo($valTwo))) { ... }