Mit Hilfe von [CmdletBinding()] lassen sich die Standardparameter von Powershell einbinden.

Möchte man die Parameter WhatIf und Confirm verwenden, muss man beim CmdletBinding Werte übergeben

Whatif

Beispielfunktion:

function HelloWorld{
  [CmdletBinding(SupportsShouldProcess=$True)]
  param(
    [Parameter(Mandatory=$True)][System.String]$Greeting
  )
  begin{}
  process{
    if ($PSCmdlet.ShouldProcess($Greeting, "Parameter ausgeben")){
      Write-Host $Greeting;
    }
  }
  end{}
}

Diese Beispielfunktion gibt den String aus, den man mit dem Parameter **Greeting** übergibt. Beispiel:

PS C:\Powershell> HelloWorld -Greeting "Bon Jour!"
Bon Jour!

PS C:\Powershell> HelloWorld -Greeting "Bon Jour!"
Bon Jour!

Wenn man jetzt den Parameter WhatIf übergibt, führt die Powershell den Befehl nicht aus, sondern beschreibt, was wir zuvor angegeben haben:

PS C:\Powershell> HelloWorld -Greeting "Hallo!" -WhatIf
What if: Performing the operation "Parameter ausgeben" on target "Hallo!".

Confirm

Möchte man zusätzlich gefragt werden, ob eine Aktivität ausgeführt werden darf (Z.B. Löschen, Ändern von Dingen, o.ä.), kann man den Confirm-Level mit übergeben:

function HelloWorld{
  [cmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
  ...

Standardmäßig fragt die Powershell immer dann nach, wenn das in einer Funktion oder Cmdlet angegebene Confirm-Level gleich oder höher ist als das gegenwertig in der Session angegebene Confirm-Level ($ConfirmPreference). Möglich sind die Werte 'None', 'Low', 'Medium' und 'High'

Testet man die so angepasste Funktion erneut aus, fragt die Powershell explizit nach:

PS C:\Powershell>HelloWorld -Greeting "Aloha!"

Confirm
Are you sure you want to perform this action?
Performing the operation "Parameter ausgeben" on target "Aloha!".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y
Aloha!

Quelle, Quelle2