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