So, the pipeline is really intended to accumulate output for you, meaning it kind of is an array already.
ErrorHandling is creating PSObjects and writing them to the pipeline. The problem is that you’re trying to stuff two different types of objects into the pipeline, right? Get-PCInfo only gets one output pipeline, but you’re outputting both your custom objects and the output of GetComputerInfoWork. When you jam two object types into the pipeline at once, the formatting system goes a bit berserk. So that’s one consideration.
Now in your case, it’s a little goofier for the shell, because you have two functions outputting objects of type PSObject, but they’re very different looking. So the formatting system won’t deal well with that at all.
The fact that you’re not outputting the unreachable ones until the end doesn’t really change the shell’s confusion.
You ideally want to output ONE kind of object. So perhaps that would be an object having a ComputerName property, and a Reachable property which is either True or False. It might then have some other properties, which might be empty if Reachable is False for that computer. For me, I’d do all of that in a single function, rather than having the two “helper” functions you have. You’re actually complicating the error handling the way you’re doing it, because you’re crossing scopes with error context. Totally legal, but harder to keep track of, and there are some gotchas.
I think it’s more a design thing. One function doesn’t really output two “tables” of information - not without a lot of custom formatting work, which is what the Dir command has going on under the hood, because it has to display File and Folder objects on one view.