powershell与空参数的行为不一致



我需要在powershell中编写一个函数,该函数从一个``参数''中分开,而'参数未通过'传递给一个用字符串空(或任何其他字符串)

传递给一个'参数

我这样写了:

function Set-X {
    param(
    [AllowNull()][string]$MyParam = [System.Management.Automation.Language.NullString]::Value
    )
    if ($null -ne $MyParam) { write-host 'oops' }
    else { write-host 'ok' }
}

如果我调用ISE的无参数的set-x,它可以按照我的期望和打印"确定"。

但是,如果我从普通控制台中这样做,它会打印"哎呀"。

发生了什么事?什么是正确的方法?

允许用户传递$null的参数参数值不会改变PowerShell将尝试将其转换为[string]的事实。

将powershell中的 $null值转换为字符串会导致一个空字符串:

$str = [string]$null
$null -eq $str # False
'' -eq $str    # True

$null -as [string]"$null"也是如此)

如果您不仅要允许 $null,又要 accept $null作为参数值:

,请删除MyParam参数上的类型约束。
function Set-X {
    param(
    [AllowNull()]$MyParam = [System.Management.Automation.Language.NullString]::Value
    )
    if ($null -ne $MyParam) { write-host 'oops' }
    else { write-host 'ok' }
}

正如Mathias和Benh所写的那样,罪魁祸首将$ null投入到[字符串]类型上,这会导致一个空字符串:

 [string]$null -eq '' #This is True

但是,对于Mathias中的示例代码正确工作,我们还必须替换

[System.Management.Automation.Language.NullString]::Value

with $ null

function Set-X {
    param(
    [AllowNull()]$MyParam = $null
    )
    if ($null -ne $MyParam) { write-host 'oops' }
    else { write-host 'ok' }
}

相关内容

  • 没有找到相关文章

最新更新