When we designed PowerShell we decided that we wanted to have Shell syntax and semantics because this is what was missing from the market and because it supports the ad hoc development practice that is so suited to the needs of administrators. We also observed that most shells ran out of power pretty quickly and people had to throw away their scripts and start from scratch with a more powerfull scripting language like Perl. Sadly, sometimes those environments ran out of power as well and people had to throw them away and start from scratch using a systems programming language like C++. We looked at those things and decided that PowerShell ALSO had to be a great scripting language and be decent systems programming language. This is the orgin of our quest to have the widest possible dynamic range.
You don’t need to think about this very long to realize that we were going to run into some problems. Boy did we! That said, I was surprised at how many would disappear if you resisted the urge to say, “choose between Shell and Programming”. If you worked hard, got creative, and struggled with it, most of these apparent conflicts would give way to a great solution. That only worked so far and there were times when we had to choose and in general (but not always), we favored Shell over Programming.