Это ограничение типа bool. Когда вы строго вводите параметр, он может принимать только $true
, $false
, 0
и 1
. Чтобы достичь желаемого, вы можете использовать атрибут [ValidateSet]
:
[CmdletBinding()]
param(
[Parameter(Position = 0, Mandatory)]
[ValidateSet($null, $true, $false)]
[object] $ThisValue
)
Как примечание, раньше была ошибка с powershell (она все еще может присутствовать), когда сравнение $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