In the desktop world, we have the option to use the command line: a uniform interface for a multitude of apps that would otherwise be very different when implemented as GUIs.
Using the same interface, I can move or edit files, cross out tasks on my to-do list, retrieve my password for my email account (using Bitwarden or pass), etc. All in the command line. The GUI for each of those are wildly different.
The other benefit is it is very easy to create a new command line app, as opposed to a GUI.
Is anything like this possible for the smartphone world (even if it doesn’t or will never exist)? What would it look like?
Since smartphone typing is much slower, we can’t simply reuse the command line. We’d need something different. An interface that can still support a various spectrum of different operations, yet ergonomic for a smartphone. What are your thoughts?
Powershell was kind of an answer to that. All commands are supposed to emit objects and take objects as input. For me though it is horribly unintuitive. Id love to see an open source attempt at it, but it would be hard since by necessity every dev works on their own tool, while Microsoft could enforce something because they own all the tools.
Well, the fact they emit objects doesn’t really help that much with the user interface. This just means that the standard input and output of commands is (usually) more unified and parse-able. I really like the idea, and have seen multiple attempts at it including PowerShell, however none have reached the level of usability that the good old *NIX shells provide.
Here you go!
It seems the difference stems from *Nix treating everything like a file (or stream) from day 1, while windows was built from DEC Alpha, which had a completely different approach.
(In the early 90’s a group of DEC Alpha engineers were laid off, and Microsoft hired them. Technet magazine had an article (written by Mark Minasi I think), showing how clearly NT reflects the structure of Alpha. They may have been working on NT before that, but the influence of DEC was pretty clear).
I’ve spent a significant amount of work time for a few years working with Powershell. There’s a hell of a lot it does right, and it’s set up such that the grand majority of commands and modules follow the same syntax in terms of pattern and terms. It’s not hard to just pick up and go with new stuff within it. That is it’s biggest strength, and it makes Windows SysAdmin work a hell of a lot smoother.
That said, there’s a shit ton of little idiosyncracies that would catch me every time if I wasn’t using VSCode/ium with Intellisense suggestions.
Specifying the properties to return from Get-ADUser? Use -Properties. Specifying the properties to return through Select-Object? Use -Property.
Working with Exchange Online? Import the module. Confused that the commands you need don’t exist after you imported it? You have to use the Connect-ExchangeOnline command to authenticate, connect, and generate and load a new temporary module first with just the commands for shit the account you used to authenticate has access to. This is the only module I’ve found that does this.
Need to send an email using your script? I sure hope you like using third party modules or loading dlls to do .Net/C# shit through PowerShell, because if you use the built in Send-MailMessage function we’ll give you a warning that it’s insecure, with a link to more info that’s just a wiki page on github for .Net, not PowerShell, without any actual info that notes this has been an issue for six fucking years! The warning even states that there is no built in alternative in PowerShell despite it being insecure.
Don’t even get me started with the absolute clusterfuck of the multitude of modules for working with Azure, half of them deprecated without equivalent functionality existing in the replacement. The latest and greatest one doesn’t even has documentation pages with shit like “NOTE: FILL THIS INFO IN LATER” in them.
Like ffs, am I using a professional product developed by one of the largest corps in the world, or someone’s open source project? It often feels like you get the worst of both worlds.
Don’t get me wrong, I love PowerShell, it’s an amazing tool for Windows environment sysadmin work. I just often find people’s attitudes about it to be either “it’s a neat toy” or “it’s the most amazing tool on Windows ever” when the reality is between.