WhatIf and Confirm help you test commands safely before making changes. They prevent mistakes by showing what would happen or asking for approval.
WhatIf and Confirm support in PowerShell
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
PowerShell
Cmdlet-Name -WhatIf Cmdlet-Name -Confirm
-WhatIf shows what the command would do without doing it.
-Confirm asks you to approve each action before it runs.
Examples
PowerShell
Remove-Item -Path "C:\Temp\file.txt" -WhatIfPowerShell
Stop-Service -Name "Spooler" -ConfirmPowerShell
Remove-Item -Path "C:\Temp\file.txt" -ConfirmSample Program
This function uses both -WhatIf and -Confirm. -WhatIf takes precedence, so it shows what would happen without prompting for confirmation or performing the action.
PowerShell
function Remove-MyFile { param( [string]$Path ) Remove-Item -Path $Path -WhatIf -Confirm } Remove-MyFile -Path "C:\Temp\example.txt"
Important Notes
Not all cmdlets support -WhatIf and -Confirm. Check the cmdlet help.
You can force confirmation with -Confirm:$true or skip it with -Confirm:$false.
-WhatIf is great for testing scripts safely before running them.
Summary
-WhatIf shows what a command would do without doing it.
-Confirm asks you to approve actions before they happen.
Use them to avoid mistakes and test commands safely.
Practice
1. What does the
-WhatIf parameter do when used with a PowerShell command?easy
Solution
Step 1: Understand the purpose of -WhatIf
The-WhatIfparameter simulates the command's effect without making changes.Step 2: Compare options to the definition
Only It shows what the command would do without actually performing the action. correctly describes this simulation behavior.Final Answer:
It shows what the command would do without actually performing the action. -> Option DQuick Check:
-WhatIf simulates action = D [OK]
Hint: WhatIf means "show only, don't do" [OK]
Common Mistakes:
- Thinking -WhatIf runs the command fully
- Confusing -WhatIf with -Confirm
- Assuming it cancels the command
2. Which of the following is the correct way to add confirmation support to a PowerShell function?
easy
Solution
Step 1: Recall how to enable Confirm support
PowerShell functions use[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')]to support -WhatIf and -Confirm.Step 2: Check each option
Only Add[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')]above the function. correctly shows the attribute syntax to enable confirmation support.Final Answer:
Add [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')] above the function. -> Option AQuick Check:
Enable Confirm with CmdletBinding attribute = C [OK]
Hint: Use CmdletBinding attribute to enable Confirm support [OK]
Common Mistakes:
- Adding param switch instead of CmdletBinding
- Using Write-Host for confirmation prompts
- Trying to put -Confirm in function name
3. Given this function with Confirm support:
What happens when you run
[CmdletBinding(SupportsShouldProcess=$true)]
function Remove-File {
param([string]$Path)
if ($PSCmdlet.ShouldProcess($Path)) {
Remove-Item $Path
}
}What happens when you run
Remove-File -Path 'test.txt' -WhatIf?medium
Solution
Step 1: Understand the function's use of ShouldProcess
The function calls$PSCmdlet.ShouldProcess($Path), which respects -WhatIf and -Confirm.Step 2: Effect of running with -WhatIf
Using -WhatIf causes ShouldProcess to return false but show what would happen, so Remove-Item is not called.Final Answer:
It shows a message about deleting 'test.txt' but does not delete it. -> Option AQuick Check:
-WhatIf shows action, no delete = B [OK]
Hint: ShouldProcess respects -WhatIf to simulate actions [OK]
Common Mistakes:
- Assuming -WhatIf deletes files
- Confusing -WhatIf with -Confirm
- Thinking function lacks support for -WhatIf
4. You wrote this function:
But when you run
function Delete-Data {
param([string]$File)
if ($PSCmdlet.ShouldProcess($File)) {
Remove-Item $File
}
}But when you run
Delete-Data -File 'data.txt' -Confirm, it does not ask for confirmation. Why?medium
Solution
Step 1: Check function attributes for Confirm support
The function is missing[CmdletBinding(SupportsShouldProcess=$true)], which enables -Confirm and -WhatIf support.Step 2: Understand effect of missing attribute
Without this attribute, the function ignores -Confirm and does not prompt.Final Answer:
The function lacks [CmdletBinding(SupportsShouldProcess=$true)] attribute. -> Option BQuick Check:
Missing CmdletBinding disables Confirm = A [OK]
Hint: Add CmdletBinding to enable -Confirm prompts [OK]
Common Mistakes:
- Thinking -WhatIf enables confirmation
- Adding Confirm parameter manually
- Assuming Remove-Item disables confirmation
5. You want to write a PowerShell function that deletes files but only after confirmation, and also supports
-WhatIf. Which code snippet correctly implements this?hard
Solution
Step 1: Identify correct use of CmdletBinding and ShouldProcess
[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='High')] function Remove-MyFile { param([string]$Path) if ($PSCmdlet.ShouldProcess($Path, 'Remove')) { Remove-Item $Path } } uses[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='High')]and calls$PSCmdlet.ShouldProcess, enabling both -Confirm and -WhatIf support.Step 2: Check other options for missing or incorrect usage
function Remove-MyFile { param([string]$Path, [switch]$Confirm) if ($Confirm) { Remove-Item $Path } } lacks CmdletBinding and misuses Confirm as a manual switch. [CmdletBinding()] function Remove-MyFile { param([string]$Path) Remove-Item $Path -Confirm } lacks SupportsShouldProcess and forces -Confirm on Remove-Item only. function Remove-MyFile { param([string]$Path) Remove-Item $Path -WhatIf } always uses -WhatIf, which is not correct for actual deletion.Final Answer:
[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='High')] with $PSCmdlet.ShouldProcess -> Option CQuick Check:
CmdletBinding + ShouldProcess = A [OK]
Hint: Use CmdletBinding and ShouldProcess for full Confirm and WhatIf [OK]
Common Mistakes:
- Forgetting CmdletBinding attribute
- Manually adding Confirm switch parameter
- Always using -WhatIf inside function
