PowerShell is primarily a Windows Automation tool that surfaces its functionality in a couple of ways:
- A shell (console) ala KornShell, CSH, BASH.
- A dynamic scripting language.
- A hostable engine ala TK/TCL & Windows Scripting engine.
- Underpinnings for the Windows 7 Troubleshooting Framework.
I view languages like Python and Ruby as general purpose languages, that while they may offer REPL prompts, aren't as suited to shell programming i.e. easily firing off system commands and EXE's, capturing stdin/out, dealing with non-terminating vs terminating errors, etc. That's where PowerShell shines.
OTOH, I wouldn't use PowerShell for all generic programming tasks. It can't:
- Define .NET types (except those that are of type PSCustomObject)
- Implement an interface
- Implement anything generic
- Can't call generic methods
- Doesn't support static extension method calling syntax e.g. array.Where()
- Doesn't support notion of namespace import (i.e. using system; in C#)
Like the old saying goes, be sure to pick the right tool for the job.