鉴于这个基本功能:
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
变量,它仍然不为 Null 或空。发生了什么,如何重写该语句,以便第二个 If 语句计算结果为 False 并且脚本块不会被执行?
(我添加了-or $Par2 -ne ''
只是为了测试,无论有没有它,它的行为都是一样的。)
你的程序有逻辑错误:$Par2
will always不等于$null
or不等于''
.
要修复逻辑,您应该使用-and
代替-or
here:
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,你可能会这样做:
If ($Par2) { Write-Output "Par2 = $Par2" }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)