4

コマンドレットで使用できるパラメーター セットの数に制限はありますか? 56 個のスイッチ パラメーターを持つコマンドレットを作成しましたが、それぞれを独自のパラメーター セットで必須にしたいと考えています。何らかの理由で、powershell は (n+1) 番目を 1 番目、(n+2) 番目を 2 番目などにグループ化し、最終的に n 個以下のパラメーター セットになります。正しくカウントした場合、n は 32 でした。これが私のコマンドレットの外観です。

[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>]

コマンドレットを作成した方法の何が問題なのかわかりません。パラメータセットの数を減らすと、この動作は見られません。ヒントをいただければ幸いです。

4

1 に答える 1

2

コマンドレットごとに 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 に答える