gpt4 book ai didi

powershell - 将函数与 ForEach-Object 一起使用

转载 作者:行者123 更新时间:2023-12-02 06:17:23 25 4
gpt4 key购买 nike

当使用ForEach-Object 函数时,有没有办法提供函数 而不是代码块

这将使我能够简化这个:

@(1, 2, 3, 4) | % { Add-One $_ }

对此,或类似的:

@(1, 2, 3, 4) | % Add-One

为了完整性,这里是 Add-One 函数的当前定义

function Add-One($Number) {
return $Number + 1
}

很容易用process写一个函数来做类似的事情,像这样:

@(1, 2, 3, 4) | Add-One

但是,这意味着您必须为每个函数重新实现循环和 ValueFromPipeline,而不是重用 ForEach-Object 已经提供的内容。所以简而言之,有没有一种方法可以将标量函数与 ForEach-Object 一起使用,从而避免将其包装在 代码块 中?

最佳答案

当然,您可以像这样使用脚本 block :

PS> $sb = { process { $_ + 1 }}
PS> 1..4 | % $sb
2
3
4
5

但也许更直接的方法是创建过滤器:

filter Add-One { $_ + 1 }
1..4 | Add-One

您还可以使用函数,例如:

function Add-One {process {$_ + 1}}
1..4 | Add-One

过滤器基本上是一个带有隐含过程 block 的函数。高级函数方法如下所示:

function Add-One {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline)]
[int[]]
$Number
)
process {
foreach ($n in $Number) {$n + 1}
}
}
1..4 | Add-One
Add-One (1..4)

关于powershell - 将函数与 ForEach-Object 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902692/

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