2016-07-12 5 views
4

として、私は2つのパラメータがあり、単純な機能を持って示します。私はそれらをポジションとして言及しなかったが、それでもなおその機能のヘルプをチェックすると、自動的にそれらのポジションを割り当てている。どのように名前付きパラメータのみを指定することができますか(位置によって値を受け入れないでください)?名前付きパラメータは定位置

Function Test-Params 
{ 
    Param 
    (
     [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)] 
     $Param1, 

     [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)] 
     $Param2 
    ) 

    Write-Host "$Param1 $Param2" 
} 

私はこの関数のヘルプを確認するか、それが動作します(しかし、それは動作しません)パラメータの位置の値を提供することで機能を実行しよう:

Test-Params test1 test2 
test1 test2 

ヘルプ出力:

help Test-Params -Full 

NAME 
    Test-Params 

SYNTAX 
    Test-Params [-Param1] <Object> [[-Param2] <Object>] [<CommonParameters>] 


PARAMETERS 
    -Param1 <Object> 

     Required?     true 
     Position?     0 
     Accept pipeline input?  true (ByValue, ByPropertyName) 
     Parameter set name   (All) 
     Aliases      None 
     Dynamic?      false 

    -Param2 <Object> 

     Required?     false 
     Position?     1 
     Accept pipeline input?  true (ByValue, ByPropertyName) 
     Parameter set name   (All) 
     Aliases      None 
     Dynamic?      false 

答えて

4

はデフォルトでは、すべての関数のパラメータが位置しています。 Windows PowerShell は、関数内でパラメーターが宣言されている順番に、パラメーターに位置番号を割り当てます。この機能を無効にするには、$ Falseに CmdletBindingのPositionalBinding引数の値 属性を設定します。

Source.

だからあなたの関数は次のようになります。

Function Test-Params 
{ 
    [CmdletBinding(PositionalBinding=$false)] 
    Param 
    (
     [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)] 
     $Param1, 

     [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)] 
     $Param2 
    ) 

    Write-Host "$Param1 $Param2" 
} 
+0

エクセレント!!入力いただきありがとうございます。できます。 – SavindraSingh

+1

お役立ち情報'PositionalBinding = $ false'を指定して、パラメータ指定の位置を明示的に指定するには、パラメータ固有の 'Position = '属性(例えば、[Parameter(Mandatory、Position = 0)]を使用します。 – mklement0

関連する問題