If you immerse yourself in Microsoft history for long enough, you’ll come across more than one story about staff trying to add more command-line features to its operating systems. The plans go up the corporate tree, to the rarified heights of a Bill Gates review, where the executives ask, “What part of the name Windows do you have a problem with?”
Corporate legends aside, Windows on both the desktop and server have long been the province of GUIs, point-and-click experiences driving everything from files on desktop PCs to managing entire virtual networks in the public cloud. That was all very well when you were dealing with tens of PCs and a handful of servers in an office. It even still worked for client-server enterprise applications or a small farm of web servers.
Now, however, we have the cloud; in its public, private, and hybrid guises. Automated system administration tools orchestrate our applications and manage our virtual machines in heterogeneous environments that mix and match operating systems and management philosophies. Infrastructure is now code, and the data center an operating system. What now for the GUI? It’s at heart a tool for one machine, one that needs an operator — not the automation that’s required for operations at scale.
From cmd.exe to PowerShell
Microsoft’s original command line, cmd.exe, wasn’t ready for this new world, offering just simple batch-command capabilities and basic scripting. That’s where comes in. Building on .Net and lessons from Unix shell environments, it’s at heart a systems administration programming language.
. More distributions and alternative shells are coming, but Bash’s wide adoption make it an attractive route to bringing Unix tool chains to Windows. Ubuntu’s wide catalog of software, and its easy apt-get installation and update features mean you can quickly go from a bare prompt to a fully featured set of tools in a matter of minutes. SSL capabilities give you remote access to Unix servers, and Windows software is treated just like Linux binaries: Set a path so you can launch apps straight from the command line.
Bash is becoming an important piece of Microsoft’s developer outreach, making Windows accessible to the developers who’ve been using MacOS for its Unix tools. It’s soon to go beyond the desktop, with a Bash-based Azure command line in preview in the Azure web portal and in its new iOS and Android management apps. The Azure command line will also soon support PowerShell, with a simple dropdown menu for switching personalities on the fly.
Visual Studio Code gets a terminal
Microsoft’s open-sourced developer’s editor, , recently added an integrated terminal. By default, it uses your system’s preferred command line, but it’s easy to switch between cmd.exe and PowerShell, and even to open a Bash terminal if you’re running Windows Subsystem for Linux. The way we write and debug code is changing, and a terminal can help test not just Node.js applications but also explore containers or drive Git and other modern development tools.
Having access to a terminal inside an IDE has other advantages, beyond test and debug. It’s a way of connecting to other machines, giving remote access to GUI-less servers running Linux or Microsoft’s own . It’ll even allow remote control of installs. With much of the modern devops tool chain coming from the Linux world, direct access to your build engines, your deployment tools, and your source code repository is essential. Bringing Windows Subsystem for Linux into Visual Studio Code simplifies what could have been complex.
You’re not limited to a single terminal, so you can have one terminal running PowerShell for systems management of your local and cloud servers and one terminal running Bash for testing node apps or working with GitHub. It’s a flexible approach, and one that takes advantage of Windows’s newfound love of the command line.
We live in a world of many different computing models, all working together, all working at scale. Command-line tools like those in the latest Windows releases simplify both administration and development, giving access to a powerful cross-platform tool chain for working with the cloud and for taking advantage of modern devops processes.