-WhatIf in eigenen PowerShell-Funktionen

-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

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.