gpt4 book ai didi

PowerShell ValidateSet boolean 参数

转载 作者:行者123 更新时间:2023-12-02 23:22:55 25 4
gpt4 key购买 nike

我正在尝试将 ValidateSet 与 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 是有效的 boolean 类型。

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

我可以将 ValidateSet 更改为 [ValidateSet([bool]0,[bool]1)] 并使其按我的预期运行,但我发现 01 对于 boolean 参数的补全,用户体验比 $true$false 更差。

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

我在代码中实现了一种解决方法,但我想知道如何将 ValidateSet 与 boolean 参数一起使用(如果可能),以便为用户启用制表符补全功能。

最佳答案

加入一些答案,最好的选择将取决于需要,如果参数是 boolean 类型,则可以替换为 type switch 之一,但如果您想指定在代码中或通过样式查看的值;可以按如下方式完成。

function Write-SwitchParam {
[CmdletBinding()]
param (
[Switch] #[Switch] or [System.Management.Automation.SwitchParameter]
$SwitchParam
)

if($SwitchParam)
{
Write-Host "Switch is present. Do Positive Action."
}
else {
Write-Host "Switch isn't present. Do Negative Action."
}
}

function Write-BooleanParam {
[CmdletBinding()]
Param(
[parameter(Position=0, ValueFromPipeline=$true)]
[ValidateNotNullOrEmpty()]
[ValidateSet($true, $false, 0, 1)]
$BoolParam = $true
)

Begin{
}

Process{
$value = [System.Convert]::ToBoolean($BoolParam)
Write-Host $value
}

End{
}
}

Write-Host "TESTS BOOLEAN PARAM" -ForegroundColor Magenta
Write-BooleanParam -BoolParam $true
Write-BooleanParam -BoolParam $false
Write-Host

Write-BooleanParam $false
Write-BooleanParam $true
Write-Host

Write-BooleanParam True
Write-BooleanParam False
Write-Host

Write-BooleanParam 0
Write-BooleanParam 1
Write-Host

Write-BooleanParam
Write-Host

$true, $false, "True", "False", 1, 0 | Write-BooleanParam
Write-Host

Write-Host "TESTS SWITCH PARAM" -ForegroundColor Magenta
Write-SwitchParam
Write-SwitchParam -SwitchParam

Console Output

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com