Re: piping
The piping in DOS was also a nasty kludge; it did not support true pipes. It would write the ENTIRE stdout from the first command into a temporary file, then only when this was completely written out, open the temp file and feed it into the standard input of the next command. I.e.,
dir | more
would write the entire result of "dir" into a temp file, then open the temp file and run it into "more".
I assume (hope) that powershell uses actual pipes to implement pipes.