Why I Love Powershell
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:
Get-ChildItem
(ls
)Select-String
(grep
)New-Item
(touch
,mkdir
)Get-Content
(cat
)Compare-Object
(diff
)Get-Help
(man
)
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 dir
and ls
and gci
. [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 with wild optional syntax and semantics. [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.