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/
