Most PowerShell guides start by teaching you the language. That’s the wrong end to start from if you’re a Windows admin with a job to do. You don’t need to learn PowerShell in the abstract — you need to replace three or four things you currently do by hand, and let the rest follow from there.
This guide takes that route. It covers which version you should actually be running in 2026, the handful of commands that unlock everything else, and the specific habits that separate scripts that work on your machine from scripts that work everywhere.
Quick Facts
- Windows PowerShell 5.1 ships with Windows and isn’t going away — it’s still what most existing scripts and scheduled tasks run on.
- PowerShell 7.6.5 LTS (released March 2026, supported to November 2028) is the version to install for new work. It installs alongside 5.1, not over it.
- You only need four commands to explore everything else:
Get-Command,Get-Help,Get-MemberandGet-Module. - PowerShell passes objects, not text. This is the single concept that makes everything else click.
- Execution policy is not a security boundary — it’s a guardrail against accidents.
Which version should you actually be running?
This trips people up constantly, because there are two PowerShells on a modern Windows machine and they’re both legitimate.
| Windows PowerShell 5.1 | PowerShell 7.6 LTS | |
| Executable | powershell.exe | pwsh.exe |
| Ships with Windows | Yes | No — separate install |
| Built on | .NET Framework | .NET 10 |
| Cross-platform | No | Yes (Windows, Linux, macOS) |
| Supported until | Lifecycle of Windows | 14 November 2028 |
| Use it for | Existing scripts, legacy modules | Everything new |
The practical answer: install 7.6 LTS and use it for new work, but don’t rip 5.1 out. They coexist deliberately. Some older modules — particularly ones that lean on .NET Framework assemblies — still only work under 5.1, and you’ll occasionally need to drop back.
Installing is a one-liner via winget:
winget install --id Microsoft.PowerShell --source winget
Check what you’re actually running at any point with $PSVersionTable. Note that’s a variable, not a command — one of PowerShell’s small inconsistencies.
The one concept that makes PowerShell click
If you’ve come from batch files or bash, you’re used to commands producing text, which you then chop up with tools like findstr, awk or sed. PowerShell doesn’t do that. Commands produce objects — structured things with named properties.
Compare the two approaches to “find processes using more than 500MB of memory”. In a text world you’d run tasklist, then parse columns by character position and hope nothing shifts. In PowerShell:
Get-Process | Where-Object WorkingSet -gt 500MB | Sort-Object WorkingSet -Descending
No parsing. WorkingSet is a property on the object, and 500MB is a number PowerShell understands natively. Nothing breaks when a column widens or a process name contains a space.
This is why Get-Member matters more than any tutorial will tell you. Pipe anything into it and you get the full list of properties and methods available:
Get-Service | Get-Member
The four commands that unlock the rest
Quick Steps
Get-Command *service*— find commands you don’t know the name of yet.Get-Help Get-Service -Examples— see real usage rather than parameter syntax.Get-Service | Get-Member— discover what properties an object actually has.Get-Module -ListAvailable— see what’s already installed and available to you.
Run Update-Help once as administrator before you rely on Get-Help — on a fresh install the help content isn’t downloaded yet, and the examples are the genuinely useful part.
If you learn better by watching someone work through it, this is a solid half-hour primer that covers the same ground before you start writing your own scripts:
Execution policy — what it does and doesn’t do
The first wall most people hit is a script refusing to run. The instinct is to set execution policy to Unrestricted and move on. Don’t.
Execution policy is not a security control — Microsoft say so explicitly. Anyone who can run PowerShell can trivially bypass it. What it is is a guardrail that stops someone double-clicking a .ps1 they were emailed. That’s worth keeping.
RemoteSigned is the sensible setting for a working admin machine: local scripts run, downloaded ones need a signature.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Note -Scope CurrentUser — it avoids needing admin rights and avoids changing the policy for every user on the machine.
Four habits that separate working scripts from fragile ones
1. Use full cmdlet names in scripts
Aliases like ls, gci and % are fine when you’re typing interactively. In a saved script they’re a liability — aliases differ between platforms and can be redefined. Write Get-ChildItem and ForEach-Object.
2. Filter left, format right
Filter as early in the pipeline as possible, and never pipe a Format-* command into anything else. Formatting destroys the objects and leaves you with display data.
# Good — filtering happens at the source
Get-ChildItem -Path C:\Logs -Filter *.log -Recurse
# Bad — pulls everything, then discards most of it
Get-ChildItem -Path C:\Logs -Recurse | Where-Object Name -like "*.log"
3. Use -WhatIf before anything destructive
Most commands that change something support -WhatIf. It tells you what would happen without doing it. Make it reflex on anything with Remove, Set, Stop or Disable in the name.
4. Don’t build paths by hand
Use Join-Path rather than string concatenation. It handles trailing separators correctly and survives being run on a machine configured differently to yours.
Glossary
| Term | What it means |
| Cmdlet | A built-in PowerShell command, always named Verb-Noun (e.g. Get-Service). |
| Pipeline | Passing the output of one command into the next using |. In PowerShell these are objects, not text. |
| Object | A structured item with named properties, rather than a line of text to be parsed. |
| Module | A packaged collection of cmdlets, e.g. the ActiveDirectory module. |
| PSGallery | Microsoft’s public repository of community and vendor modules. |
| Execution policy | A safety guardrail controlling which scripts run. Not a security boundary. |
| Splatting | Passing parameters via a hashtable to keep long commands readable. |
Frequently asked questions
Do I need to uninstall Windows PowerShell 5.1 before installing PowerShell 7?
No, and you shouldn’t. They install to different locations and run as different executables — powershell.exe and pwsh.exe. Windows components and older modules still depend on 5.1.
Is PowerShell 7 a replacement for Windows PowerShell?
For new work, yes. As a wholesale replacement, no. Windows PowerShell 5.1 remains a supported component of Windows and continues to receive security fixes as part of the operating system, but it isn’t getting new features.
Why does my script work interactively but fail as a scheduled task?
Almost always one of three things: it runs as a different account without the same permissions, it relies on a mapped drive that only exists in your interactive session, or it assumes a working directory. Use full UNC paths and never assume the current directory.
Should I learn PowerShell or Python as a Windows admin?
PowerShell first, if your day job is Windows. It’s already on every machine you manage, it talks natively to Active Directory, Exchange, Microsoft 365 and Azure, and it doesn’t need a runtime deploying. Python is a good second language, not a substitute.
What’s the difference between LTS and Stable releases?
LTS releases get a longer support window — 7.6 LTS is supported until November 2028. Stable releases get newer features but shorter support. For production admin work, take the LTS.
Where to go next
Pick one thing you currently do by hand every week and rewrite it. Not something critical — something annoying. Exporting a list of users, checking disk space across servers, clearing a log directory. You’ll learn more from one script you actually use than from any amount of reading.
Gear We Recommend
Testing scripts is easier with a dedicated admin machine set up right. Here’s the kit we use.
Browse our Admin Machine picks on AmazonAs an Amazon Associate, TechyGeeksHome earns from qualifying purchases
Disclosure: this post may contain affiliate links. If you buy through one of them, we may earn a small commission at no extra cost to you. We only recommend products we’ve tested or genuinely rate.
Discover more from TechyGeeksHome
Subscribe to get the latest posts sent to your email.