我有一个函数可以创建一个属性名为'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定义。
答案 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