Say goodbye to the MS-DOS command prompt
computerworld.com
computerworld.com
On the one hand, the Command Prompt in Windows has always been something of a second-class citizen, a poor imitation of the power user shells of the UNIX/Linux world. It was long overdue for an upgrade. PowerShell is, no doubt, more powerful, and for professional Windows sysadmins with the time and inclination to learn it, it's probably been the default for a long time.
On the other hand, there's a reason the traditional command prompt and batch files have lasted so long: for a lot of basic purposes, they work just fine, and many people know how to use them. Among those who aren't professional Windows sysadmins, I know very few people who seem to use Powershell at all, probably not helped by the fact that it has some of the worst documentation in computing history and is far from intuitive for anyone familiar with either the traditional Windows command prompt or something like bash.
I'm still not at all comfortable with the idea that with Windows 10 you'll essentially just wake up one morning and find something you've been using happily for literally decades isn't there any more and pressing the keyboard shortcut that got you want you wanted last night doesn't do so this morning. Regardless of whether this particular change can be turned off, at least for now, this still seems a very dangerous policy in general.
Also, PowerShell runs .bat batch files just fine, for those that were wondering.
I don't think PowerShell has any worse documentation than bash: most commands support -? and/or -h just like they do everywhere else.
Or there might be extra help for a command in Get-Help, which is very similar to unix man (and aliased to it if you have the have the habit to just man commandname).
Don't know the command you want? Get-Command lists them and the you can Get-Help about it.
Beyond that there's definitely a learning curve to get used to the common verbs and some subtle syntax differences to bash, but that's not much different from learning the differences between bash and zsh or csh or emacs... On this front I can point you to a lot worse documentation than PowerShell's in the deeper, weirder *nix command shells.
Edit: Removed asterisk interpreted as emphasis.
Sure, but that's not really my point. No-one who is seeing the default swap had much if any say over whether the option to swap back would be provided, nor will many if any of those people have any say over whether and when the alternative will be deemed too much trouble to maintain and removed entirely.
I remember painfully well my first experience with Powershell, back when it was new. I thought I'd give it a try, so I opened a shell window and tried a few commands.
What happened next went something like the following. I'm actually reproducing this as I type this post, following roughly the same process using Powershell as installed on my Windows PC today, just to make sure I'm not talking complete rubbish here and it really is as bad as I remember...
dir
OK, great, I still get a directory listing. I'm in my home directory and lots of the useful subdirectories are hidden by default. No problem: dir /a
What, why is that an error? Oh, this isn't really dir as I know it, and / is now a path separator, reversing two decades of Windows using \ for that purpose. OK, maybe it's more like bash then? dir --help
No, that's an error as well. OK, let's try something else: help
If you've ever tried that in Powershell, you'll be aware that it produces one of the most unhelpful help pages ever written. Even a simple section about what to read to learn about Powershell is full of jargon that no-one who didn't already know Powershell would necessarily understand.What is a cmdlet? Is that like a batch file?
Where did all this stuff about properties and methods on objects come from? I'm trying to get a directory listing, not write a GUI in Java!
At least it finally tells me the magic syntax to get help on any given command: -?
dir -?
Wait, what? I asked about dir, and it's telling me something about Get-ChildItem. Except it's not really, because all it tells me is some syntax for something I didn't ask about, with no indication of why it's relevant or what any of the options (I'm assuming) actually do. But after a screenful of more jargon I don't understand, it says something about how to get more information, so let's try that.Oh, I still can't copy and paste like most UIs had since the 1990s. OK, back to typing out tedious commands full of variations on what I actually want to ask about the old-fashioned way:
get-help Get-ChildItem -detailed
Oh, look! Several screens of further jargon, which apparently still don't support paging like any decent CLI since the 1990s either!But at least it tells me that what I want is the -Force option. Maybe. Because even the brief description of that option manages to use jargon I don't know and refer me to yet more help pages. And why on earth would an option that is normally used to override confirmation prompts when doing something destructive apply to a dir command?
Somewhere around this point, if memory serves, I stopped, presumably fearing that I would lose the will to live if I carried on much longer.
But again, I wasn't particularly trying to make the point here that Powershell is a textbook example of how not to do UI design, though it is and I might have been. My real point was that taking a tool that has been useful for 20 years and replacing it literally overnight and without prompting with a radically different tool that is also demonstrably inferior in some ways is a really, really dumb idea.
A learning curve does not make anything "demonstrably inferior" and a lot of the jargon you felt like outright ignoring can lead to rabbit holes where PowerShell really shines, if you let it.
For the most part you've got a transcript equivalent to a DOS user switching to unix and having a hard time figuring out that dir is now ls and ls has a bunch of weird flags and hidden files start with dots for some weird reason... It's not really a demonstration of "inferiority" but a travelogue of ignorance.
You complain about the help system of PowerShell, but when was the last time you even tried HELP.EXE for CMD help? If you want to talk about terrible documentation, there's a field day to be had in HELP.EXE. I remember trying to learn from DOS 5.x's HELP.EXE which was even worse back then.
I'm sorry you don't feel like learning something new, but PowerShell is better than CMD if you give it a chance and maybe not glossing over so much of the jargon?
«What is a cmdlet? Is that like a batch file?»
For the most part yes, a cmdlet is like a batch file but more powerful.
«Where did all this stuff about properties and methods on objects come from? I'm trying to get a directory listing, not write a GUI in Java!»
That's where the magic in PowerShell lies, that's the rabbit hole to follow if you want to start seeing what makes PowerShell special.
It is a fact that Microsoft can and do roll out significant changes to Windows 10 literally overnight and without giving many users the option to decline them.
It is reasonable to assume from the fact that this discussion was relevant at all that Microsoft are at least considering doing that with this change, but even if they don't, the general point still stands.
Whether or not Powershell is more powerful than the command prompt once learned is still not the point. The point is that it is different, and if this change goes ahead, something that worked yesterday in the same way as it had for literally decades will suddenly not work the same way tomorrow.
As a final note, you seem to have confused my description of my initial experience with the then-new Powershell something like a decade ago with my current situation, but again, that really isn't the point anyway. The point is that forcing such a change on users could create at best a good deal of confusion and frustration among existing users who already know the current system they've been using for a long time. The comparison isn't between learning Powershell and learning cmd or bash, it's between learning Powershell and not having to do anything at all. The poor documentation and general clumsiness and verbosity of Powershell are merely rubbing salt in the wound at that point.
I love the fact that I'm still using it.
I know batch file programming is ridiculous, some of the most mental looking code I've written is part of that. But I get some masochistic pleasure from using it, I've automated tons of my work through it. Much cudos goes to Rob van der Woude's batch scripting site [1].
But finally, finally they did some really nice updates to the DOS prompt in Windows 10 so that it fills the screen properly and line wraps correctly.
In the DOS prompt I've got:
- SSH (natively compiled)
- Pretty much all the linux command tools I want grep, cat, sed etc (thanks be to Git SCM and all it's precursors e.g. GOW)
- Vim
- Lovely consolatas mono font - which gives lovely crisp font rendering - better than any of the DOS 'replacements'
- Rather lovely Solarized dark colours
- GNU Readline [2] (hitting tab gets you a slash at the end of the directory, yay!)
- Chocolatey package management
Seriously, the DOS prompt can be quite lovely to use [3]
I know Powershell is all shiny and new with added .net up it's arse, but I don't need it and it's not what I was typing in as I grew up. I even went about changing all my .bat files to .cmd files to be ultra modern this year.
I think there'd be uproar in the Linux world if bash was 'put out to pasture' (reminds me of the horse in Animal Farm) as is happening to DOS.
[1]: http://www.robvanderwoude.com/
[2]: http://mridgers.github.io/clink/
[3]: https://dl.dropboxusercontent.com/u/7765571/images/screenshots/dos.pngBut as for getting it all installed, it's pretty easy:
1. Chocolatey [1]
2. Git chocolatey package [2] (gives GNU tools, SSH - there is also a separate OpenSSH package from MS [6])
3. Vim chocolatey package [3]
4. Consolas font (just change the DOS window properties)
5. Solarized colours [4]
6. GNU Readline (clink) [5]
[1]: https://chocolatey.org/install
[2]: https://chocolatey.org/packages/git
[3]: https://chocolatey.org/packages/vim
[4]: https://github.com/neilpa/cmd-colors-solarized/
[5]: http://mridgers.github.io/clink/
[6]: https://chocolatey.org/packages/openssh
Edit: fixed formatting, added OpenSSH package link 7zip 16.02
7zip.install 16.02
autohotkey.portable 1.1.24.00
chocolatey 0.9.10.3
chocolatey-uninstall.extension 1.1.0
chromium 54.0.2801.0
clink 0.4.7
DotNet3.5 3.5.20160716
dropbox 5.4.24
Emacs 24.5.0.20150611
evince 2.32.0.145
f.lux 3.10
FBReader 0.12.10.1
git 2.9.0
git.install 2.9.0
googledrive 1.29.2074.1528
greenshot 1.2.8.12
haskell-stack 1.1.2
keepass 2.34
keepass.install 2.34
keepass-keepasshttp 1.8.4.1
libreoffice 5.1.4
LightTable 0.8.1
mediamonkey 4.1.12
meld 3.16.0
mm-choco.extension 0.0.1
MsSqlServer2012Express 11.00.3000.20140928
nodejs 6.3.0
nodejs.install 6.3.0
nsis-unicode 2.46.5
Octave 3.6.4
openvpn 2.3.11
paint.net 4.0.6
pandoc 1.17.1
poedit 1.8.7
postgresql-9.3 9.3.5.3