从Powershell中的ForEach中返回一个值

Ben*_*wer 5 powershell foreach loops

这看起来很基本,但我看不出它是如何或为什么这样表现的:

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

ReturnStuff
Run Code Online (Sandbox Code Playgroud)

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

xXh*_*L7Z 8

看起来你正在使用一个参数作为一个scriptblock 调用ForEach(函数[System.Array]).基本上,您正在定义并返回{ Return $_ }循环的每次迭代.

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

$a.ForEach{ return $_ }
Run Code Online (Sandbox Code Playgroud)

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

那么该怎么办?

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

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

    $a.ForEach{ return $_ } | Select -First 1
    
    Run Code Online (Sandbox Code Playgroud)