Like every discussion about a windows shell, most of the comments are people saying "Actually I suggest you use cmder/clink/cygwin/msys/gow/powershell/etc".
An extensive write up on the features, advantages, disadvantages, and the use cases for each, is sorely needed.
I tried a few of those, so I will share my experience with powershell and with cygwin as well as Babun which I enjoyed:
* Powershell - Easy to use, typically comes with Windows, or not too complicated to install. Does plenty of unixy commands (ls, mkdir, all come to mind, not sure how many others). Definitely an improvement over plain old cmd, but sometimes it doesn't sync with system variables (could be a PEBKAC issue though) but it is definitely usable.
* Cygwin - Works great, I would say somewhere about the same as Babun (I think it's based off of it if I'm not mistaken, but with it's own tooling, packages are from Cygwin if I'm not mistaken), my only "complaint" was to do with how it installs and what not, I think you're asked to pick a mirror and packages, someone feel free to point out if my assumption is wrong or if this has changed, I think it's an alright thing, but I rather be able to not even think about what I want to install until after I've installed it.
* Babun - I honestly had a great experience using it, and definitely used it frequently enough, you would run a bat file and it would copy itself into your userdata folder when I used it sometime back, and came with plenty of the tools I wanted and it's own toys.
In the end I say try them all for yourself (if you can) and use whatever is best for you. I would recommend starting out by trying PowerShell before the rest of these because it already comes with Windows sometimes saving you time, but that's just a solution for lazy people.
In the end I ended up just going all in for Linux since my experimentation with these shells. If and when I go back to Windows (it's been half a year now or more) I'll likely use Babun or just plain PowerShell.
The trick with Cygwin is that to install packages you just go back and run the installer again. So you can "think about what to install after you've installed it" if you like, but you can also get the ones you know you'll need (SSH for example) straight off the bat. It's not the most elegant system, but it's ok.
I have a little batch program which automatically checks for the latest cygwin setup then run it to check for package updates in a least intrusive way:
One minor nitpick: Powershell is always available. XP/2003 is well out of support and shouldn't be installed. Vista and 2008 came with it once SP1 was introduced.
Using a UNIX shell on Windows has very few advantages, mainly just familiarity from those coming from a UNIX shell background. Although it is more verbose, PowerShell is quite good.
As for the terminal, the Windows default is pretty awful. It is nowhere close to iTerm in polish or functionality.
I disagree that a Unix shell has few advantages. :) It's critical if you're trying to work in a cross platform environment. If a colleague gives me a .sh script, I need some way to run that.
There's also a huge benefit to having access to the ecosystem of Unix command-line apps. A few of the major ones have been ported over to run natively on Windows, but there's a lot that will never be.
As I mentioned in another comment: Every modern OS except Windows has a Bash-like shell and environment. I can move easily between MacOS, Linux, FreeBSD, Solaris, Android, and iOS, and it feels similar. But every time I use a Windows machine, nothing I've done elsewhere translates. Cygwin helps bridge that gap.
The default terminal got a bit better in Windows 10. I've been trying to run stock for the last few weeks (rather than installing ConEmu (https://conemu.github.io/), which is what I used on Windows 7) and it's been mostly okay. They've still got a long way to go, but at least Copy and Paste finally works.
The weird thing is, I came from Windows, migrated to Linux in the past 2 years or so... been using Windows since 1996 prior... and I can't get used to Powershell. I just hate it. It's so fucking cumbersome. It definitely feels like something that was tacked onto a GUI as an after-thought.
I've been using Powershell for almost all my Windows interactions for the past 4 or 5 years, and there are definitely a few minor things I always end up missing from the UNIX shells. That said its come a long way from the v1 days, and it keeps getting better with every update.
Msys2 is a fork of Cygwin, it does not do away with POSIX emulation, but I find its package management better than Cygwin's. Quite a few packages are supported
Babun and Vagrant together more or less completely solved the Development Problem for me on Windows.
I actually don't use Babun very heavily. I think of it as more of a basic, very pretty Unix-like glue. For the most part I just work inside a Vagrant VM launched from Babun. My workflow basically consists of using tmux and vim as an "IDE", so I actually find myself missing very little.
Why would I prefer this to cygwin? The detail provided here just makes it look like cygwin + a preconfigured zsh. The only advantage appears to be the installer and package manager.
[EDIT] How does this update cygwin when you have programs running that use it? Do you explain to newbies what BLODA is? The one thing I would want preconfigured is sshd which this doesn't appear to provide.
Having just experimented with Babun over the weekend... the package manager is a pretty big deal. It used to be that you had to re-run the Cygwin installer whenever you wanted to add a package. That's just silly.
Outside of that, the biggest difference is it avoids Cygwin's complicated setup process. You run the installer script, it creates a ~/.babun directory, and then it just works. No need to commit to a list of packages at install time. It gives you a very reasonable set of defaults, and if you need more, you just "pact install" it.
Supposedly it has a self-update mechanism that will take care of Cygwin updates. I haven't had it installed long enough to see it in action.
And no, they don't explain what BLOADA is. :) It's also a little tricky to run rebaseall, since the rebaseall tool doesn't like zsh running. (The workaround, btw: "cygstart dash", then proceed with rebaseall.)
Honestly, I just use conemu with bash (installed with gitextensions/msysgit) in windows... except for the /c/... drive starting the path, it's really decent... the paths are a little different bit it pretty much works the same everywhere I need it. I prefix ~/bin/ to my path and setup whatever I need in there.
I personally use ConEmu + babun for my everyday work activity on Windows system. I grow accustomed to it and it's a wonderful replacement when I have to do some lightweight Unixy thing without powering up a VM and when my Ubuntu laptop is out of reach.
i'm forced to use windows as a host to my dev environment at work and i have yet to find a fast enough console/shell. even when you remove plugins and whatever else babun provides to the standard zsh setup it's still not fast enough to do simple things such as cd with some tab-completion a couple of times a second as i'd normally do at home.
the closest thing to somewhat useful i've found is "git for windows" but it too sometimes get stuck sometimes just changing directories and tab-completing.
i'm using a reasonably new i5 thinkpad and i don't think close to instant feedback in a text-only environment is too much to ask.
Does this one work well on the Surface Pro 3? It's been frustrating with other because either they don't handle the high-density well or they aren't touch compatible...
You can use babun together with cmder[0] (which is based on conemu and can do tabs).
Just today I installed both and I'm pretty happy so far.
To use babun in cmder, follow this[1] short explanation.
I've used it before, when stuck on Windows for work, and it's definitely a nice project. However, there still seems to be some kind of impedance mismatch when trying to use a UNIX type shell with a Windows OS. Things just don't feel right.
Still, it's about as close as I've gotten to having something like iTerm and zsh on Windows, and it keeps my sanity, as it means I don't have to use the atrocious Windows command line.
Powershell is great, if what you're doing is scripting or trying to work with a .NET API. However, it's not so great when you want to work with a non-Windows host or work on cross-platform software. Every modern OS except Windows has a Bash-like shell and environment.
It's also missing the huge ecosystem of *nix command line apps. I couldn't see myself living on a machine with Powershell and nothing else, even though this is something Linux users can easily do.
I prefer using both depending on use case. Powershell for working with Windows Objects and terminal stuff that doesn't play as nicely with a POSIX like shell. Cygwin for everything else (git, bash, ssh, etc).
Cygwin is also much more than a shell (if comparing to powershell), so there's reason to have something like it beyond scripting.
An extensive write up on the features, advantages, disadvantages, and the use cases for each, is sorely needed.