2017-05-24 4 views
3

に名前によってパイプライン入力を送りますパイプラインを経由して別の関数の中に値が、2番目の関数での入力プロパティが「ID」と命名されていますは、私は「インシデント番号」のプロパティ名を持つオブジェクトを作成する機能を持っている非マッチングプロパティ名

Function Get-Note { 
    Param(
     [Parameter(ValueFromPipeline)] 
     [string]$ID 
    ) 
    Write-Output "The input was $ID" 
} 

スペース(例えば${Incident Number})で変数名を持つことは可能ですが、この後、それが厄介になりコマンドラインでパラメータとして使用します。

出力される、上記で定義されたとおり

[Parameter(ValueFromPipelineByPropertyName)]戻り用い
The input was @{Other Stuff=Blah; Incident Number=INC12345}

が取得-注:入力オブジェクトが コマンドの任意のパラメータのいずれかのコマンドため結合することができないがパイプライン入力を受けないか、入力が で、そのプロパティがパイプライン入力を受け付けるパラメータと一致しません。

FYI - 上記は一例です。実際には、最初の関数によって作成されるオブジェクトのプロパティは、API呼び出しによって決定されます。私はこれらのプロパティの名前をこの関数の一部として変更できますが、私の好みはAPIで定義されているようにそれらのプロパティを保持することです。

答えて

4

私は[Alias()]パラメータ属性を使用してこれを行うことが可能であることを発見:

Function Get-ID { 
    New-Object -TypeName PSObject -Property @{'Incident Number' = 'INC12345'; 'Other Stuff' = 'Blah'} 
} 

Function Get-Note { 
    Param(
     [Parameter(ValueFromPipelineByPropertyName=$true)] 
     [Alias('Incident Number')] 
     [string]$ID 
    ) 
    Write-Output "The input was $ID" 
} 

出力:

PS>は、Get-IDを|ゲットノート

入力はINC12345

関連する問題