空参数在函数中不是Null

时间:2015-04-19 01:34:59

标签: function powershell if-statement

鉴于此基本功能:

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 ''只是为了测试,无论有没有它都表现相同。)

2 个答案:

答案 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" }