* A C#-like scripting language with many power user features such as direct support for hashtables, switch statements that can case on regular expressions, array slicing and anonymous methods (script blocks) that can be stored as data and then later executed. That is in addition to the normal scripting language features such as looping (for/foreach/while), conditionals (if/switch), variable scoping (global/script/local/private) and the abililty to define functions.
* Cmdlets all inherit certain options, allowing the user to choose things such as the level of interaction and how to deal with errors — including a "suspend" feature, which allows the user to enter a new command shell, investigate a problem, and then continue with the original command. A simple mechanism is built-in for the programmer to define the prompts to be shown in such circumstances. Cmdlets that produce side-effects support the options: -WHATIF and -CONFIRM. -WHATIF informs the user what would have happened but no action takes place. -CONFIRM informs the user what is about to happen and allows the user to control whether it takes place or not.
* An extensible provider model provides not only access to and manipulation of the file system but also other hierarchical stores. For instance, PowerShell comes with a registry provider that allows access to the registry via the "HKLM" and "HKCU" hives. With this, the registry can be browsed by executing commands like "dir HKLM:\SOFTWARE\Microsoft" at the shell prompt. PowerShell comes with providers for the certificate store as well as environment variables, shell variables, local certification store, functions and aliases. Like cmdlets, the provider model is extensible, allowing third parties to create their own provider model and snap it into PowerShell.
* The command-line options are generally whole words, but can be specified as the minimum number of letters necessary (e.g. the option -show-detailed-information could be entered as -s if no other option began with 's')
* Comprehensive, user-extendable, tab completion features. The cmd.exe shell in current versions of Windows can only complete file or directory names, in contrast to the advanced completion in shells such as bash and zsh.
* The ability to assign the output of a command to a variable, which will then be an object or array of objects inspectable in any way desired.