The correct way to implement -Whatif and -Confirm in a Powershell Cmdlet When I first learned about `[CmdLetBinding()]` to add automatic support for `Write-Verbose` I didn't understand why -WhatIf and -Confirm were not passed to Cmdlets used in my functions. --- I wrote functions like this to fake it: function Set-BadIdea { [CmdLetBinding()] Param( [string]$File, [switch]$Whatif, [switch]$Confirm ) Remove-Item $File -WhatIf:$WhatIf -Confirm:$Confirm } While this kinda works, it doesn't allow any control over where Whatif's and confirms are used. After reading [Implementing ShouldProccess for your functions][1] post by Joel Francsis, I'm now able to do things like this: function Set-GoodIdead { [CmdLetBinding(SupportsShouldProcess)] Param([string]$File) If ($PSCmdlet.ShouldProcess("$File", "Get rid of junk")) { Remove-Item $File } } As I hope you can see, you could implement the `$PSCmdlet.ShouldProcess` on any code, not just other functions that support -WhatIf or -Confirm or -Force Doing this will lead to more consistent behavior of functions and allow behaviour to be more intuitive. For a much more in depth explaination, go and check [Joel's post][1] Tags: powershell, coding [1]:https://vexx32.github.io/2018/11/22/Implementing-ShouldProcess/