Also note that you can get in-console help on most commands without having to go out to a web browser. On the ones I've tried, examples are also included which help output too.
Help will also list available commands; eg:
help json
Shows me the three commands available from my shell: ConvertFrom-Json, ConvertTo-Json and Test-Json.
There is also Get-Command, which you can filter for command discovery, ie:
Get-Command | where Name -Like "Json"
The advantage to PowerShell being object-based here is that if you press <TAB> after typing where, the list of completions you get will include the properties that are in the object returned as the result of Get-Command.
I also use Cmder for a much nicer console than cmd.exe. I haven't tried the latest version of the new Windows Terminal but I hear it's also nice.
> My biggest issue with powershell is how undiscoverable it is
This surprises me as I feel exactly the opposite.
I may not know how to manage X via PowerShell, but I know those pre-approved verbs like Get/Set/New/Test/Convert etc. Then I know commands from same module usually start with some abbreviation like Get-Net.... Then I can tab throguth commands.
Or just Get-Module (to see loaded/available modules) and then Get-Command -ModuleName x or just help tcp. And if "help Get-NetTCPSetting -Full" won't help, yeah, fallback to google.
Example.
Now how would I set an IP address for an interface not having an idea? (where you see italicized, actually there are star-wildcard around the word)
1. help ip (ohh, too much results)
2. help set-ip - alright, Set-NetIPAddress
3. help Set-NetIPAddress -Examples (seems I need to specify some interface. It is probably at Get-NetIPInter<TAB> - ahh, gives me Get-NetIPInterface, here you are.)
4. Get-NetIPInterface
5. Set-NetIPInterface -<TAB><TAB><TAB> (autocompletes arguments and I choose which I would like to set or not)
The worst/easiest to fix discoverability problem with Microsoft prompts is that they show you a single completion on tab and cycle through them on every subsequent tab, which is a lot more confusing than being shown all the options, in my opinion.
I would argue that the strict posix shell (with all its limitations) can be learnt in an afternoon or two and a lot of it will be also useful in general in the OS. like utilities and their inputs and outputs. it's mostly reusing/duct taping existing programs, so it's not a vacuum like a DSL. I hope it has excellent man pages to be usable. the BSDs have...
I'd say it's not any less discoverable than the typical Unix shell, plus readability is guaranteed when coming across scripts written by someone else. Crypticism is culturally out of place in Powershell, and I think this is its best feature.
PS: the ISE (Integrated Scripting Environment) helps when writing scripts.
But maybe that's just a result if it being so new. 'ls' has been around for almost 50 years...
What it really feels like is a complete programming language inside of notepad.exe because of the historically terrible windows command prompt.