# PowerShell Server Administration: Skalierbare Automatisierung

TL;DR / Management Summary PowerShell ist die Lingua Franca der Windows Server Administration. Jede Aktion im Server Manager (Artikel 483) führt im Hintergrund einen PowerShell-Befehl aus. Senior Admins nutzen PowerShell für Massen-Aktionen (z.B. “Ändere DNS-Server auf allen DCs”), Reporting (z.B. “Zeige alle inaktiven Konten”) und Monitoring. Durch die Objektorientierung können wir Daten nahtlos zwischen verschiedenen Systemen (z.B. SQL zu AD) verschieben.


# 1. Einführung & Das Server-Ökosystem

Vom Befehl zum Modul.

Auf einem Server arbeiten wir primär mit spezialisierten Modulen:


# 2. AD-Administration via PowerShell

Suchen und Ersetzen im Verzeichnis.

Die Suche via GUI (“Find”) ist limitiert. PowerShell bietet LDAP-Power.

# Komplexe Abfragen (Filter)

# Findet alle User in der Abteilung 'IT', deren Passwort bald abläuft
Get-ADUser -Filter 'Department -eq "IT"' -Properties PasswordExpiryValue | 
    Where-Object { $_.PasswordExpiryValue -lt (Get-Date).AddDays(7) }

# Massen-Änderungen

# Setzt den Firmennamen für alle Mitarbeiter eines Standorts
Get-ADUser -SearchBase "OU=Munich,DC=firma,DC=local" -Filter "*" | 
    Set-ADUser -Company "Firma München GmbH"

# 3. Deep Dive: Pipeline-Performance

Effizientes Arbeiten mit Millionen Objekten.

Wenn Sie ein AD mit 50.000 Usern abfragen, ist die Performance entscheidend.

# Filter Left, Format Right

# Garbage Collection

Bei extrem großen Skripten (z.B. Log-Analyse von GB-Files) sollten Sie Variablen explizit leeren:

$BigData = $null
[System.GC]::Collect()

# 4. Day-2 Operations: Fehlerbehandlung (Try-Catch)

Stabile Skripte für die Produktion.

Ein Admin-Skript darf bei einem Fehler nicht einfach abbrechen.

try {
    Stop-Service "KritischerDienst" -ErrorAction Stop
} catch {
    Write-Error "Dienst konnte nicht gestoppt werden: $($_.Exception.Message)"
    # Hier könnte eine Teams-Notification oder ein Ticket-Trigger stehen
}

# 5. Troubleshooting & “War Stories”

Wenn das Skript Amok läuft.

# Top 3 Fehlerbilder

  1. Symptom: “Der Begriff ‘Get-ADUser’ wurde nicht erkannt”.

    • Ursache: Das RSAT-Feature ist nicht installiert.
    • Lösung: Install-WindowsFeature RSAT-AD-PowerShell.
  2. Symptom: Skript hakt bei Sonderzeichen im Usernamen (z.B. Ü, Ö, Ä).

    • Lösung: Skript immer als UTF-8 with BOM speichern (Wichtig für ISE/VS Code Kompatibilität).
  3. Symptom: Get-ADObject liefert keine Ergebnisse für gelöschte Objekte.

    • Lösung: Parameter -IncludeDeletedObjects nutzen (erfordert aktiven AD-Papierkorb).

# “War Story”: Der “Delete-All” Loop

Ein Admin wollte Test-Computer löschen: Get-ADComputer -Filter 'Name -like "Test*"' | Remove-ADObject. Das Problem: Ein produktiver SQL-Server hieß zufällig TestSQL01. Das Skript fragte nicht nach Bestätigung und löschte ihn mit. Lehre: Nutzen Sie bei Massen-Löschungen immer den Schalter -Confirm oder prüfen Sie die Liste erst in einer CSV-Datei, bevor Sie die Pipeline an Remove-* schicken.


# 6. Monitoring & Alerting

Automatisierte Berichte.

# HTML Dashboards erstellen

Generieren Sie hübsche Reports ohne externe Tools:

Get-Service | Select-Object Status, Name, DisplayName | 
    ConvertTo-Html -Head "<style>body{font-family:sans-serif;} .Running{color:green;}</style>" | 
    Out-File "C:\Temp\Services.html"

# 7. Fazit & Empfehlung

PowerShell ist kein “Add-on”, es ist das Betriebssystem.


# Anhang: Die 10 wichtigsten Server-Module

  1. ActiveDirectory: Identität
  2. Hyper-V: Virtualisierung
  3. DnsServer: DNS Management
  4. DhcpServer: DHCP Scopes
  5. FailoverClusters: HA Management
  6. NetTCPIP: Netzwerk-Stack
  7. ServerManager: Rollen & Features
  8. Storage: Disk & Volume Management
  9. GroupPolicy: GPO Steuerung
  10. WebAdministration: IIS Management

# Referenzen