💡 1. Das [CmdletBinding()] Attribut
Durch das Hinzufügen von [CmdletBinding()] verwandelt PowerShell eine gewöhnliche Funktion in eine Advanced Function (Script-Cmdlet). Dadurch stehen automatisch Standard-Parameter wie -Verbose, -Debug, -ErrorAction und -WarningAction zur Verfügung:
function Get-CustomReport {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[ValidateNotNullOrEmpty()]
[string]$ReportName
)
Write-Verbose "Erstelle Report '$ReportName'..."
[PSCustomObject]@{
Report = $ReportName
Date = (Get-Date)
}
}
Parameter-Validierungsattribute wie [ValidateSet()] oder [ValidateRange()] sind deine Türsteher: Ungültige Eingaben werden sofort an der Pforte abgefangen, mit aussagekräftigen Fehlermeldungen abgewiesen und gelangen niemals in deine Geschäftslogik!
🛡️ 2. Die wichtigsten Validierungs-Attribute
Schütze deine Funktionen vor fehlerhaften Aufrufen mit den bewährten .NET Validierungsattributen:
| Attribut | Beispiel | Wirkung |
|---|---|---|
[ValidateSet()] |
[ValidateSet('Dev', 'Test', 'Prod')] |
Erlaubt nur exakt definierte Zeichenketten (inkl. Tab-Completion!). |
[ValidateRange()] |
[ValidateRange(1, 65535)] |
Begrenzt Zahlen auf einen Min/Max-Bereich. |
[ValidateNotNullOrEmpty()] |
[ValidateNotNullOrEmpty()] |
Verhindert Übergabe von $null oder "". |
[ValidatePattern()] |
[ValidatePattern('^v\d+\.\d+')] |
Prüft das Argument gegen einen Regulären Ausdruck (Regex). |
⚠️ 3. Risikofreie Ausführung mit SupportsShouldProcess & -WhatIf
Für potenziell destruktive Aktionen (z.B. Neustart von Servern, Löschen von Daten) unterstützt PowerShell -WhatIf und -Confirm out-of-the-box:
function Restart-CloudServer {
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true)]
[string]$ServerName
)
if ($PSCmdlet.ShouldProcess($ServerName, "Server neustarten")) {
Write-Host "Führe echten Neustart von $ServerName durch..."
}
}
# Ausführung:
# Restart-CloudServer -ServerName "srv01" -WhatIf
# Ausgabe: What if: Performing the operation "Server neustarten" on target "srv01".
📑 4. Cheat-Sheet: Advanced Functions
| Klausel | Syntax | Zweck |
|---|---|---|
[CmdletBinding()] |
[CmdletBinding(SupportsShouldProcess)] |
Aktiviert Standard-Cmdlet-Funktionen und $PSCmdlet. |
ValueFromPipeline |
[Parameter(ValueFromPipeline=$true)] |
Ermöglicht Übergabe von Objekten über die Pipeline. |
Switch-Parameter |
[switch]$Detailed |
Boolescher Schalter ohne Argument (-Detailed). |
ShouldProcess |
$PSCmdlet.ShouldProcess("Ziel", "Aktion") |
Auswertung von -WhatIf und -Confirm. |
🧠 Diagnostischer Selbst-Check
Überprüfe dein Verständnis zu PowerShell-Architektur, Pipeline-Mechanik und Best Practices mit gezieltem Feedback: