A shell is a type of program that allows users to access kernel services from the GUI layer of the operating system. Every type of operating system has this function, given that the graphical level of the operating system, as in Windows, Linux or MAC OS, is a type of shell. Command-line interface shells are usually preferred by advanced users for some tasks because they are much faster due to less overhead.
Windows PowerShell's scripting language interacts directly with the .NET framework, processing objects rather than simple text. This language also allows for full control of networked computers within the domain, making it perfect for domain administrators. This makes it much more powerful than the command line accessed from "CMD."
Batch languages are typically a layer of abstraction above scripting languages, using simplified commands that incorporate a large amount of services. CMD is set up this way, in order to be more easily understood and used by users who don't necessarily need as many functions readily available.
Since PowerShell extensively uses the .NET framework, new commands, syntax and interactivity with other programs and services can be easily implemented. This flexibility contributes to PowerShell being a much more powerful and flexible shell program than CMD.
Based on DOS
CMD, also called Command Prompt, is designed to resemble MS-DOS, although it is not running MS-DOS, which would be an entirely different operating system running within Windows. The current form of CMD is set up with the syntax of MS-DOS so that it is familiar to legacy users, but users shouldn't expect MS-DOS programs to be automatically compatible in CMD.