Now of course the implementation of typed pipelines in PowerShell is clunky and forced, because typed I/O primitives do not (yet) actually exist in Windows, so all the piping is done within one process with streams of object pointers, else it doesn't work. There are other problems, too: I recall one advocate linking me to the PowerShit solution to some admin task like changing the ACLs of a directory tree recursively. It involved including a C# program as a herestring, passing it to the C# compiler, and loading the resulting bytecode. The advocate said "Isn't this beautiful and elegant?"
But in principle the model embraced by PowerShell is strictly more robust than bash's fragile "dumb byte pipes" model.
"Get a byte, get a byte, get a byte, byte, byte!" --NT architect Dave Cutler, on Unix I/O