首页 > 解决方案 > 使用函数参数作为变量和开关

问题描述

也许我看错了。但是,我有一个 PowerShell 函数,我想测试是否存在输入参数,就像开关一样。如果参数存在,只需使用/分配一个默认值。此外,我希望用户能够覆盖默认值并指定自己的值。我可以通过以下条件使其适用于上述一些但不是全部的标准......

Function test {

[CmdletBinding()]
    Param (
        [Parameter(Mandatory=$false)]
        [ValidateRange(1,25)]
        [Int]
        $OptionalNumber = 1
    )

    if($PSBoundParameters.keys -contains "OptionalNumber"){
        Write-Output "The optional number parameter is present"
        Write-Output "The Optional Number is: $OptionalNumber"
    }else{Write-Output "The optional number parameter was not specified"}
}

运行“测试”有效。

运行“Test -OptionalNumber 3”有效。

运行“Test -OptionalNumber”失败

我希望能够使用“-OptionalNumber”并基本上将其用作开关,而不必显式传入默认值 1,因为指定该值会破坏默认值的目的。

我尝试了 [ValidationScript()]、[AllowNull()]、[Nullable[int]] 和其他一些组合的各种组合,但均无济于事。我知道我可以将它分解为两个参数,一个作为开关,另一个作为值......例如 [Switch]$OptionalNumber 和 [Int]$OptionalNumberValue。但这似乎很笨拙。我觉得有更好/更清洁的方法。

编辑: 按照建议,我打开了一个将此功能添加到 PowerShell 的功能请求。 https://github.com/PowerShell/PowerShell/issues/12104

标签: powershellparameters

解决方案


推荐阅读