gpt4 book ai didi

powershell - 如何通过管道正确展开数组?

转载 作者:行者123 更新时间:2023-12-05 09:18:24 33 4
gpt4 key购买 nike

PS 在通过管道时“展开”数组。
我想使用以下测试脚本对其进行测试:

$a = @("a", "b", "c")
$a | Write-Host

在这种情况下,$a 数组正确展开:

a
b
c

但是,当我使用自己的函数时

Function Do-Something([Parameter(ValueFromPipeline)] $str) {
Write-Host $str
}

$a | Do-Something

输出是:

c

如何在自定义函数中通过管道正确处理数组元素?

最佳答案

the output is wrong

不,您的函数定义是“错误的”。将其更改为:

Function Do-Something([Parameter(ValueFromPipeline)] $str) {
process { Write-Host $str }
}

一个高级的 powershell 函数(一个接受管道输入的函数),它的主体有 3 个 block :beginprocessend,以及看起来像这样:

Function Do-Something {
param([Parameter(ValueFromPipeline)] $str)

begin {}
process {}
end {}
}

beginend block 将分别被调用 一次(分别在开始和结束时),而 process block 将被调用一次,每个输入值 从其间的管道绑定(bind)。

当您省略 beginprocessend 声明时,函数的整个主体将被解释为 end block ,因此您的示例函数被有效地解释为:

Function Do-Something {
param([Parameter(ValueFromPipeline)] $str)

end {
Write-Host $str
}
}

这就是为什么您会看到 Write-Host cmdlet 仅被调用一次,用于最后一个输入值。

关于powershell - 如何通过管道正确展开数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44549606/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com