You are about to wipe a folder on a locked work laptop. Recycle Bin is policy-disabled. There is no "oops, restore from backup" button for the next ten minutes. Remove-Item will do exactly what you typed — including the path you thought you typed. The only free safety net is a dry run.

Mental model: preview, then destroy

Remove-Item (aliases: rm, del, ri) deletes files and folders. Two common parameters change how sure you are before anything is gone:

Switch What it does When to use it
-WhatIf Prints what would be deleted. Touches nothing. Always before a recursive or wildcard delete
-Confirm Asks Yes/No/All for each target (or a batch prompt) Interactive cleanup when you want a human gate
-Recurse Walks into folders Folder trees — and the place most people regret speed
-Force Overrides read-only / hidden / some prompts Only after -WhatIf looked correct

On Windows PowerShell 5.1 and PowerShell 7 the switches work the same for this workflow. The difference that matters is you, not the version: dry-run first, then remove the safety switch.

Recipe 1: dry-run with -WhatIf

Remove-Item C:\Logs\*.tmp -WhatIf 

You get lines like What if: Performing the operation "Remove File" on target "C:\Logs\old.tmp". Read every path. If one of them is C:\Logs itself or a sibling you did not mean, stop. Fix the pattern. Run -WhatIf again until the list is boring and correct.

Wildcard preview for a whole tree of junk:

Get-ChildItem C:\Temp\BuildCache -Recurse -File | Where-Object { $_.Extension -in '.tmp','.log','.bak' } | Remove-Item -WhatIf 

Piping into Remove-Item -WhatIf still only simulates. Nothing is deleted until you drop -WhatIf.

Recipe 2: -Confirm when you want a human gate

Remove-Item C:\Staging\* -Confirm 

PowerShell prompts before each item (or offers Yes to All). Use this when the set is small and you are watching the screen. Do not rely on -Confirm inside a scheduled task or a script that runs unattended — there is nobody to answer, and depending on host settings the call can hang or fail.

For scripts, prefer the -WhatIf review in a terminal, then a second run without it. For interactive one-offs at a desk, -Confirm is fine.

Combine both when you are nervous:

Remove-Item C:\Staging\export-2026-10-15 -Recurse -Confirm -WhatIf 

-WhatIf wins: you still get a preview and no delete. Drop -WhatIf when the preview is approved; keep -Confirm if you still want click-through safety.

Recipe 3: delete a folder tree carefully

A non-empty folder refuses a bare Remove-Item without -Recurse:

# Fails if C:\Logs\OldRuns still has files Remove-Item C:\Logs\OldRuns 

The careful pattern:

# 1) Preview the tree Get-ChildItem C:\Logs\OldRuns -Recurse | Select-Object FullName # 2) Dry-run the delete Remove-Item C:\Logs\OldRuns -Recurse -WhatIf # 3) Only then Remove-Item C:\Logs\OldRuns -Recurse 

On locked corporate images, deleted items often skip the Recycle Bin entirely when removed from PowerShell. Treat step 2 as mandatory, not optional theater.

PowerShell 7 tip: same switches. If you delete large trees often, preview with Get-ChildItem first so you see count and depth before Remove-Item walks them again.

Recipe 4: the footgun — wrong path, wildcards, and -Force

These are the tickets that start with "I only meant to clear temp files."

Wrong path / too-broad wildcard

# Looks local. If you are in C:\ and mistype, you can match far more than you think. Remove-Item .\* -Recurse -Force -WhatIf 

Always prefer an absolute path for destructive work:

Remove-Item C:\Apps\MyService\cache\* -Recurse -WhatIf 

-Force hides warnings

-Force clears the read-only bit and pushes through some confirmation paths. It does not make a bad path safe. Combining -Recurse -Force without a prior -WhatIf is how a typo in C:\Logs becomes C:\Log or worse.

Hidden / system files

Get-ChildItem C:\Logs -Force -Recurse | Where-Object { $_.Name -like '*.tmp' } | Remove-Item -WhatIf 

Use -Force on Get-ChildItem to see hidden targets in the preview. Use -Force on Remove-Item only after that list looks right.

Providers other than the filesystem

Remove-Item also works on registry keys, certificates, and other providers. A path that starts with HKLM:\ or Cert:\ is not a folder on disk. If your muscle memory is filesystem-only, pause when the provider prefix is not C:\ / \\server\share.

A safe default ritual

  1. Write the command with a full path.
  2. Append -WhatIf.
  3. Read the preview like a change ticket.
  4. Re-run the same line without -WhatIf (add -Confirm if you still want prompts).
  5. Keep -Force off until a read-only/hidden block is a known, reviewed exception.

That ritual is slower than a one-liner. It is also how you keep your job and the team's night quiet.

Practice deletes somewhere that cannot hurt production

The scary part of Remove-Item is that real machines forgive typos slowly. In CMD Master's interactive PowerShell lessons you can run Remove-Item, -WhatIf, and -Confirm in a live browser terminal with instant feedback — no install, no VM, no Recycle Bin policy surprises. The same free Windows command line practice site covers CMD and Bash when you hop between shells.

Your turn: what is the worst almost-delete -WhatIf ever saved you from? Drop the story (sanitized paths welcome) in the comments.