【问题标题】:How to easily create PSObject from function arguments to return result to pipeline?如何轻松地从函数参数创建 PSObject 以将结果返回到管道?
【发布时间】:2017-10-22 04:49:36
【问题描述】:

目前我正在这样做:

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

【问题讨论】:

    标签: powershell parameter-passing pipeline psobject


    【解决方案1】:

    使用$PSBoundParameters 变量:

    New-Object psobject -Property $PSBoundParameters
    

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

    【讨论】:

    • 不仅适用于管道中的参数(如果有人怀疑)。太好了!
    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2015-03-10
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多