powershell 通过管道向函数传递多个参数

dw1jzc5e  于 2023-01-17  发布在  Shell
关注(0)|答案(2)|浏览(161)

我在通过管道向函数传递两个参数时遇到了问题。

function Test{
[cmdletbinding()]
param(
[parameter(ValueFromPipeline=$true, Mandatory=$true,Position=0)]
[string]$jeden,
[parameter(ValueFromPipeline=$true, Mandatory=$true,Position=1)]
[string]$dwa
)
Process{write-host "$jeden PLUS $dwa"}
}

"one", "two"|Test

我期待的结果是

one PLUS two

但我得到的是

one PLUS one
two PLUS two

我显然做错了什么,因为两个参数都用了两次。请指示。

9w11ddsr

9w11ddsr1#

我通过创建pscustomobject并将其管道传输到函数来使其工作,其中ValueFromPipelineByPropertyName属性对于两个参数都设置为true。

function Test{
[cmdletbinding()]
param(
[parameter(ValueFromPipelineByPropertyName=$true, Mandatory=$true,Position=0)]
[string]$jeden,
[parameter(ValueFromPipelineByPropertyName=$true, Mandatory=$true,Position=1)]
[string]$dwa
)
Process{write-host "$jeden PLUS $dwa"}
}

$Params = [pscustomobject]@{
    jeden = “Hello”
    dwa = “There”
}

$Params |Test

输出:
Hello PLUS There
变量赋值可以跳过,[pscustomobject]可以直接通过管道传输。

0yycz8jy

0yycz8jy2#

你试过把两个字符串作为一个对象传递吗?看起来你的管道把dem当作两个对象...

@("one", "two") | Test

编辑。尝试定义测试以接受数组:

function Test {
    [cmdletbinding()]
    param(
        [parameter(ValueFromPipeline=$true, Mandatory=$true,Position=0)]
        [string[]]$strings
    )
    Process {
        write-host "$($strings[0]) PLUS $($strings[1])"
    }
}

相关问题