Opening PowerShell
Launch your first terminal, run your first command, and understand exactly what just happened.
- What PowerShell actually is (and isn't)
- Opening the terminal on any Windows machine
- Running Get-Date — your first real command
One lesson lands in your inbox every morning. Each one is short enough to read with your coffee and practical enough to use before lunch. By day 30, you'll have a toolkit you built yourself.
PS30 is an email course, not a platform you have to log into. Each morning you get one focused lesson with a hands-on exercise. No videos, no subscriptions, no pressure.
A new lesson arrives each morning. Read it in your email client, no login required. Each one is self-contained — miss a day, just pick back up.
Every lesson ends with a hands-on exercise you can run in minutes. Type the commands. See the output. Build the muscle memory that makes skills stick.
Many lessons link to a full module on this site where you can dig further. PS30 teaches the concept; the ASFS module gives you the depth.
Open the terminal. Run commands. Read output without fear.
Understand objects, manipulate data, store results in variables.
Write logic that branches, loops, reads files, and outputs CSV.
Build reusable functions, handle errors, call APIs, install modules.
Deploy scheduled automation and ship your personal toolkit.
Every lesson is a single, focused idea with a practical exercise. Lessons marked with a module badge have a full companion module on this site — more code, more context, more examples.
The terminal stops being scary
Launch your first terminal, run your first command, and understand exactly what just happened.
Every PowerShell command follows the same Verb-Noun pattern. Once you see it, you can't unsee it.
PowerShell ships with a full documentation system. No Stack Overflow required for the basics.
Move around your machine from the terminal. Set-Location, Get-Location, and why they beat the GUI.
Get-ChildItem is the Swiss Army knife of file discovery. Today you'll use it six different ways.
The pipe character | is the most powerful key on your keyboard. Here's why it changes everything.
Consolidate the week with a real one-liner challenge: find all log files older than 30 days and count them.
PowerShell thinks differently — so will you
PowerShell doesn't pass text between commands — it passes rich objects with properties and methods.
Stop looking at walls of output. Select-Object and Format-Table give you exactly the columns you want.
Sort-Object, Group-Object, and Measure-Object — the analytics trio that turns raw data into answers.
Store anything in a variable: a string, a number, an entire directory listing. Variables make scripts real.
Strings are everywhere. Today: concatenation, interpolation, substrings, replace, split, and join.
Arithmetic, comparisons, and date math. Calculate how many days until a deadline, or how old a file is.
Collect multiple values in an array. Map keys to values with a hashtable. Both are everywhere in real scripts.
Scripts that make decisions and repeat themselves
Make your script smart. Branch on file existence, size, age, or any condition you can express.
The pipeline's loop. Process every file, every user, every row — one object at a time.
Loop until a condition is met. Poll a service, retry an operation, wait for a file to appear.
Get-Content, Set-Content, Add-Content, Out-File. Text files are the universal glue of automation.
Import a spreadsheet, process every row, export the results. This alone saves hours every week.
APIs speak JSON. PowerShell 7 speaks JSON fluently. ConvertFrom-Json and ConvertTo-Json are your translators.
Build a log parser: read a folder of .log files, extract lines matching a pattern, export a CSV summary.
Professional-grade code from scratch
Stop copy-pasting. A function wraps reusable logic behind a name you can call whenever you need it.
Functions that accept arguments are infinitely more useful. Add [Parameter(Mandatory)] and sleep easy.
Real scripts break on real systems. Catch the error, log it, decide whether to stop or keep going.
Graduate from the console to persistent scripts. Execution policy, dot-sourcing, and running scripts on a schedule.
Thousands of pre-built commands are one Install-Module away. Today you install your first module and use it.
Patterns that match text. Sounds scary, is actually just a language for describing what you're looking for.
Invoke-RestMethod turns any REST API into PowerShell objects. Query the weather, your ticketing system, anything.
Ship something real
Scheduled tasks, Active Directory basics, and remote execution. The tools that separate a scripter from a sysadmin.
You've done it. Day 30: build the utility module you'll actually use — the one tailored exactly to your job.
PS30 teaches PowerShell in daily bite-sizes. The ASFS curriculum on this site goes further — richer explanations, more code examples, and structured exercises for when you want to really own a concept rather than just recognise it.
Day cards marked with a Module badge link to the corresponding ASFS module. Start with the daily email; revisit the module when something clicks and you want to push deeper.
PS30 is in its final stages. Drop your email and we'll send you a note the moment Day 1 is ready to land in your inbox. No spam, no placeholder content — just a single message when it's live.
The full 30-day curriculum above is the real thing — no filler. You're signing up for exactly what you see.
Yesterday you ran commands one at a time. Today we chain them together. The pipe takes the output of one command and feeds it as input to the next — and because everything is an object, that means rich data flows between commands, not just text.
Get-Process |
Where-Object CPU -gt 100 |
Sort-Object CPU -Descending |
Select-Object Name, CPU -First 5 Exercise: Run this in your terminal. What's the most CPU-hungry process on your machine right now?