我正在尝试将ValidateSet与 bool(boolean) 参数一起使用,但是无法使其按预期运行。

复制该问题的示例:

function Set-Boolean
{
    [CmdletBinding()]
    [OutputType([Bool])]
    Param
    (
        [Parameter(Mandatory=$true, Position=0)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet($false,$true)]
        [Bool] $Bool
    )

    Process
    {
        $Bool
    }
}

在运行时,PowerShell将在完成制表符时将$true$false变量分别扩展为TrueFalse,但这会导致参数验证失败,因为只有$true$false10是有效的 bool(boolean) 类型。

我尝试将ValidateSet更改为[ValidateSet('$false','$true')],并且制表符完成按预期工作,但是参数验证仍然失败,因为参数需要字符串'$false''$true'

我可以将ValidateSet更改为[ValidateSet([bool]0,[bool]1)]并使其具有预期的功能,但是与01相比,我发现$true$false的用户体验较差,无法完成 bool(boolean) 参数。

选择True时,函数的预期输出应为$true;选择False时,应为$false

我已经在代码中实现了一种解决方法,但是我想知道如何在可能的情况下使用带有 bool(boolean) 参数的ValidateSet来允许用户使用制表符补全。

最佳答案

您可以将ValidateSet用于自动完成,而无需指定输入变量类型。不过,在这种情况下,您不能使用01作为输入:

function Set-Boolean
{
    [CmdletBinding()]
    [OutputType([Bool])]
    Param
    (
        [Parameter(Mandatory=$true, Position=0)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet($false,$true)]
        $Bool
    )

    Process
    {
        [System.Convert]::ToBoolean($Bool)
    }
}

关于powershell - boolean 参数上的PowerShell ValidateSet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45047729/

10-12 05:07