Powershell似乎无法应对cmdlet中的大量参数集

时间:2012-12-21 13:31:59

标签: powershell

cmdlet可以拥有的参数集数量是否有限制?我已经制作了一个cmdlet,它有56个开关参数,我希望每个参数都是必需的。由于某种原因,powershell将第(n + 1)个与第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的方式有什么问题;如果我减少参数数量,我不会看到这种行为。任何提示将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

解决方法是将SwitchParameters更改为一个参数,该参数包含包含所有切换值的枚举。

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