If powershell wasn't a Microsoft product I think it could easily outclass any shell currently available. The concept of command output typing is hand down one of the best features of any shell I've tried.
nushell is a thing, and basically has all the fun powershell features like a type system, but a more Unixy presentation. I've not used it, so don't know if it's actually any good, but it at least exists.
Yes and no. Yes in that it's a different shell that is intended to be used instead of something like Bash, and isn't compatible with Bash scripts. However, unlike Fish and Zsh, it's also not compatible with plain POSIX sh, so you have to run plain shell scripts by calling into something else that is sh-compatible.
Apples to oranges, powershell is windows exposing most of COM, WMI and .NET object models while improving on the previous options with CScript and VBscript, as those are older than .NET.
Why are we comparing it with UNIX/Linux shells is beyond me.
You say that like it's a bad thing. Having access to all those things by writing a few descriptive words and a great help system (looking at you, linux commands) is awesome.
Because ms is positionning it (and indeed publishing it) as a rival to bash, zsh et al. You can use PS on Linux if you feel so inclined and take advantage of most of the day-to-day features. The .NET interfaces are nice but to me they're more a way for them not to add cmdlets for everything by going "its in .NET already".
I'm confused by this command output typing you're talking about, and I'm not sure if I found the correct thing. Are you talking about the Write-Host and Write-Output?
I'd assume they mean that command return values can have types besides string. In classical shells, all data is stringy, so every command has to re-interpret everything. PowerShell can actually use data types.
In powershell, commands may return types different from string and other commands may accept arguments that are not strings. For example, you can pass an array between commands where in bash you just have a string with \n separated values. You may also interact with more complex objects
I once made a script for a monitoring software that takes its input as json, so I built a custom object that had all the data and then called .tojson on it and that was that.
It was my stepping stone from being an IT Support tech to a traditional Software Developer. Yes it's not as easy to work with as a traditional language or as fast but it's more flexible and often less verbose.