Windows FuncOne()-和FuncTwo()不工作

Windows FuncOne()-和FuncTwo()不工作,windows,powershell,windows-server-2012-r2,powershell-5.0,Windows,Powershell,Windows Server 2012 R2,Powershell 5.0,这是我的代码: 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 (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
)和运算符(
-和
)是完全不可区分的-解析器无法判断
-和
应该被解释为参数名还是运算符。此外,字符串literal
FuncTwo
也可以解释为参数参数,这正是发生的情况

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


这是一个语法问题

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

functionName($arg1[,$arg2,$arg3])
而是:

functionName [-parameterName1] $arg1 [[-parameterName2] $arg2]
现在,让我们将此应用于
if()
示例表达式:

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

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


因此powershell认为FuncOne被定义为某种东西,因此,强制为$true?不,它认为
-和
是一个参数名,
FuncTwo
是一个参数Mathias是正确的,他的回答解释了这个问题。是的,括号应该在函数的周围,并包含参数。不应在参数(
if((FuncOne$valOne)-和(FuncTwo$valTwo))周围使用括号{…
因此powershell认为FuncOne是定义为某物的,因此,强制为$true?不,它认为
-和
是一个参数名,
FuncTwo
是一个参数Mathias是正确的,他的回答解释了这个问题。是的,括号应该在函数周围,并且包含参数。不应该使用括号围绕参数:
if((FuncOne$valOne)-和(FuncTwo$valTwo)){…