PowerShell 布尔值接受所有数字
PowerShell Boolean accepts all numbers
我想我在这里遗漏了一些明显的东西。在我的理解中,Boolean
只能是 0
、$False
、1
或 $True
。但是当我尝试其他整数时,它们也被接受为 $True
。
当使用其他整数时 0
或 1
函数应该抛出一个错误,指出它不是 Boolean
。还是应该通过为这 4 个不同的输入选项添加 ValidateSet
错误处理来解决这个问题?
示例:
Function Test-Bar {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=0)]
[Bool]$Var
)
Write-Host "Yes, you entered a valid boolean: $Var" -ForegroundColor Yellow
}
[INT]$Number = '0'
Test-Bar -Var $Number
[INT]$Number = '1'
Test-Bar -Var $Number
[INT]$Number = '10'
Test-Bar -Var $Number # Incorrect, ten is not a boolean
[INT]$Number = '22'
Test-Bar -Var $Number # Incorrect, twenty two is not a boolean
感谢您的帮助。
我猜 [bool]
类型隐式地将任何非 $null
、$false
、0
或空字符串转换为 $true
> [bool]$true
True
> [bool]'foo'
True
> [bool]$false
False
> [bool]''
False
> [bool]$null
False
我认为在你的情况下,在你的 cmdletbinding
中使用 SwitchParameter
是合适的:
Function Test-Bar {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=0)]
[Switch]$Var
)
Write-Host "Yes, you entered a valid boolean: $Var" -ForegroundColor Yellow
}
并像这样打电话:
> Test-Bar -var
Yes, you entered a valid boolean: True
> Test-Bar -var:$false
Yes, you entered a valid boolean: False
您可能还想查看答案 on this question,其中讨论了 test/convert 布尔值的方法(如果确实需要的话)。
我想我在这里遗漏了一些明显的东西。在我的理解中,Boolean
只能是 0
、$False
、1
或 $True
。但是当我尝试其他整数时,它们也被接受为 $True
。
当使用其他整数时 0
或 1
函数应该抛出一个错误,指出它不是 Boolean
。还是应该通过为这 4 个不同的输入选项添加 ValidateSet
错误处理来解决这个问题?
示例:
Function Test-Bar {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=0)]
[Bool]$Var
)
Write-Host "Yes, you entered a valid boolean: $Var" -ForegroundColor Yellow
}
[INT]$Number = '0'
Test-Bar -Var $Number
[INT]$Number = '1'
Test-Bar -Var $Number
[INT]$Number = '10'
Test-Bar -Var $Number # Incorrect, ten is not a boolean
[INT]$Number = '22'
Test-Bar -Var $Number # Incorrect, twenty two is not a boolean
感谢您的帮助。
我猜 [bool]
类型隐式地将任何非 $null
、$false
、0
或空字符串转换为 $true
> [bool]$true
True
> [bool]'foo'
True
> [bool]$false
False
> [bool]''
False
> [bool]$null
False
我认为在你的情况下,在你的 cmdletbinding
中使用 SwitchParameter
是合适的:
Function Test-Bar {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=0)]
[Switch]$Var
)
Write-Host "Yes, you entered a valid boolean: $Var" -ForegroundColor Yellow
}
并像这样打电话:
> Test-Bar -var
Yes, you entered a valid boolean: True
> Test-Bar -var:$false
Yes, you entered a valid boolean: False
您可能还想查看答案 on this question,其中讨论了 test/convert 布尔值的方法(如果确实需要的话)。