Basic man-page style documentation for your own scripts comes practically free with powershell. Powershell uses named parameters (though technically you&#x27;re not forced to do so) with command-line tab-completion. Powershell uses a standardized verb+noun syntax design which makes it slightly easier to figure out what commands are what. Powershell uses an object pipeline instead of plain text.<p>This is the spirit of unix taken to the next generation. It&#x27;s an incredibly useful CLI environment and pipeline which makes it easy to combine small tools to achieve powerful functionality while also facilitating making scripts by making them easier to use and easier to write.<p>For example, let&#x27;s say I wanted to find every process using more than 100m of ram. With powershell that&#x27;s just:<p><pre><code>  get-process | where WorkingSet -gt 100e6
</code></pre>
Because powershell is object based you gain a lot more potency in the command pipeline. For example, let&#x27;s say I wanted to kill all processes that matched a certain filter. That&#x27;s as easy as piping the output of get-process through some filters then into stop-process. Let&#x27;s say instead I wanted to wait until all instances of firefox are closed, that&#x27;s just this:<p><pre><code>  get-process | where path -like &#x27;*\firefox.exe&#x27; | %{ $_.WaitForExit() }
</code></pre>
Powershell is far from perfect and it has a few very annoying gotchas here and there, but so does bash, python, and any other language for that matter. Powershell is a very powerful language that has benefited from a lot of rethinking of some of the traditions in command line interfaces that exist solely because that&#x27;s how it used to work back in the day despite the reasons for those choices no longer pertaining in the here and now (teletype terminals, slow connections, slow everything, etc.).