Tracing the origins of PowerShell: from the fragile Batch and VBScript, the birth of the Monad project in 2006, the evolution from version 1.0 to the cross-platform 7, the reasons why the world needs PowerShell, its comparison with CMD, Python, and Bash, and its real-world use cases.

After ensuring in episode 0 that your environment is ready — command line skills, adequate hardware, and a verified pwsh — in this episode we step back for a moment to answer a question that is rarely asked but hugely important: where does PowerShell come from, and why does the world need it?
This question is not just historical trivia. Understanding the background of PowerShell answers three practical questions: (1) why PowerShell is designed differently from CMD or Bash, (2) when you should write PowerShell and when it's wiser to use Python, and (3) why almost all modern Windows administrators rely on it — from physical servers to the cloud. Just as understanding a language's history helps you use it better, understanding the shell's history means you know not just how to use it, but when to use it.
Before PowerShell, Windows admins wrote Batch — .bat or .cmd files containing Command Prompt commands. Batch works on a simple model: text in, text out. For small jobs like copying files or running programs, this was enough. But as soon as the job required logic — checking the result of a command, filtering output, making decisions — Batch became very fragile. Output could differ between Windows versions, spaces in strings broke parsing, and there was no clean way to process structured data.
In 1999 Microsoft released Windows Script Host (WSH), which allowed VBScript to run directly on Windows. This was real progress: VBScript had variables, conditionals, and loops far better than Batch, and it could access the system through COM objects. However, VBScript was also text-centric — manipulating data still meant parsing text, and the syntax felt rigid. Automating administration in VBScript felt like writing an essay with a hammer.
Windows Management Instrumentation (WMI) gave Windows access to a very rich set of system data — processes, services, hardware, events — in the form of objects. This was a big step forward, but its interface was hostile to beginners: verbose WQL syntax, output that was hard to combine with other commands, and virtually no integration between tools. Admins had plenty of data but still struggled to automate their daily work smoothly.
In the early 2000s, Jeffrey Snover, the architect later called the "father of PowerShell", wrote a document called the Monad Manifesto with one central idea: making Windows manageable. At the time, Unix had powerful shells with pipelines, while Windows had many separate tools that weren't connected to each other. Snover proposed a new shell that used an object-based pipeline — not text.
The core idea was simple yet revolutionary: in traditional shells, a command's output is text that must be re-parsed by the next command. In Monad, a command's output is a .NET object that can be directly filtered, selected, and piped — with no text parsing at all. The project was renamed Windows PowerShell and released in November 2006. From that point on, the way the world managed Windows changed completely.
| Version | Year | Highlights |
|---|---|---|
| 1.0 | 2006 | First release; basic cmdlets and object pipeline |
| 2.0 | 2009 | Remoting (WinRM), background jobs, ISE |
| 3.0 | 2012 | Workflows, scheduled jobs, performance improvements |
| 4.0 | 2013 | Desired State Configuration (DSC) |
| 5.0 / 5.1 | 2016 | Class, OneGet; became built into Windows 10 |
| Core 6.0 | 2018 | Cross-platform: Linux and macOS |
| 7.0+ | 2020 | Modern, unified, open source on GitHub |
The most important point from this table: since PowerShell Core 6.0 (2018), PowerShell is no longer exclusive to Windows — and since 7.0 (2020), development has been fast, open, and cross-platform. Windows PowerShell 5.1 remains maintained for compatibility, but all new features are born in 7+.
This is the biggest differentiator. In CMD, piping output means sending raw text — the next command has to guess at the format. In PowerShell, the pipeline sends objects with structured properties. Look at the Get-Service command below — how expressive it is:
Get-Service | Where-Object Status -eq "Running" | Select-Object Name, StartTypeWhere-Object filters by the Status property, not a parsed string. This reads like a human language, not a puzzle.
PowerShell introduced the Verb-Noun convention: every command is named with the pattern Verb-Noun, for example Get-Process, Stop-Service, Set-Content. Once you know the pattern, guessing the names of commands you've never seen becomes possible. Neither Batch nor Bash has this consistency.
Every cmdlet and value in PowerShell is a .NET object — which means the entire .NET framework library is available inside your scripts: JSON parsing, cryptography, networking, file I/O, and even COM and WMI interfaces. You get the power of a full programming language without switching tools.
Through WinRM (and SSH in PowerShell 7), a single console can manage thousands of servers remotely — running commands, collecting data, pushing configuration — without logging in one by one. This is what makes enterprise-scale automation practical.
Since 6.0/7.0, PowerShell runs on Linux and macOS, and has modules for Azure, AWS, and GCP. One skill, many targets — from local Windows Server to production cloud.
Repetitive manual work isn't just boring — it's error-prone. Automating with PowerShell makes identical tasks execute identically every time: configuring 50 servers, daily reports, security audits. Humans forget; scripts don't.
| Aspect | CMD/Batch | PowerShell | Python | Bash |
|---|---|---|---|---|
| Paradigm | Text | .NET objects | Objects/multiple | Text |
| Primary target | Windows | Windows + Linux/macOS | All platforms | Linux/macOS |
| Strength | Simple | Windows & cloud administration | Complex logic/data | Unix system automation |
| Output parsing | Manual, fragile | Direct object properties | Manual | Manual |
| Language features | Minimal | Complete (class, functions) | Very complete | Adequate |
Rule of thumb: use PowerShell for work that "has Windows DNA" — services, AD, registry, Azure, system files — and for automation pipelines that need consistency. Python is better suited to data analysis and complex business logic. Bash excels in mature Unix environments. All three can coexist — but for Windows administration, PowerShell is the first language, not an afterthought.
New-ADUser and friends.In episode 1 we've understood that PowerShell is the answer to decades of Windows administration problems: the text-centric and fragile Batch and VBScript, the data-rich but complicated WMI, and the birth of Monad (2006) which introduced the object-based pipeline. We've also traced the version evolution from 1.0 to the cross-platform 7.0, the reasons the world needs it — objects, consistency, .NET, remoting, cloud, and large-scale automation — as well as its position against CMD, Python, and Bash.
Key takeaways:
Now you know why PowerShell exists. In the next episode, episode 2, we go straight into practice: PowerShell fundamentals & console basics — dissecting powershell.exe vs pwsh.exe, cmdlet structure, how to read help with Get-Help, exploring commands with Get-Command, and understanding execution policy. See you in episode 2!