If you possess even the most passing familiarity with terminal emulators on computers, you’ve likely heard of Linux’s Bash and Microsoft’s PowerShell. Both of these are ubiquitous in the lives of professionals specializing in either operating system. However, if you aren’t living your day-to-day life in front of a shell prompt, you likely haven’t given much thought to how the two would compare. In that case, there’s never been a better time to learn!
What Is PowerShell
Microsoft introduced Powershell in 2006 to act as a command line interface that runs on top of a versatile and powerful scripting framework. It was designed to help Windows administrators to build small applications that make use of “commandlets” (known officially as “cmdlets”) to automate a large portion of their work.
More importantly, its command structure and “scriptability” represents a complete rework of the old MS-DOS that Windows was originally built on top of. It has a more uniform syntax and way of presenting information that’s easy to get accustomed to and code with.
This isn’t meant to replace the Windows command line that most people are used to running but instead complements it with its own automation and configuration functions. For example, if you’re trying to manage a Microsoft Azure service on the cloud, you can now do that with the Connect-AzAccount
command instead of using a remote desktop session.
Like Bash, PowerShell is fully auditable, allowing for use in very sensitive environments where it’s critical to know everything that happens within the system.
Tip: Just in case you are wondering, the command prompt and the Powershell are not quite the same. Here are the differences between command prompt and Powershell.
What Is Bash
Bash is the granddaddy from 1989 that stays relevant within Linux environments regardless of all the fancier shells that have attempted to eclipse it. Much like PowerShell, Bash provides a framework with which to write scripts to automate administration much more easily.
Because its command structure and syntax are ubiquitous among various Linux distributions, BSD, and even macOS, many developers have grown accustomed to using Bash as their go-to for organizing their projects.
Although Bash contains a base suite of operations that allow you to write scripts and relay information through the terminal, almost every command you type into a terminal with this shell is a separate program. For example, Bash does not include the ls
(list files) or cat
(concatenate, or show the output of a file) commands, but instead looks for executables of the same name within specified paths.
Powershell vs Bash: Differences
PowerShell and Bash may look similar when you first learn how to use them, but they are essentially completely different beasts with design philosophies that sometimes clash. Here are some very crucial things that set them apart:
1. User Access Control
If you ever want to do something administrative with Bash, all you have to do is precede your command with sudo
. Once the command is done, you’re immediately brought back to the user shell. Executing a root command leaves less room for error and forces you to review what you’re doing.
PowerShell, on the other hand, can only run in either administrative or user mode. If you want to switch between them, you have to open a new session. To open PowerShell in administrative mode, you must right-click the program icon and click “Run as administrator”. Alternatively, within one terminal session, you can just type Start-Process powershell -verb runAs
and it will open a second session with administrative privileges.
2. Output
When you type a command in Bash, you are basically running a separate program, and that executable will give you the result you want. How the output is formatted depends on how the developer of that particular program wanted it formatted.
There’s a lot of flexibility here, which is great, but the downside is a lack of uniformity.
Command output in PowerShell is typically formatted under one single unified standard. The text you see on the screen is a human-readable version of data that can be interpreted by other programs.
This lets people who write scripts and applications just use PowerShell’s own features and commands to grab all the information they need.
3. Syntax
Bash uses a very unique syntax (e.g., if [condition]; then code here; fi
) that isn’t typically seen in other scripting languages. It’s not incredibly difficult to use, but it can be a bit unconventional for someone who is just starting to learn how to write scripts.
As for user commands, there’s no clear uniformity. Every single program comes with its own command syntax. You have to know how to use them before you can integrate them into your bash script.
PowerShell’s scripting syntax is similar to any other .NET application (e.g., if (condition) { ...code here... }
). For people accustomed to developing within Microsoft’s own ecosystem, there is almost no learning curve involved.
User commands follow a rigid structure: a verb, followed by a dash, followed by a noun. For example, Get-ChildItem
will list all the files in the current directory. Commands that are not specific to PowerShell can still follow a structure similar to Bash. If you’re using it on Linux, you’ll still be able to execute every Linux command.
4: Flexibility
If you master Bash, you will know how to operate with the terminal environments of countless Linux distros, the BSD ecosystem, and even macOS. It’s by far the king of universality. Although macOS switched to zsh in 2019, it still has the Bash spirit at its core.
PowerShell is capable of running inside virtually any operating system, but it is primarily meant to run alongside Microsoft’s own products. If you’re using it, you’re very likely doing so within Windows.
If all you learn is PowerShell-specific conventions, you’re essentially going to be stuck on an island with Microsoft’s products. Although that doesn’t have to be the case, there’s no escaping the fact that the shell only truly shines in that situation. As far as downsides go, however, it’s one that comes with an enormous chunk of the global desktop market share.
Frequently Asked Questions
Can I run bash inside Windows and PowerShell inside Linux?
To run bash within Windows, simply install the Windows Subsystem for Linux by running a command prompt as administrator and typing wsl --install
. You will have instant access to bash commands after the installation finishes.
PowerShell inside Linux is a little trickier and distro dependent. Microsoft includes instructions on its website for installing PowerShell on the most popular distros. You may notice that Arch Linux is missing from that list, but it exists as the powershell
package in the AUR.
Do I need Bash in Windows?
Not necessarily, but it will help you a great deal if you plan to use some things that are designed more for Linux (Python, Git, etc.). Having it around couldn’t hurt. Using Windows Subsystem for Linux to install Bash also lets you have a full Linux shell to experiment with, which is a great way to introduce yourself to the operating environment if you are unfamiliar.
Do Windows DOS commands work in PowerShell?
They generally do. PowerShell is not a replacement for the original Windows command prompt. Instead, it’s a layer that works on top of it to provide new functionality. You probably won’t miss out on anything if you just use PowerShell instead of the tried-and-true cmd.exe.
Our latest tutorials delivered straight to your inbox