鉴于此基本功能:
Function TestFunction {
Param ( [int]$Par1, [string]$Par2, [string]$Par3 )
If ($Par1 -ne $Null) { Write-Output "Par1 = $Par1" }
If ($Par2 -ne $Null -or $Par2 -ne '') { Write-Output "Par2 = $Par2" }
If ($Par3 -ne $Null) { Write-Output "Par3 = $Par3" }
}
TestFunction -Par1 1 -Par3 'par3'
...输出是:
Par1 = 1
Par2 =
Par3 = par3
即使我没有将任何内容传递给$Par2
变量,它仍然不是空或空。发生了什么,如何重写语句,以便第二个If语句的计算结果为False,并且脚本块没有被执行?
(我添加-or $Par2 -ne ''
只是为了测试,无论有没有它都表现相同。)
答案 0 :(得分:11)
您的计划中存在逻辑错误:$Par2
总是不等于$null
或不等于{{1} }。
要修复逻辑,您应该使用''
代替-and
:
-or
但是,因为您将If ($Par2 -ne $Null -and $Par2 -ne '') { Write-Output "Par2 = $Par2" }
参数传递给函数参数列表中的字符串:
$Par2
检查Param ( [int]$Par1, [string]$Par2, [string]$Par3 )
^^^^^^^^
是不必要的,因为$Par2 -ne $Null
将始终是字符串类型(如果您没有给它一个值,它将被分配给$Par2
)。所以,你应该写一下:
''
或者,因为If ($Par2 -ne '') { Write-Output "Par2 = $Par2" }
的计算结果为false,您可能会这样做:
''
答案 1 :(得分:0)
您可以检查(检查$ variablename是否将$ null作为值):
if (!$variablename) { Write-Host "variable is null" }
如果你想检查$ variablename是否有除$ null之外的任何值:
if ($variablename) { Write-Host "variable is NOT null" }