如何轻松地从函数参数到 return 结果到管道创建 PSObject?
How to easily create PSObject from function arguments to return result to pipeline?
目前我是这样做的:
function Invoke-Service
{
Param(
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[int] $Id,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[string] $Name,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[int] $Age
)
DoSomeWork |
New-Object PSObject -Property @{ Id = $Id; Name = $Name; Age = $Age }
}
这个函数可以直接获取它的参数,也可以从Import-Csv
输出,或者select
输出。
但很多时候我想用 PSObject
:
的所有力量继续处理管道
Import-Csv -Path "data.csv" |
Invoke-Service |
... #
我的问题是:我是否需要调用 New-Object
枚举所有参数,或者是否有我遗漏的关键字或其他技术?
使用$PSBoundParameters
变量:
New-Object psobject -Property $PSBoundParameters
$PSBoundParameters
是一个自动变量,它包含一个哈希表,每个命名参数都有一个条目,使用完整的参数名称作为键,使用参数参数作为值,所以在你的例子中它已经 100% 对齐使用您要传递的输入
目前我是这样做的:
function Invoke-Service
{
Param(
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[int] $Id,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[string] $Name,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[int] $Age
)
DoSomeWork |
New-Object PSObject -Property @{ Id = $Id; Name = $Name; Age = $Age }
}
这个函数可以直接获取它的参数,也可以从Import-Csv
输出,或者select
输出。
但很多时候我想用 PSObject
:
Import-Csv -Path "data.csv" |
Invoke-Service |
... #
我的问题是:我是否需要调用 New-Object
枚举所有参数,或者是否有我遗漏的关键字或其他技术?
使用$PSBoundParameters
变量:
New-Object psobject -Property $PSBoundParameters
$PSBoundParameters
是一个自动变量,它包含一个哈希表,每个命名参数都有一个条目,使用完整的参数名称作为键,使用参数参数作为值,所以在你的例子中它已经 100% 对齐使用您要传递的输入