我尝试在我的函数中引入一个可选的字符串参数。 Based on this thread should [AllowNull()]
可以解决问题,但PowerShell仍然使用空字符串填充我的参数(使用PowerShell版本5.1.14393.206)。
以下功能说明了问题:
function Test-HowToManageOptionsStringParameters() {
Param(
[Parameter(Mandatory)]
[int] $MandatoryParameter,
[Parameter()]
[AllowNull()]
[string] $OptionalStringParameter = $null
)
if ($null -eq $OptionalStringParameter) {
Write-Host -ForegroundColor Green 'This works as expected';
} else {
Write-Host -ForegroundColor Red 'Damit - Parameter should be NULL';
}
}
更糟糕的是,即使这段代码不起作用(将$null
分配给参数进行测试),我真的不明白为什么这不起作用......
function Test-HowToManageOptionsStringParameters() {
Param(
[Parameter(Mandatory)]
[int] $MandatoryParameter,
[Parameter()]
[AllowNull()]
[string] $OptionalStringParameter = $null
)
$OptionalStringParameter = $null;
if ($null -eq $OptionalStringParameter) {
Write-Host -ForegroundColor Green 'This works as expected';
} else {
Write-Host -ForegroundColor Red 'Damit - Parameter should be NULL';
}
}
答案 0 :(得分:2)
似乎powershell为您的变量分配一个空字符串,如果您将其分配给$null
,如果将其声明为[string]
。
您可以通过省略 [string]
上的$OptionalStringParameter
类型来获取它。另一种方法是在if语句中检查[string]::IsNullOrEmpty($OptionalStringParameter)
。
答案 1 :(得分:0)
将您的代码更改为:
function Test-HowToManageOptionsStringParameters() {
PARAM(
[Parameter(Mandatory)]
[int] $MandatoryParameter,
[Parameter()]
[AllowNull()]
[string] $OptionalStringParameter
)
if(-not $OptionalStringParameter) {
Write-Host -ForegroundColor Green 'This works as expected';
}
else {
Write-Host -ForegroundColor Red 'Damit - Parameter should be NULL';
}
}
使用!
或-not
运算符检查是否为null。如果认为问题在于你是类型的参数 - >你在answer的评论中找到了解释。
希望有所帮助