My long reply to a long reply was getting a bit…long, so I thought I’d move it here. Much easier to do the editing in Live Writer anyhow.
You can find the original article and several comments from myself and the author at this blog post: Why PowerShell, Servermanagercmd and co. don’t really rock on the command prompt. I recommend you read the article, it’s a nicely-worded opinion piece. The article deals with the author’s frustrations with Server 2008 command-line utilities (which I agree with) but he then extends those opinions on to PowerShell. I’m making the point that PowerShell addresses most if not all of his frustrations. He also goes into reasons why he thinks the GUI is generally superior for any task, which I also disagree with. (Lots of dangling prepositions today.)
My reply continues below:
Well, the PowerShell rebuttal to ‘difficulty in memorizing commands’ is handled by a cmdlet called “get-command”, and the enforced (by Microsoft’s Common Engineering Criteria internally) consistent naming convention for cmdlets and other related interfaces such as PS Providers. For example, say you want to do something with a mailbox in exchange. You already know the noun you are dealing with–it’s a mailbox. So you type “get-command *mailbox” or “get-command -noun mailbox” and you’ll get several matches. To go a step higher, say you know you want to do something with VMware but you forgot how to connect to the auth server and you have no idea if the verb (the part before the dash) is even called ‘connect’. In a case like that you would use “get-command -pssnapin v*”. That will return all cmdlets which are contained within any snapin which starts with the letter V.
On top of all that, there’s some great IDEs and enhanced editors and graphical consoles whicih make all of this even easier. You can tet real visual studio-like Intellisense on filenames, cmdlets, parameters, .NET types, WMI classes…I certainly can’t memorize every WMI class, but I can type “get-wmiobject win32_net” and hit TAB and voila, there’s a dozen answers popped up in a listbox.
In answer to your point that “The number of software vendors offering tools for administrators has been growing dramatically in the last years.”: I would say YES–and PowerShell is/will be largely seen as responsible for accelerating that trend. VMware, Citrix, IBM and many more vendors are starting to provide PowerShell hooks.
And lastly, of course GUIs are more prone to mistake! How many times have people accidentally clicked on shutdown when they meant logoff (before the start menu was rearranged in what…2003)? I mean…seriously, I could go on and on. GUI accidents could be blamed for spyware installs, too.
If I’m about to make a change in a production environment which may have adverse affects, best practice wisdom would say (yeah, I know that’s like saying “they say” but hear me out) you should make a change plan and a backout plan. You are already doing things to a high level of detail, you might as well script the whole thing. This allows you to not only automate the change, but to validate the change, and if necessary, reverse it. This applies doubly so if you are not the person to make the change. Maybe you are the lead admin delegating a task off to a junior admin or an offshore resource. you tell them:
Run this script, wake me if stuff starts blowing up!

1) You can use "GCM" instead of Get-Command and you only need to provide enough of the PSSNAPIN parameter to disambiguate (which is "p")
e.g.
PS> Get-Command -PSSNAPIN v*
is the same as:
PS> gcm -ps v*
2) I never view this as a CLI VS GUI discussion. To me it is always a CLI AND GUI discussion. They are both great and both have their strengths and weaknesses.
The right tool for the right job.
Jeffrey Snover [MSFT]
Windows Management Partner Architect
Visit the Windows PowerShell Team blog at: http://blogs.msdn.com/PowerShell
Visit the Windows PowerShell ScriptCenter at: http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx
Hal, let me try to make my point clear by changing the topic a little. You wrote that you used Life Writer for this blog post. You probably know that there are many tech bloggers who will look at you as if you are a leper if you tell them that you use a WYSIWG editor for blogging. They claim that they are faster if they write their posts in a plain text editor using the interface of their blogging software. They also say that they can do different kinds of formatting which your WYSIWG editor doesn’t support. The HTML code will be clean and there is a lower risk for errors. I could continue this list, but I think you got my point.
I think the decision to communicate with a computer without using a GUI is often based on emotional rather than rational reasons. If you are familiar with HTML, it might just be more fun to write your posts without a WYSIWG editor. And if you are familiar with PowerShell, it might be more fun to manage your computers on the command prompt or by writing scripts even though there is a free GUI tool available to do the job.
I started managing computers before GUIs were available, and I think I have quite some experience with working on the command prompt. I also started blogging before WYSIWG editors came out and I am quite familiar with HTML since I worked as a webmaster, too. I admit that coding is really fun. Yeah, it really rocks if your own script solved a big problem! But unfortunately, I am also very busy. So I always search for the fastest way to solve a problem. Since I am leading an IT department it is also my job to find the cheapest way. Any kind of coding is time consuming and therefore expensive. You shouldn’t make the mistake to count only the time to enter a command. You also have to add the time you needed to learn PowerShell and to keep yourself up-to-date. And you have to add the time to find the right command with its correct parameters if you forgot it after some time. You also have to add the time to correct your typos, etc.
The fact that PowerShell offers some new ways to find the correct command is compensated by its complexity. There is no doubt that you have to invest a lot of time to get familiar with it. And if you don’t use it every day you will forget everything you learned pretty fast.
That’s why I follow a simple strategy. I always go for the GUI tool if there is one available for the job. Only if there is no other way will I write a script or launch a command prompt. So I absolutely agree with Jeffrey Snover when he says that both ways have their strengths and weaknesses. The weakness of any kind of coding (CLI or scripting) is that it is time consuming and therefore expensive. The strength is that you can solve those problems for which there is no GUI available (yet).
I can’t disagree with any of that really. I mean after all–I am a Windows guy. Our differences stem from the degree to which I think PowerShell solves /most/ of the problems you raised.
And just for the record:
- I’ve been blogging for 5 years or so at this site.
- I can speak HTML pretty well and almost never use WYSIWYG editors for actual webpage editing (outside of blogs and wikis).
- I started using PCs in the Commodore-64 days, I’ve been watching GUIs for quite a while, too. Not sure if my father’s Apple ][e counts
- Regarding the educational aspect, I agree, that’s why Jonathan and I do the podcast (powerscripting.net).
I know this is one of those religious type debates to an extent. But I think this sort of interchange is pretty important for the more junior IT folks who may follow along or read this in the future.