鉴于此基本功能:
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
始终不等于$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
始终为字符串类型(如果您不给它一个值,它将被分配给''
)。因此,您实际上应该写:If ($Par2 -ne '') { Write-Output "Par2 = $Par2" }
或者,因为
''
的计算结果为false,所以您可以这样做:If ($Par2) { Write-Output "Par2 = $Par2" }
关于function - 空参数不为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29724851/