从Powershell中的ForEach中返回一个值

时间:2016-06-01 01:17:03

标签: loops powershell foreach

这看起来非常基本,但我不知道它是如何或为什么这样表现的:

function ReturnStuff{
    $a=1,2,3,4,5
    $a.ForEach{
        return $_
    }
}

ReturnStuff

为什么这会给我: 1 2 3 4 五 而不只是1?

1 个答案:

答案 0 :(得分:7)

看起来您正在使用参数作为脚本块调用ForEach[System.Array]中的函数)。从本质上讲,您是在循环的每次迭代中定义并返回{ Return $_ }

这意味着ReturnStuff每次都会捕获输出,并且由于此函数对此行的输出不执行任何操作,因此返回所有输出:

$a.ForEach{ return $_ }

此行为类似于$a | Foreach-Object { return $_ }

那该怎么办?

  1. 改为使用ForEach循环(不要与Foreach-Object混淆):

    ForEach ($item In $a) { return $item }
    
  2. 选择从所有脚本块返回的第一个值:

    $a.ForEach{ return $_ } | Select -First 1