按名称将管道输入发送到不匹配的属性名称

时间:2017-05-24 11:19:46

标签: powershell

我有一个函数可以创建一个属性名为'Incident Number'的对象:

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

我想通过管道将'Incident Number'值发送到另一个函数,但在第二个函数中,input属性名为'ID':

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

虽然可以使用带空格的变量名称(例如${Incident Number}),但这会使得在命令行中用作参数变得笨拙。

如上所述,输出为:

The input was @{Other Stuff=Blah; Incident Number=INC12345}

使用[Parameter(ValueFromPipelineByPropertyName)]返回:

  

Get-Note:输入对象不能绑定到任何参数   命令,因为该命令不接受管道输入或   输入及其属性与任何参数都不匹配   拿管道输入。

仅供参考 - 以上是一个例子。实际上,由第一个函数创建的对象的属性由API调用确定。虽然我可以将这些属性重命名为此函数的一部分,但我希望将它们保持为API定义。

1 个答案:

答案 0 :(得分: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 | Get-Note

     

输入为INC12345