有没有办法定义无参数PowerShell参数集?

问题描述 投票:2回答:1

我有一些相当复杂的函数,我正在为一个库模块编写,有很多不同的方法可以调用它。但是,实际上可以默认所有这些,但是当我尝试在没有参数的情况下调用我的函数时,调用失败,因为无法确定参数集。

我想定义一个不包含任何参数的参数集,这样没有参数的调用成功。这很难做到,因为ParameterSetName虽然是Parameter属性的属性,但是不可能没有任何属性。

我试验了放置在param块上的CmdletBinding属性的DefaultParameterSet属性,但似乎没有任何工作。似乎在那里定义的参数集名称必须存在,以便Powershell默认为它。

目前我对这个用例的最佳近似是定义其中一个参数集没有强制性参数,但是当空字符串或空值被管道输入时,这些参数集会失败,我希望不是这样。

这可能吗?

powershell parameter-sets
1个回答
4
投票

当然可以。只需指定一个未使用的默认参数集名称:

function Foo {
    [CmdletBinding(DefaultParameterSetName='x')]
    Param(
        [Parameter(Mandatory=$true, ParameterSetName='y')]$a,
        [Parameter(Mandatory=$false, ParameterSetName='y')]$b,
        [Parameter(Mandatory=$true, ParameterSetName='z')]$c,
        [Parameter(Mandatory=$false)]$d
    )

    "`$a: $a"
    "`$b: $b"
    "`$c: $c"
    "`$d: $d"
}
© www.soinside.com 2019 - 2024. All rights reserved.