Direkt zum Inhalt springen

PowerShell Best Practices für wartbare Skripte

Author Image

Attila Krick

01. März 2026

Blog Image

Welche Frage beantwortet dieser Artikel?

Dieser Artikel beantwortet eine klare Frage: Welche Regeln machen PowerShell-Skripte im Team dauerhaft wartbar und sicher betreibbar?

Stand: 2026
Getestet mit: PowerShell 7.4 (LTS) und 7.5 für typische Admin- und Automatisierungsaufgaben.

PowerShell Scripting Best Practices im Team

10 Best Practices für professionelles PowerShell-Scripting

1) Namen so wählen, dass Absicht sofort klar ist

Lesbarkeit ist die Basis für Wartbarkeit. Variablen und Funktionen sollten den fachlichen Zweck zeigen, nicht nur den Datentyp.

$logFilePath = "C:\Logs\deployment.log"
$activeUsers = Get-ADUser -Filter { Enabled -eq $true }

2) Fehler steuerbar machen statt verstecken

Nutze try/catch/finally konsequent und setze bei kritischen Befehlen -ErrorAction Stop, damit Fehler im catch landen.

try {
    Get-Item "C:\NichtVorhandeneDatei.txt" -ErrorAction Stop
}
catch {
    Write-Error "Datei konnte nicht gelesen werden: $_"
}
finally {
    Write-Verbose "Aufräumarbeiten abgeschlossen" -Verbose
}

3) Eingaben validieren, bevor Business-Logik startet

Parameter-Validierung reduziert Laufzeitfehler und macht Funktionen selbsterklärend.

function Set-UserPassword {
    param(
        [Parameter(Mandatory)]
        [ValidateLength(12, 128)]
        [string]$NewPassword
    )

    "Passwort wird gesetzt"
}

4) Funktionen klein und eindeutig halten

Eine Funktion sollte genau eine Aufgabe haben. Das erleichtert Testbarkeit und Wiederverwendung.

function Get-FreeDiskSpace {
    param([Parameter(Mandatory)][string]$DriveLetter)

    Get-PSDrive -Name $DriveLetter | Select-Object Name, Used, Free
}

5) Logging standardisieren

Ohne vernünftiges Logging wird Incident-Analyse teuer. Nutze ein einheitliches Format mit Zeitstempel und Level.

function Write-Log {
    param(
        [Parameter(Mandatory)][string]$Message,
        [ValidateSet('INFO','WARN','ERROR')][string]$Level = 'INFO'
    )

    "$((Get-Date).ToString('s')) [$Level] $Message" |
        Out-File -FilePath "C:\Logs\script.log" -Append -Encoding utf8
}

6) Tests mit Pester als Pflichtschritt einbauen

Produktive Skripte brauchen automatisierte Tests. Schon wenige Pester-Tests verhindern teure Regressionen.

Describe "Get-FreeDiskSpace" {
    It "liefert ein Ergebnisobjekt" {
        Get-FreeDiskSpace -DriveLetter C | Should -Not -BeNullOrEmpty
    }
}

7) Sicherheitsgrenzen explizit machen

Nutze #Requires, least privilege und Code-Signing, wenn Skripte in sensiblen Umgebungen laufen.

#Requires -Version 7.4
#Requires -Modules ActiveDirectory

8) Module statt Skript-Monolithen bauen

Ab einer gewissen Größe sollten wiederverwendbare Funktionen in Module wandern. Das verbessert Versionierung und Deployment.

New-ModuleManifest -Path "C:\Modules\Company.Automation\Company.Automation.psd1"

9) Performance mit Messwerten beurteilen

Nicht raten, messen. Measure-Command und gezieltes Filtern vermeiden falsche Optimierungen.

$duration = Measure-Command {
    Get-ADUser -Filter * -Properties SamAccountName |
        Select-Object -ExpandProperty SamAccountName
}

$duration.TotalMilliseconds

10) Team-Standards verbindlich dokumentieren

Skripte bleiben nur dann stabil, wenn Konventionen klar sind: Namensschema, Logging-Format, Fehlerstrategie, Testpflicht.

Mini-Checkliste für den produktiven Einsatz

  • Eingaben validiert und Fehlerpfade getestet
  • Logging mit Zeitstempel und Severity aktiv
  • Pester-Tests in CI/CD integriert
  • Versions- und Modulabhängigkeiten mit #Requires definiert
  • Rollback-Plan für kritische Jobs dokumentiert

Weiterführende Inhalte

Fazit

PowerShell-Skripte sind dann professionell, wenn sie auch nach Monaten nachvollziehbar, sicher und testbar bleiben. Um PowerShell sicher einsetzen zu können, minimierst du mit diesen 10 Regeln das Betriebsrisiko und erhöhst die Geschwindigkeit im Team spürbar.