给定这个基本函数:
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'...the输出为:
Par1 = 1
Par2 =
Par3 = par3即使我没有向$Par2变量传递任何东西,它仍然不是Null或empty。发生了什么,我如何重写语句,使第二个If语句的计算结果为False,并且脚本块不会被执行?
(我添加-or $Par2 -ne ''只是为了测试,使用它和不使用它时,它的行为是一样的。)
发布于 2015-04-19 09:37:38
您的程序中有一个逻辑错误:$Par2将始终不等于$null 或不等于''。
要修复该逻辑,您应该在此处使用-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将始终是string类型(如果不给它赋值,它将被赋值给'')。所以,你应该写下:
If ($Par2 -ne '') { Write-Output "Par2 = $Par2" }或者,因为''的计算结果为false,所以您可以这样做:
If ($Par2) { Write-Output "Par2 = $Par2" }发布于 2018-04-11 19:17:13
您可以检查(检查$variablename的值是否为$null ):
if (!$variablename) { Write-Host "variable is null" }
如果您想检查除了$null之外,$variablename是否有任何值:
if ($variablename) { Write-Host "variable is NOT null" }
https://stackoverflow.com/questions/29724851
复制相似问题