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. e.g. 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

Best 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. 〔see Which Programing Language Has Best Documentation?

Strongly Typed, But Type Optional

PowerShell has formalized data types and pipe. It's not just strings. every value in PowerShell is a object, of specific type, of the dotnet framework. 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 Purpose Language, Not Just Text Processing

PowerShell commands are more general. e.g. 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