0

そのため、スイッチ パラメーターを使用するスクリプトを作成しようとしていますが、それらに合わせて引数も必要です。たとえば、

Function Foo ($X, $Z, [switch]$Y, $Yarg, [switch]$K, $Karg){
  if($Y){
    $Yup = $Yarg
  }

  if($K){
    $Y = $Karg
  }Else{$Y = 42}

  $X + $Z / $Yup

}

基本的に、スイッチが存在するかどうかを確認したいのですが、存在する場合は $Yarg 変数を使用する必要があります。現在、これを行うと、スイッチはブール値にしかできないというエラーが表示されます。その後、残りのコードは失敗します。何か案は?

4

2 に答える 2

2

私の仮定では、Y と K は相互に排他的なパラメーター セットであり、X と Z は両方に共通であり、必須です。-Y も -K も指定されていない場合、デフォルトは -Y になります。わかりやすくするために、ここでは別のパラメーター宣言構文を使用しています。

function Foo(
    [cmdletbinding(defaultparametersetname="setY")]
    param(
        [parameter(mandatory=$true)]
        $X,

        [parameter(mandatory=$true)]
        $Y

        [parameter(parametersetname="setY")]
        [switch]$Y,

        [parameter(parametersetname="setY", mandatory=$true)]
        $YArg,

        [parameter(parametersetname="setK")]
        [switch]$K,

        [parameter(parametersetname="setK", mandatory=$true)]
        $KArg,
    )
    # do work
)

構文が明らかであることを願っています。

于 2012-12-04T14:14:35.237 に答える
0

だから私がやろうとしているのは、そのように変数を入力する関数を作ることです

foo x z -y yarg -k karg

主に-y yargタイプの変数エントリが必要です。

これを行うには、スイッチを使用する必要があると考えていましたが、実際には必須ではないパラメーターが必要でした。

   function Foo(
    [cmdletbinding(defaultparametersetname="setY")]
    param(
        [parameter(mandatory=$true, position=0)]
        $X,

        [parameter(mandatory=$true, position=1)]
        $Z

        [parameter(mandatory=$false)]
        $Y,

        [parameter(mandatory=$false)]
        $K
    )
    # do work
)

それは簡単に思えましたが、うまくいきました!

于 2012-12-04T17:28:12.100 に答える