* “A decent pager” – did you know that you can use less in Powershell? It’s available in packages like GnuWin and msysgit. If you use the Chocolatey package manager, you can install it by simply entering the command “cinst GnuWin”. This will not only get you less, but also grep, sed, cut, awk, etc.

* “Persistent history” – I don’t know why this is not present either, but it was pretty trivial to add – I simply put these two lines into my profile:

function bye {Get-History -Count 1KB |Export-CSV ~\PowerShell\history.csv; exit }
if (Test-path ~\PowerShell\History.csv){Import-CSV ~\PowerShell\History.csv | Add-History}

* startup – what version are you using? This was previously a problem for me but as of Powershell 3.0, it is as fast to start up as cmd or bash for me.

* Active NIC’s IPv4 address: Simple command: (Get-NetIPConfiguration)[0].IPv4Address

Get-NetIPConfiguration returns your network interfaces in order of priority. The first one is used for general traffic, but depending on how you configured your network, you may have certain IP ranges routed through other NICs.

* “TAB completion cycles through options instead of showing a list” – hit F7

* “Logic operations use weird perl-like syntax (-eq instead of ==) which is hard to remember.” – These are taken from long-standing Unix conventions (see the “test” command on *nix for example), and are done to avoid conflicting with the standard shell script operators ( for redirecting, && for command separation, | for piping, etc). This perfectly fits what I expect a shell to do after using cmd, bash, ksh, zsh, etc.

* “Automatic conversion of single item lists into a single value, but not vice versa” – I’m not sure what you mean by this, but Powershell does actually allow you to call properties on a list of objects as if it was a single item. For example: [string](get-netipconfiguration).ipv4address will return a concatenated list of the IP addresses of all current network interfaces.

* “Automatic parsing of command line arguments for scripts is complex, unnecessarily verbose, inflexible and cannot be turned off!” – except it is flexible and powerfull, and *can* be turned off. If you add –% to any command, anything after that will be passed unparsed to the command you are calling.

* “Default “execution policy” doesn’t actually allow you to use PS scripts.” – MS defaults to being as secure as possible given the history of exploit attempts against their software. This is trivial to turn off.

I have used bash and powershell for many years now (along with various other shells), and I can safely say that powershell is more powerful than any of its competitors. A full-fledged object pipeline and the tools to make use of it is a hugely powerful tool in the hands of anyone who learns how to wield it.