如何使用PowerShell ValueFromPipelineByPropertyName传递多个参数

问题描述 投票:0回答:1

我具有以下简单的PowerShell功能:

function ValueFromPipelineTest
{
    param
    (
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [string] $Param1,

        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string] $Param2
    )

    Process
    {
        Write-Output "Param1: $Param1"
        Write-Output "Param2: $Param2"
    }
}

并且我这样调用管道值:

'Hello' | ValueFromPipelineTest
@{ Param1 = 'Hello'; Param2 = 'there' } | ValueFromPipelineTest

第一行按预期工作,产生输出:

Param1:您好

Param2:

但是第二行产生输出:

Param1:System.Collections.Hashtable

Param2:

我实际上是想让第二行产生输出:

Param1:您好

Param2:在那里

我认为这是可能的,但是我只是想念一些东西。关于如何实现我的追求有任何想法吗?预先感谢!

powershell parameter-passing cmdlet
1个回答
0
投票
$Params = @{ 'Param1' = “Hello” 'Param2' = “There” } ValueFromPipelineTest @Params

或者,尝试以下方法。

$Params = @{
    Param1 = “Hello”
    Param2 = “There”
}


function ValueFromPipelineTest
{
    param
    (
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [hashtable]$Param
    )

    Process
    {
        Write-Output "Param1: $($Param["Param1"])"
        Write-Output "Param2: $($Param["Param2"])"
    }
}

$Params | ValueFromPipelineTest
© www.soinside.com 2019 - 2024. All rights reserved.