-WhatIf in eigenen PowerShell-Funktionen
- Matt
Ich schreibe mir ab und zu kleine Aufräum-Skripte, die Dateien löschen oder Registry-Werte ändern. Bevor ich da Enter drücke, will ich sehen, was passiert
- bei
Remove-Itemgeht das mit-WhatIf, in einer eigenen Funktion bisher nicht.
Der Baustein heißt SupportsShouldProcess im CmdletBinding, dazu ein Aufruf
von $PSCmdlet.ShouldProcess() direkt um die Änderung herum:
function Remove-AltesLog {
[CmdletBinding(SupportsShouldProcess)]
param([string]$Pfad)
if ($PSCmdlet.ShouldProcess($Pfad, 'Löschen')) {
Remove-Item $Pfad
}
}
Remove-AltesLog -Pfad C:\Logs\alt.log -WhatIf gibt dann nur noch aus, was
passieren würde, statt es zu tun.
Der Haken: Sobald die Funktion in einem anderen Skriptmodul aufgerufen wird
als die, die sie nutzt, reicht -WhatIf nicht zuverlässig automatisch durch.
Ich übergebe es deshalb an Cmdlets, die ich selbst aufrufe, lieber explizit als
-WhatIf:$WhatIfPreference. Mit ConfirmImpact = 'High' im CmdletBinding
lässt sich zusätzlich ein -Confirm-Prompt erzwingen, den man mit
-Confirm:$false wieder abschaltet.
Mehr Details, auch zu ShouldContinue und -Force, stehen in
Everything you wanted to know about ShouldProcess
auf Microsoft Learn.