cmdlet可以具有的参数集数量是否受到限制?我制作了一个具有56个开关参数的cmdlet,我希望每个cmdlet在其自己的参数集中都是必需的。由于某种原因,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的方式出了什么问题;如果减少参数集的数量,我看不到这种现象。任何提示将不胜感激。

最佳答案

每个cmdlet似乎限制为32个ParameterSet。查看是否可以通过创建65个参数集对其进行测试,以及-Param65是否在集合1中(带有-Param1和-Param33)。

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

Get-Foo -ParamD <EnumParams1To56> [-ParamA <string>] [-ParamB <string>] [-ParamC <string>]

07-24 09:38
查看更多