This seems really basic, but I can't see how or why it behaves this way:
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?
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:
$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 with Foreach-Object):
ForEach ($item In $a) { return $item }
Select the first value returned from all the scriptblocks:
$a.ForEach{ return $_ } | Select -First 1