请考虑以下代码:
function Test
{
[CmdletBinding()]
param
(
[parameter(Mandatory=$true)]
[AllowNull()]
[String]
$ComputerName
)
process{}
}
Test -ComputerName $null
基于the official documentation for AllowNull
,我希望$ComputerName
可以是[string]
或$null
。但是,运行上面的代码会导致以下错误:
[14,24:Test]无法将参数绑定到参数' ComputerName'因为它是空的 字符串。
为什么在这种情况下不为$ComputerName
传递$ null?
答案 0 :(得分:6)
$null
,转换为[string]时,返回空字符串$null
:
[string]$null -eq $null # False
[string]$null -eq [string]::Empty # True
如果您想为{string]参数传递$null
,请使用[NullString]::Value
:
[string][NullString]::Value -eq $null # True
Test -ComputerName ([NullString]::Value)
答案 1 :(得分:3)
如果您计划允许空值和为空字符串,则还需要添加[AllowEmptyString()]
属性。
function Test
{
[CmdletBinding()]
param
(
[parameter(Mandatory=$true)]
[AllowNull()]
[AllowEmptyString()]
[String]
$ComputerName
)
process{}
}
Test -ComputerName $null