4

对 cmdlet 可以具有的参数集数量是否有任何限制?我制作了一个 cmdlet,它有 56 个开关参数,我希望每个参数在其自己的参数集中都是强制性的。出于某种原因,powershell 将第 (n+1) 个与第一个分组,将第 (n+2) 个与第二个分组,等等,最终不超过 n 个参数集;如果我计算正确,n 是 32。这就是我的 cmdlet 的样子:

[Cmdlet(VerbsCommon.Get, "Foo")]
public class GetFoo : PSCmdlet
{
    [Parameter(ValueFromPipeline = true)]
    public string ParamA {get;set;}

    [Parameter(ValueFromPipelineByPropertyName = true)]
    public string ParamB {get;set;}

    [Parameter]
    public string ParamC {get;set;}

    [Parameter(ParameterSetName = "Group1", Mandatory = true)]
    public SwitchParameter Param1 {get;set;}

    [Parameter(ParameterSetName = "Group2", Mandatory = true)]
    public SwitchParameter Param2 {get;set;}
    . . .

    [Parameter(ParameterSetName = "Group56", Mandatory = true)]
    public SwitchParameter Param56 {get;set;}
}

预期的:

PS> Get-Help Get-Foo
  Get-Foo -Param1 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]
  Get-Foo -Param2 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]
  . . .
  Get-Foo -Param56 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]

实际的:

PS> Get-Help Get-Foo
  Get-Foo -Param1 -Param33 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]
  Get-Foo -Param2 -Param34 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]
  . . .
  Get-Foo -Param24 -Param56 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]
  Get-Foo -Param25 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]
  . . .
  Get-Foo -Param32 [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]

我很头疼,看不出我构建 cmdlet 的方式有什么问题;如果我减少参数集的数量,我看不到这种行为。任何提示将不胜感激。

4

1 回答 1

2

看起来每个 cmdlet 有 32 个 ParameterSet 的限制。看看你是否可以通过创建 65 个参数集来测试它,看看 -Param65 是否在集合 1 中(使用 -Param1 和 -Param33)。

一种解决方法是将您的 SwitchParameters 更改为一个参数,该参数采用包含所有开关值的 Enum。

Get-Foo -ParamD <EnumParams1To56> [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]
于 2013-01-18T18:04:36.903 回答