# PowerShell DSC: Deklarative Konfiguration für den Windows-Stack
TL;DR / Management Summary Desired State Configuration (DSC) ist das Windows-Pendant zu Ansible oder Puppet. Anstatt zu sagen, wie etwas installiert werden soll (imperativ), definieren wir, was der Zustand des Systems sein soll (deklarativ). Der lokale LCM (Local Configuration Manager) sorgt dafür, dass dieser Zustand erreicht und dauerhaft gehalten wird. Ein Senior Admin nutzt DSC, um “Gold-Images” (Artikel 422) lebendig zu halten und automatisiert Korrekturen vorzunehmen, wenn ein User etwas verstellt.
# 1. Einführung & Architektur
Definition statt Scripting.
In einem normalen Skript prüfen Sie: if (Dienst läuft nicht) { Start-Dienst }.
In DSC schreiben Sie: Service MySvc { State = 'Running' }.
# Die Kern-Komponenten
- Resources: Die Bausteine (Dateien, Dienste, Registry, Pakete).
- Configuration: Das PowerShell-Skript, das die Ressourcen bündelt.
- MOF (Managed Object Format): Die kompilierte Datei, die der Kernel versteht.
- LCM (Local Configuration Manager): Die Engine auf dem Client, die die MOF-Datei einliest und überwacht.
# Architektur-Übersicht (Mermaid)
graph TD
ADMIN[Admin / VS Code] -->|Write PS Script| CONFIG[DSC Configuration]
CONFIG -->|Compile| MOF[MOF File]
MOF -->|Push / Pull| LCM[Local Configuration Manager]
LCM -->|Execute| RES[Resources: File, Reg, Svc]
RES -->|Check & Fix| OS[Windows System]
OS -->|Drift?| LCM
# 2. DSC in der Praxis
Die erste Konfiguration.
# Beispiel: Standard-Webserver Setup
Configuration MyWebConfig {
Import-DscResource -ModuleName PSDesiredStateConfiguration
Node "localhost" {
# Feature sicherstellen
WindowsFeature IIS {
Ensure = "Present"
Name = "Web-Server"
}
# Willkommens-Datei anlegen
File WelcomePage {
Ensure = "Present"
Content = "Willkommen im Enterprise-Wiki"
DestinationPath = "C:\inetpub\wwwroot\index.html"
}
}
}
# 1. Konfiguration laden
MyWebConfig
# 2. MOF anwenden
Start-DscConfiguration -Path .\MyWebConfig -Wait -Verbose
# 3. Deep Dive: Der LCM (Local Configuration Manager)
Das Gehirn des Clients.
Sie steuern den LCM über das [DSCLocalConfigurationManager()] Attribut.
# Konfigurations-Modi
- ApplyOnly: Wendet die Config einmal an und macht dann nichts mehr.
- ApplyAndMonitor: Wendet sie an und loggt Abweichungen im Event-Log.
- ApplyAndAutoCorrect: Der Goldstandard. Wenn ein User die Datei löscht, stellt der LCM sie beim nächsten Check (Default: alle 15 Min) wieder her.
# 4. Day-2 Operations: Pull-Server vs. Push
Skalierung auf 500+ Clients.
- Push: Der Admin sendet die MOF-Datei aktiv an den Client. Gut für Ad-hoc Änderungen.
- Pull: Der Client fragt regelmäßig bei einem zentralen Webserver nach: “Gibt es eine neue Konfiguration für mich?”. Ideal für große, verteilte Umgebungen.
# 5. Troubleshooting & “War Stories”
Wenn der Soll-Zustand nicht erreicht wird.
# Top 3 Fehlerbilder
-
Symptom:
Start-DscConfigurationschlägt fehl mit “The system cannot find the file specified”.- Ursache: Die benötigte DSC-Resource (Modul) ist auf dem Ziel-PC nicht installiert.
- Lösung: Module via
Save-Moduleauf einen Share legen und im Skript verteilen.
-
Symptom: Endloser “Pending” Status.
- Lösung:
Remove-DscConfigurationDocument -Stage Pendingund Neustart des LCM-Dienstes.
- Lösung:
-
Symptom: Hohe CPU-Last durch
WmiPrvSE.exe.- Ursache: Zu viele komplexe Datei-Checks (Checksummen) in der GPO.
- Lösung:
ValidateIntervall im LCM erhöhen.
# “War Story”: Der Kampf gegen die Schatten-IT
In einer Design-Abteilung installierten User ständig lokale Tools, die den Virenscanner störten.
Die Lösung: Wir definierten einen DSC-Zustand für den Ordner C:\Program Files. Jede Datei, die nicht in unserer Master-Liste stand, wurde vom LCM alle 15 Minuten gelöscht (Ensure = 'Absent').
Ergebnis: Nach drei Tagen gaben die User auf und nutzten nur noch die vom Software-Center bereitgestellten Tools. DSC war der effektivste “Hausmeister”, den wir je hatten.
# 6. Monitoring & Reporting
Compliance tracken.
# DSC Reporting via PowerShell
# Zeigt an, ob der Client aktuell 'InDesiredState' ist
Get-DscConfigurationStatus
# 7. Fazit & Empfehlung
DSC ist die Basis für modernen Infrastructure as Code (IaC) unter Windows.
- Empfehlung: Nutzen Sie DSC in Kombination mit Azure Automation oder einem lokalen Pull-Server, um die Kontrolle über Ihre Server-Konfigurationen zu behalten.
- Alternative: Für reine Client-Verwaltung ist Microsoft Intune oft einfacher, nutzt aber intern ähnliche Konzepte.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| LCM Status | Get-DscLocalConfigurationManager |
| Erzwungener Check | Update-DscConfiguration -Wait |
| Ressourcen suchen | Find-DscResource |
| Testen (ohne Fix) | Test-DscConfiguration |