我正在尝试将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
变量分别扩展为True
和False
,但这会导致参数验证失败,因为只有$true
,$false
,1
和0
是有效的 bool(boolean) 类型。我尝试将ValidateSet更改为
[ValidateSet('$false','$true')]
,并且制表符完成按预期工作,但是参数验证仍然失败,因为参数需要字符串'$false'
和'$true'
。我可以将ValidateSet更改为
[ValidateSet([bool]0,[bool]1)]
并使其具有预期的功能,但是与0
和1
相比,我发现$true
和$false
的用户体验较差,无法完成 bool(boolean) 参数。选择
True
时,函数的预期输出应为$true
;选择False
时,应为$false
。我已经在代码中实现了一种解决方法,但是我想知道如何在可能的情况下使用带有 bool(boolean) 参数的ValidateSet来允许用户使用制表符补全。
最佳答案
您可以将ValidateSet
用于自动完成,而无需指定输入变量类型。不过,在这种情况下,您不能使用0
和1
作为输入:
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/