0

目前我正在这样做:

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枚举所有参数,或者是否有我错过的关键字或其他技术?

4

1 回答 1

2

使用$PSBoundParameters变量:

New-Object psobject -Property $PSBoundParameters

$PSBoundParameters是一个自动变量,包含一个哈希表,每个命名参数都有一个条目,使用完整的参数名称作为键,参数参数作为值,因此在您的示例中,它已经与您尝试传递的输入 100% 对齐

于 2017-05-22T13:39:11.297 回答