这是bool类型的限制。当您严格键入参数时,它只能
$true
,请
$false
我是说,
0
,和
1
是的。为了达到你想要的,你可以使用
[ValidateSet]
属性:
[CmdletBinding()]
param(
[Parameter(Position = 0, Mandatory)]
[ValidateSet($null, $true, $false)]
[object] $ThisValue
)
顺便说一句,powershell曾经有一个bug(可能仍然存在),其中比较
$null
右边的语句将导致不返回任何内容,导致语句中出现逻辑错误,因此最好在左边进行比较:
if ($null -eq $ThisValue) {
在测试了您的示例之后,我无法复制您的问题,但是:
function Test-Nullable {
[CmdletBinding()]
param(
[nullable[bool]] $Value
)
if ($null -eq $Value) {
'Yes'
} else {
$Value
}
}
以及数组格式:
function Test-Nullable {
[CmdletBinding()]
param(
[nullable[bool][]] $Value
)
foreach ($bool in $Value) {
if ($null -eq $bool) {
'Yes'
} else {
$bool
}
}
}
Test-Nullable 5, 3, $null, $true, $false, 0
True
True
Yes
True
False
False