5

複数の可能なパラメーターを持つカスタム PowerShell 関数を作成しています。

function foo {
    param(
        [Parameter(Mandatory=$true)]
        [string]$param1_A,
        [Parameter(Mandatory=$true)]
        [int]$param1_B,

        [Parameter(Mandatory=$true)]
        [string]$param2_A,
        [Parameter(Mandatory=$true)]
        [int]$param2_B
    )

}

基本的に、相互に排他的なパラメーターのセットが 2 つあります。$param1_Aまたはのいずれかを指定できます$param1_Bが、両方を指定することはできません。$param2_Aまたはのいずれかを指定することもできます$param2_Bが、両方を指定することはできません。

要約すると、可能な呼び出しの表は次のとおりです。

  • foo -param1_A -param2_A
  • foo -param1_B -param2_A
  • foo -param1_A -param2_B
  • foo -param1_B -param2_B

いずれの場合も、パラメータの少なくとも 1 つが必須です。

この要件を適用するためにパラメーターを宣言するにはどうすればよいですか?

さまざまなパラメーター セットを使用しようとしましたが、成功しませんでした。少なくとも 1 つのパラメーターの概念を説明する方法が見つからなかったからです。

それが役立つ場合は、 と に変換できるユーティリティ関数があり$param1_Aます。$param1_B$param2_A$param2_B

4

4 に答える 4

0

スティーブ B の答えは私が探していたものでしたが、コード例 (param1/2 A/B/C/D) の抽象的な性質のため、実装しようとすると混乱しました。概念をある程度理解したら、変数とパラメーター セットに意味のある名前を付けることで、何が起こっているのかを理解するのに本当に役立ちました。そのため、他の人に役立つ場合に備えて、より具体的な例を共有したいと思いました。

食事を注文したいとします。飲み物はペプシかコーラを選べます(相互に排他的な選択#1)。メインディッシュはハンバーガーとフライドポテトまたはサラダを選択できます(相互に排他的な選択#2)。この目的のために、与えられた値は食品の整数サイズになると言いますが、それは関係ありません。

param (
    [Parameter(Position=0,Mandatory=$true,ParameterSetName="Pepsi-BurgerFries")]
    [Parameter(Position=0,Mandatory=$true,ParameterSetName="Pepsi-Salad")]
    [int]$Pepsi,

    [Parameter(Position=0,Mandatory=$true,ParameterSetName="Coke-BurgerFries")]
    [Parameter(Position=0,Mandatory=$true,ParameterSetName="Coke-Salad")]
    [int]$Coke,

    [Parameter(Mandatory=$true,ParameterSetName="Pepsi-BurgerFries")]
    [Parameter(Mandatory=$true,ParameterSetName="Coke-BurgerFries")]
    [int]$Burger,

    [Parameter(Mandatory=$true,ParameterSetName="Pepsi-BurgerFries")]
    [Parameter(Mandatory=$true,ParameterSetName="Coke-BurgerFries")]
    [int]$Fries,

    [Parameter(Mandatory=$true,ParameterSetName="Pepsi-Salad")]
    [Parameter(Mandatory=$true,ParameterSetName="Coke-Salad")]
    [int]$Salad
)
于 2020-03-06T18:08:55.657 に答える