Question:
This seems really basic, but I can’t see how or why it behaves this way:
1 2 3 4 5 6 7 8 9 |
function ReturnStuff{ $a=1,2,3,4,5 $a.ForEach{ return $_ } } ReturnStuff |
Why does this give me:
1
2
3
4
5
instead of just 1?
Answer:
It looks like you are calling ForEach
(a function in [System.Array]
) with a parameter which is a scriptblock. Essentially, you are defining and returning { Return $_ }
every iteration of the loop.
This means ReturnStuff
will capture output each time, and because this function does nothing with the output of this line, all the output is returned:
1 2 |
$a.ForEach{ return $_ } |
This behavior is similar to $a | Foreach-Object { return $_ }
So what to do?
- Use a
ForEach
loop instead (not to be confused withForeach-Object
):
12ForEach ($item In $a) { return $item } - Select the first value returned from all the scriptblocks:
12$a.ForEach{ return $_ } | Select -First 1