2016-04-12 8 views
3

PowerShell関数で繰り返し可能な(うまくいけばリンクされた)パラメータを作成することが可能かどうか(もしそうならば)これは仕事にこのを探しています方法です。その後、Powershell関数の反復可能なパラメータ(好ましくはリンクされたパラメータセット)

function foo() 
{ 
    [CmdletBinding()] 
    Params(
     [Parameter(Mandatory=$true,ParameterSetName="Default")] 
     [Parameter(Mandatory=$true,ParameterSetName="Set1")] 
     [Parameter(Mandatory=$true,ParameterSetName="Set2")] 
     [string]$SomeParam1, 
     [Parameter(Mandatory=$true,ParameterSetName="Set1")] 
     [Parameter(Mandatory=$true,ParameterSetName="Set2")] 
     *some magic here, likely, to make this repeatable* 
     [string]$SomeRepeatableParam, 
     [Parameter(Mandatory=$true,ParameterSetName="Set1")] 
     [string]$SomeLinkedParam1, 
     [Parameter(Mandatory=$true,ParameterSetName="Set2")] 
     [string]$SomeLinkedParam2 
    ) 
    Begin 
    { 
     *some code here* 
    } 
    Process 
    { 
     foreach ($val in $SomeRepeateableParam) 
     { 
      *some code here using param and its linked param* 
     } 
    } 
    End 
    { 
     *some code here* 
    } 
} 

そしてそうのように、この関数を呼び出す:単一の呼び出しで何回も繰り返し可能なパラメータを使用することができるという、

foo -SomeParam "MyParam" -SomeRepeatableParam "MyProperty1" -SomeLinkedParam1 "Tall" -SomeRepeatableParam "MyProperty2" -SomeLinkedParam2 "Wide" 

など私はそれが気に入っているように。

これはできますか?そしてもしそうなら、どのように?

お時間をいただきありがとうございます。

EDIT:わかりやすくするために、配列パラメーターを意味するのではなく、リンクされたパラメーターセットをrepeatableパラメーターの各インスタンスに一致させることができる反復可能なパラメーターです。

+0

私はもっと混乱していると思います。ユーザーが同じパラメーターを複数回(ペア)指定できるようにしますか?それは配列のようなオブジェクトよりもどのように混同しにくいでしょうか?少なくとも一意でない名前のパラメータは使用できません。あなたがあなたのユーザーを心配しているなら、それが何のためのヘルプ・セクションを作成してみませんか?ペアは値が紛失しないようにするハッシュテーブル配列のように聞こえるだけです。 – Matt

+0

@Mattこれは、複数の関数呼び出しを1つに集約した方がよく、これを使用する人々にとっては理想的です。問題の関数を問題なく更新するために何回も呼び出すように記述することができ、関与する人はそれを処理できますが、リンクされた配列の仕様やカスタムオブジェクトのプロパティについて説明することで許容範囲が広がる可能性があります。彼らはダムではなく、狭いところに集中しているので、私は調整しています。私はそれが可能ではない可能性があり、私は複数の呼び出しやオブジェクト配列を使用するフォールバックを持って、私はちょうどこれが可能かどうかを見たいと思う。 – Leonastas

答えて

2

PowerShellはアレイパラメータ値としてをサポートしているので、繰り返しパラメーターする必要は一般的に存在しません。

は、パラメータ名でなければなりませんので、パラメータの同じパラメータ名のインスタンスを繰り返して、予定の道をVALUES(リンク)ユニーク(とも、彼らはdidnのペアリングを強制するいかなる構文方法はありませんユニークでなければならず、それだけでは希望のペアを実施しません)。

ただし、並列配列パラメータを使用し、機能内部彼らの対称性を施行、例えばすることができます

function foo 
{ 
    [CmdletBinding()] 
    Param(
     [string] $SomeParam1, 
     [string[]] $SomeRepeatableParam, 
     [string[]] $SomeLinkedParam 
    ) 
    if ($SomeRepeatableParam.Count -ne $SomeLinkedParam.Count) { 
     Throw "Please specify paired values for -SomeRepeatableParam and -SomeLinkedParam" 
    } 
    for ($i = 0; $i -lt $SomeRepeatableParam.Count; ++$i) { 
     $SomeRepeatableParam[$i] + ': ' + $SomeLinkedParam[$i] 
    } 
} 

次のようにあなたはそれを呼び出します(配列を分離するために,の点に注意してください。要素):

foo -SomeParam1 "MyParam" ` 
    -SomeRepeatableParam "MyProperty1", "MyProperty2" ` 
    -SomeLinkedParam  "Tall",  "Wide" 
関連する問題