PowerShell Boolean接受所有数字

时间:2015-02-11 13:45:41

标签: powershell boolean

我想我在这里遗漏了一些明显的东西。据我了解,Boolean只能是0$False1$True。但是当我尝试其他整数时,它们也被接受为$True

当使用其他整数,然后01时,该函数会抛出错误,表示它不是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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我想[bool]类型隐式地将任何不是$null$false0或空字符串的内容投射为$true

> [bool]$true
True
> [bool]'foo'
True
> [bool]$false
False
> [bool]''
False
> [bool]$null
False

我认为在您的情况下,使用SwitchParameter中的cmdletbinding是合适的:

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,其中讨论了如果您真的需要测试/转换为布尔值的方法。