Why I Love Powershell

By Xah Lee. Date: . Last updated: .

PowerShell, a better shell, after 30 years of unix crap

Here's reasons why PowerShell is a magnitude better than bash + unix util bags.

consistent command names

PowerShell has proper command names. Names are full and meaningful. Example:

they follow a verb-noun design. I don't like it, but at least it's consistent and not cryptic.

Systematic Alias and Name Completion

PowerShell has systematic alias and name completion. Completion works for parameter names too. For example: Get-ChildItem has abbrev gci. (and also dir and ls for cmd.exe and bash adoption) [see PowerShell: List of Aliases]

Consistent Parameter Syntax, Parameter Names, Parameter Semantic

PowerShell's parameters, are consistent in syntax, name, and meaning, of their order, position, default values, for ALL commands.

For example, -Recurse has the same meaning for every command, and every command that recurses have that parameter. For example, -Path, -LiteralPath, are parameters for any command that takes a path, and path expansion is handled in a universal way. Boolean parameters are handled consistently. Unlike the unix situation where every command has its own wild parameter names and meaning. [see Unix Pipe as Functional Language]

Superb Documentation

PowerShell documentation is superb, well written, consistent format, with plenty code examples. I'd rate PowerShell doc to be one of the best in computing. Of the 10 programing language plus tens of programing tool docs of past 30 years i've read, i'd rank PowerShell's document to be among top 5 best. unix man page is the extreme opposite, ranks the worst. [see Which Programing Language Has Best Documentation?]

Strongly Typed, But Type Optional

PowerShell has formalized data types and pipe. It's not just string. PowerShell deal with objects, with full programing language system the dot NET backbone. Numbers, string, and other argument values, expression, all have proper type, and object with methods. You can annotate types when writing a function that prevents many errors.

General Computation, Not Just Text Processing

PowerShell commands are more general. For example: Get-ChildItem is not just for listing directory, but for listing any list and tree structures. For example, registry, environment variables.

PowerShell is now cross-platform since 2016. Works on linux and macOS too.

Programing Language Love and Hate