Instead of piping text from one command to the other, you pipe entire objects back and forth. A lot of bash commands are aliased to Powershell commandlets out of the box. And, as of Powershell 2.0, you have remote scripting similar to SSH.
I choose to do Python Web development on Windows, and I spend my whole day on the PS command line, and I'm really pleased.
That's my problem with PowerShell. No matter how good it may be, I don't really feel like relearning everything just to accomplish the same things, only on Windows instead.
I'm right there with you not wanting to learn a new shell, however PS is written against the .NET Windows API. The new stuff you'd have to learn would be Windows specific, sort of like learning AppleScript. Also, PS has traditional unix shell commands built in now, like grep and ls.
I like relearning. I don't have much use for re-learning... I'd rather learn to do something new. The "to accomplish the same things, only on Windows instead" is the crucial qualifier. I'd rather spend my time, I don't know - learning to configure nginx or doing Haskell tutorials than learn someone's proprietary shell, given that shells aren't particularly exciting and I already know enough about the shells that every other platform offers to be satisifed.
How does that whole "pipe entire objects back and forth" thing work? I mean it seems that there must be some huge machinery to facilitate that kind of thing. For example, if I pipe object from my program to another, how does the other program know what to expect? It must have some sort of type information available, which imposes some pre-planning.
Also, when I pipe an object to another program, can the receiver call methods on it and are the changes visible to the sender?
I'm not sure how they do it and I've only used the basic features of powershell. That said, commands in powershell are .NET classes that define a method ProcessRecord. Inside this they can call WriteObject to write an object to the output stream. So it seems that they can just implement this without any parsing by passing objects around in the .NET runtime.
Instead of piping text from one command to the other, you pipe entire objects back and forth. A lot of bash commands are aliased to Powershell commandlets out of the box. And, as of Powershell 2.0, you have remote scripting similar to SSH.
I choose to do Python Web development on Windows, and I spend my whole day on the PS command line, and I'm really pleased.
http://en.wikipedia.org/wiki/Windows_PowerShell