鉴于此基本功能:

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/

10-11 23:51