Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 对ForEach对象使用函数_Powershell_Powershell 2.0 - Fatal编程技术网

Powershell 对ForEach对象使用函数

Powershell 对ForEach对象使用函数,powershell,powershell-2.0,Powershell,Powershell 2.0,使用ForEach对象函数时,是否有办法提供函数而不是代码块 这将使我能够简化这一点: @(1, 2, 3, 4) | % { Add-One $_ } 对此,或类似: @(1, 2, 3, 4) | % Add-One 为了完整起见,这里是addone函数的当前定义 function Add-One($Number) { return $Number + 1 } 使用process编写函数来执行类似操作很容易,如下所示: @(1, 2, 3, 4) | Add-One 但是,这

使用
ForEach对象
函数时,是否有办法提供
函数
而不是
代码块

这将使我能够简化这一点:

@(1, 2, 3, 4) | % { Add-One $_ }
对此,或类似:

@(1, 2, 3, 4) | % Add-One
为了完整起见,这里是
addone
函数的当前定义

function Add-One($Number) {
    return $Number + 1
}
使用
process
编写函数来执行类似操作很容易,如下所示:

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

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

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

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
过滤器基本上是一个带有隐含进程块的函数。高级函数方法如下所示:

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

对于像我这样正在搜索
过滤器
文档的人来说,它位于
关于函数
:“过滤器是一种在管道中的每个对象上运行的函数类型。过滤器类似于一个函数,其所有语句都在一个进程块中。过滤器的语法如下:
过滤器[]{