有什么方法可以定义无参数的Powershell参数集?

bwe*_*rks 3 powershell parameter-sets

我为库模块编写了一些相当复杂的函数,可以使用许多不同的方法来调用它。但是,实际上可以将它们全部默认设置,但是当我尝试不带参数调用函数时,由于无法确定参数集,因此调用失败。

我想定义一个不包含任何参数的参数集,以使没有参数的调用成功。由于ParameterSetName是Parameter属性的属性,因此很难做到这一点,并且不可能一无所获。

我尝试了放在param块上的CmdletBinding属性的DefaultParameterSet属性,但是似乎没有任何效果。似乎那里定义的参数集名称实际上必须存在,以便Powershell默认使用它。

目前,我对该用例的最佳近似方法是将其中一个参数集定义为没有强制性参数,但是当输入空字符串或null时,这些参数将失败,我希望情况并非如此。

这可能吗?

Ans*_*ers 5

当然可以 只需指定一个默认的参数集名称,否则该名称将不被使用:

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"
}
Run Code Online (Sandbox Code Playgroud)