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

Is there some way to define a parameterless powershell parameter set?

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

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

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

目前,我对此用例的最佳近似是定义其中一个参数集没有强制参数,但是当空字符串或空值通过管道输入时这些参数集会失败,我希望情况并非如此.

这可能吗?

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

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"
}