2015-11-13 2 views
6

私はこのようになります機能を持っている:powershell関数でパラメータをパススルーするにはどうしたらいいですか?

function global:Test-Multi { 
    Param([string]$Suite) 
    & perl -S "$Suite\runall.pl" -procs:$env:NUMBER_OF_PROCESSORS 
} 

私はテスト・マルチへのより多くのパラメータを指定して、基礎となるレガシーperlスクリプトに直接渡すようにユーザーに許可したいと思います。

powershellは、この目的で追加の可変的な動作を可能にするメカニズムを提供していますか?

答えて

6

あなたのコメントを見て、オプション3はあなたの望むものとまったく同じように聞こえます。


あなたは、いくつかのオプションがあります。

  1. 使用$args(クレジットhjpotter92's answerへの)

  2. 明示的に追加し、あなたの関数でそれらのすべてを解析し、その後、あなたの追加パラメータを定義しますperlコール。

  3. ValueFromRemainingArguments argumentのパラメータを1つ使用します。

    function global:Test-Multi { 
        Param(
         [string]$Suite, 
         [parameter(ValueFromRemainingArguments = $true)] 
         [string[]]$Passthrough 
         ) 
        & perl -S "$Suite\runall.pl" -procs:$env:NUMBER_OF_PROCESSORS @Passthrough 
    } 
    
+0

私はあなたの "ValueFromRemainingArguments"リンクが正しい場所に行くとは思わない... –

+1

@BillyONealありがとう、更新しました。これは長文ドキュメントなので、 'ValueFromRemainingArguments'の' CTRL + F'が推奨されています。 – briantist

+2

コード例を追加しました。ありがとう! –

1

実現したいことについてはわかりませんが、関数に渡された引数は、関数内で使用可能な変数$argsでアクセス可能です。

+0

しかし、$ argsが同様に '-Suite' とその設定が含まれます。私は関数を処理していない引数を転送したいです。 –

+0

@BillyONeal '$ args'配列をフィルタリングし、' -Suite'パラメータを削除することができます。 – hjpotter92

+0

確かに、私はそれを行う方法を考えることができますが、PSがこれを宣言する正式な方法を既に持っていたら、私はそれを使いたいと思っていました。 –

関連する問題