2016-05-05 5 views
-1

私は私が持っているしたい機能を持っているが、宣言の最初の出発点である(基本的に他のすべての関数に渡さ)PowerShellのパラメータセットと

をファイル名を必要とし、出力文字列と値の配列(オプション)

func { 
    [CmdletBinding()] 

    Param (

    [Parameter(Mandatory=$true, ParameterSetName="Default", Position=1)] 
    [Parameter(Mandatory=$true, ParameterSetName="Variable", Position=1)] 
    [ValidateNotNullOrEmpty()] 
    [String]$FileName, 

    [Parameter(Mandatory=$true, ParameterSetName="Default", Position=2)] 
    [Parameter(Mandatory=$true, ParameterSetName="Variable", Position=2)] 
    [String]$Output, 

    [Parameter(Mandatory=$false, ParameterSetName="Default", Position=3)] 
    [Parameter(Mandatory=$true, ParameterSetName="Variable", ValueFromRemainingArguments=$true)] 
    [string[]]$Variables 

    ) 
} 

しかし、私は意図したとおりに動作する機能を得ることができません。関数を呼び出すと、次のエラーが発生します。

func: Parameter set cannot be resolved using the specified named parameters. 
At S:\PS\Home\Library\PSStdLib\PSStdLib.psm1:595 char:9 
+   func"$psExecutionLog" "{0,-19} {1,-35} {2,-25} {3,-25} { ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [func], ParameterBindingException 
    + FullyQualifiedErrorId : AmbiguousParameterSet,func 

私は何時間もこれを見つめています。私が間違っていることを理解しようとしています。私はそれを見ることができません。

+1

どのようにメソッドを呼び出しますか?なぜパラメータのプロパティを2回定義するのですか? –

+0

答えはうまくいきましたか? –

答えて

1

PowerShellは、使用するParameterSetによって混乱しています。

  • 機能が無効です。 Missing functionキーワード
  • パラメータセットには、1つのオプションパラメータを持つ必要はありません。
  • ValueFromRemainingArgumentsを必須とする必要はありません(パラメータ自体はオプションです)。引数があるか、パラメータが明示的に呼び出されているか、値がありません。

私はパラメータセットを無視してこれを行うだけです。

function func { 
    [CmdletBinding()] 
    Param (
     [Parameter(Mandatory=$true, Position=1)] 
     [ValidateNotNullOrEmpty()] 
     [String]$FileName, 

     [Parameter(Mandatory=$true, Position=2)] 
     [String]$Output, 

     [Parameter(Position=3, ValueFromRemainingArguments=$true)] 
     [string[]]$Variables 

    ) 
} 

ValueFromRemainingArgumentsは少し混乱させることに注意してください。 -Variablesにパラメータを使用すると、配列要素はカンマ,で区切られます。引数を取るためにそれを使用すると、要素は空白で区切られます。両方を同時に使用することはできません(明示的にパラメータとキャッチ引数を使用する)。

#No parameter or arguments 
func -FileName "file" -Output "out" 

#Parameter 
func -FileName "file" -Output "out" -Variables "hello","world" 

#ValueFromRemainingArguments 
func -FileName "file" -Output "out" "hello" "world" 

#ERROR: Can't use both parameter and ValueFromRemainingArguments at the same time 
func -FileName "file" -Output "out" -Variables "hello","world" "foo" 
関連する問題