Windows deklarativ mit DSC konfigurieren — IaC mit dsc.exe beginnen

· Aktualisiert am: · · Windows, DSC, IaC, PowerShell, winget, Konfigurationsverwaltung

Änderungsverlauf (Erstfassung, veröffentlicht am 28. Aug 2026)
Erstveröffentlichung

Die Einrichtungsanleitung für einen neuen PC, die Excel-Tabelle mit den Serveraufbauschritten, die geheime BAT-Datei, die jemand hinterlassen hat, der das Unternehmen inzwischen verlassen hat — in vielen Betrieben läuft die Windows-Konfigurationsverwaltung noch über „ein Dokument, das die Schritte beschreibt“ und „ein Skript, das die Schritte ausführt“. Die Schwäche dieses Ansatzes ist klar: Die Schritte beginnen in dem Moment, in dem sie ausgeführt werden, von der Wirklichkeit abzuweichen, und das Skript geht beim zweiten Lauf kaputt.

Unter Linux und in der Cloud ist deklaratives IaC (Infrastructure as Code) wie Terraform und Ansible zur Norm geworden. Womit also verwaltet man Windows-Clients und -Server selbst in derselben Denkweise? Microsofts Antwort ist DSC (Desired State Configuration), und mit Microsoft DSC v3 (dsc.exe), 2025 als von PowerShell unabhängiges Kommandozeilenwerkzeug neu geschrieben, hat es endlich eine Form erreicht, mit der man „einfach anfangen“ kann.1

Zielgruppe sind Entwickler und IT-Verantwortliche, die die Konfiguration von Windows-Clients und -Servern mit Anleitungen und Skripten verwalten und zur deklarativen Verwaltung wechseln wollen. Voraussetzungen sind Windows 10/11 und DSC 3.0 oder höher; grundlegende PowerShell-Bedienung wird als Vorwissen angenommen. Der Schwierigkeitsgrad ist mittel.

1. Zuerst das Fazit

Mit DSC schreiben Sie den „gewünschten Zustand“ in YAML, nicht die „auszuführenden Schritte“. Die Ressourcen übernehmen das Erkennen der Differenz zum aktuellen Zustand (test) und das Anwenden (set). Dasselbe File ist daher unabhängig von der Laufzahl sicher (idempotent), und die Konfiguration wird zu Daten, die Sie in Git reviewen können. Wenn Sie jetzt beginnen, ist Microsoft DSC v3 (dsc.exe) die einzige Wahl.

Der Unterschied zwischen einem Ablaufskript und einer deklarativen Konfiguration zeigt sich daran, wie sie kaputtgehen. Ein Skript, das Schritte kodiert, bleibt mit doppelter Anwendung oder Fehlern stehen, wenn Sie es erneut gegen eine Maschine laufen lassen, die unterwegs gescheitert ist oder bereits konfiguriert ist. Eine deklarative Konfiguration beschreibt nur den gewünschten Zustand; egal wie oft und aus welchem Zwischenzustand Sie sie ausführen, sie konvergiert zum selben Ergebnis.2

Imperatives Ablaufskript gegenüber deklarativer KonfigurationEin imperatives Skript führt Schritte von oben aus, sodass ein erneuter Lauf zu doppelter Anwendung oder zum Abbruch führt, während deklaratives DSC den gewünschten Zustand deklariert und nur die Differenz anwendet, sodass es unabhängig von der Laufzahl zum selben Zustand konvergiertImperativ: die Schritte schreiben (BAT, Anleitung)Von oben ausführenErneuter Lauf: doppelte Anwendung, FehlerDeklarativ: den Zustand schreiben (DSC)Differenz zum aktuellen Zustand erkennenNur die Differenz anwenden, jedes Mal sicher

Abbildung 1: Ein imperatives Skript ist empfindlich gegenüber „wie oft es gelaufen ist“; eine deklarative Konfiguration konvergiert unabhängig von der Laufzahl zum selben Zustand.

In der Abbildung kennzeichnet eine durchgezogene Linie eine stets geltende Beziehung und eine gestrichelte Linie eine bedingte (die Bedingungen stehen bei jeder Beziehung auf der Detailseite). Die vollständige Liste der Beziehungen (17 insgesamt, mit Beleg und Sicherheitsgrad) und die Definitionen der wichtigsten Konzepte sind auf der Detailseite der Wissenskarte (auf Japanisch) zusammengestellt. Daten: JSON-LD / Turtle

2. Die Verwirrung um den Namen „DSC“ entwirren — vier Linien

Das Erste, woran man beim Lernen von DSC scheitert, ist nicht die Technik selbst, sondern die Verwirrung in den Suchergebnissen. Vier Linien von Mechanismen tragen den Namen „DSC“, und sie unterscheiden sich darin, wie man sie schreibt, wie man sie ausführt und womit sie kompatibel sind.3

Linie Was es ist Einordnung
PSDSC v1.1 In Windows PowerShell 5.1 eingebaut Legacy. Residenter LCM, MOF-Format
PSDSC v2 Modul für PowerShell 7 PSDesiredStateConfiguration 2.x
PSDSC v3 (Vorschau) PowerShell-Modul Für die Linux-Unterstützung von Azure Machine Configuration
Microsoft DSC v3 Eigenständiges dsc.exe Gegenstand dieses Artikels. Unabhängig von PowerShell, plattformübergreifend

Microsoft DSC v3 ist nicht einfach eine Aktualisierung des früheren PowerShell DSC (PSDSC); es ist ein eigenes Produkt, neu geschrieben und von der Abhängigkeit von PowerShell gelöst. Konfigurationen werden zu JSON/YAML-Daten statt PowerShell-Skripten, Ressourcen können in jeder Sprache implementiert werden, und es läuft auf Linux, macOS und Windows gleich.1

Abstammung der vier DSC-GenerationenAus dem in Windows PowerShell 5.1 eingebauten PSDSC v1.1 gehen PSDSC v2 für PowerShell 7 und die PSDSC-v3-Vorschau für Machine Configuration hervor, während Microsoft DSC v3, getrennt ohne PowerShell-Abhängigkeit neu geschrieben, die aktuelle Hauptlinie istNeuschreibenPSDSC v1.1 (in WinPS 5.1 eingebaut)PSDSC v2 (PowerShell 7)PSDSC v3 VorschauMicrosoft DSC v3 (dsc.exe)Azure Machine ConfigurationGegenstand dieses Artikels

Abbildung 2: Die Suche nach „DSC“ liefert Informationen aller vier Linien vermischt. Als Erstes festzustellen, von welcher Linie ein Artikel oder Dokument handelt, ist entscheidend.

Ab hier meint „DSC“ in diesem Artikel Microsoft DSC v3. Dass Assets der älteren Generationen nicht verloren gehen, kommt später (Abschnitt 6).

3. Was „deklarativ“ bedeutet — get, test, set und Idempotenz

Der zentrale Begriff in DSC ist die Ressource. Eine Ressource stellt für eine Art von Konfigurationsziel — etwa „Registrierungswert“, „Windows-Feature“ oder „Umgebungsvariable“ — die Operationen Bereitstellen des Zustands (Get), Bewerten (Test) und Anwenden (Set) bereit. Jede Ressource implementiert Get. Für Ressourcen ohne Test springt DSC mit einem synthetischen Test ein, der das abgerufene Ergebnis mit der Deklaration vergleicht. Set implementieren nur Ressourcen, die einen Zustand erzwingen können; schreibgeschützte Ressourcen wie OS-Informationen haben es nicht.4 Der Nutzer überlässt das „Wie konfigurieren“ der Ressource und schreibt nur „was in welchem Zustand sein soll“ als Daten.

Diese Arbeitsteilung erzeugt die Idempotenz. Beim Anwenden eines Konfigurationsdokuments (dsc config set) testet DSC zuerst jede Instanz und ruft set nur bei denen auf, die nicht im gewünschten Zustand sind. Deshalb ist das wiederholte Anwenden derselben Konfiguration sicher. Ein Unterschied: Bei dsc resource set auf einer einzelnen Ressource wird set immer aufgerufen; ob vorher ein Test läuft, hängt von der Implementierung der Ressource ab (implementsPretest).5

Die Konvergenzschleife aus get, test und settest vergleicht den im Konfigurationsdokument geschriebenen gewünschten Zustand mit dem aktuellen Zustand, bei keiner Differenz geschieht nichts, und bei einer Differenz wendet set nur die Differenz an und get bestätigt das Ergebnis, ein idempotenter Konvergenzflusskeine DifferenzDifferenzKonfigurationsdokument (gewünschter Zustand)test: mit dem aktuellen Zustand vergleichenNichts tun (idempotent)set: nur die Differenz anwendenget: den resultierenden Zustand bestätigen

Abbildung 3: Das Anwenden von DSC ist eine Schleife „zuerst vergleichen, dann nur ändern, was nötig ist“, die vom Begriff der Laufzahl befreit.

Den Unterschied zu einem imperativen Skript sehen wir im Code. Nehmen wir „diesen Wert in die Registrierung schreiben“: In einem Skript schreiben Sie Existenzprüfung, Erzeugen und Aktualisieren selbst, jeweils als eigenen Zweig.

# Imperativ: die "Schritte" schreiben. Jeden Zweig und jede Reihenfolge verwalten Sie selbst
$path = 'HKCU:\Software\MyCompany\App'
if (-not (Test-Path $path)) {
    New-Item -Path $path -Force | Out-Null
}
Set-ItemProperty -Path $path -Name 'Mode' -Value 'standard'

In DSC schreiben Sie dasselbe als Deklaration des „gewünschten Zustands“. Es gibt keine Existenzprüfung und keine Verzweigung.

# Deklarativ: den "Zustand" schreiben. Erzeugen und Korrigieren sind Sache der Ressource
- name: Betriebsmodus der App
  type: Microsoft.Windows/Registry
  properties:
    keyPath: HKCU\Software\MyCompany\App
    valueName: Mode
    valueData:
      String: standard

4. dsc.exe installieren und Ressourcen einzeln aufrufen

Es gibt zwei Wege, DSC zu installieren. Das Archiv aus dem GitHub-Release entpacken und zum PATH hinzufügen, oder unter Windows mit winget aus der Microsoft-Store-Quelle installieren.1

# Die stabile Version aus der Microsoft-Store-Quelle suchen und installieren
winget search DesiredStateConfiguration --source msstore
winget install --id 9NVTPZWRC6KQ --source msstore

Sobald es installiert ist, listen Sie zuerst die auf der lokalen Maschine verfügbaren Ressourcen.

dsc resource list

Bevor Sie ein Konfigurationsdokument schreiben, können Sie Ressourcen auch einzeln für sich aufrufen. Dass man „im Kleinen ausprobieren“ kann, macht v3 leicht zu lernen.6

# Den aktuellen Zustand abrufen (get)
dsc resource get --resource Microsoft.Windows/Registry `
  --input '{"keyPath":"HKCU\\Software\\MyCompany\\App","valueName":"Mode"}'

# Bewerten, ob der gewünschte Zustand vorliegt (test) — ändert überhaupt nichts
dsc resource test --resource Microsoft.Windows/Registry `
  --input '{"keyPath":"HKCU\\Software\\MyCompany\\App","valueName":"Mode","valueData":{"String":"standard"}}'
Die vier Operationen des Befehls dsc resourceUnter dem Befehl dsc resource hängen vier Operationen, list zum Auflisten der Ressourcen, get zum Abrufen des aktuellen Zustands, test zum Bewerten des gewünschten Zustands ohne Änderungen, und set zum Anwenden des Zustands (nur bei Ressourcen, die Set implementieren)Befehl dsc resourcelist: Ressourcen auflistenget: aktuellen Zustand abrufentest: nur bewerten, keine Änderungenset: anwenden (Ressourcen mit Set)

Abbildung 4: Ressourcen lassen sich ohne Konfigurationsdokument einzeln aufrufen. Mit der Beobachtung zu beginnen, nur mit get und test, ist der sichere Einstieg.

Operationen, die über set Änderungen vornehmen, und Ressourcen, die HKLM oder Systemeinstellungen behandeln, erfordern Administratorrechte. Am sichersten beginnt man die Versuche mit Beispielen, deren Schreibziel im Bereich des Benutzers liegt (etwa HKCU).

5. Das Konfigurationsdokument — den „gewünschten Zustand“ in YAML schreiben

Ein Konfigurationsdokument deklariert mehrere Ressourcen zusammen. Es wird in YAML oder JSON geschrieben und definiert mindestens die beiden Eigenschaften $schema und resources. Jede Ressourceninstanz hat einen name (einen im Dokument eindeutigen Anzeigenamen), einen type (den vollqualifizierten Ressourcennamen) und properties (den gewünschten Zustand).2

# standard-pc.dsc.config.yaml — der gewünschte Zustand eines Standard-Client-PCs
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
parameters:
  appMode:
    type: string
    defaultValue: standard
resources:
  - name: Betriebsmodus der App
    type: Microsoft.Windows/Registry
    properties:
      keyPath: HKCU\Software\MyCompany\App
      valueName: Mode
      valueData:
        String: "[parameters('appMode')]"

Mit parameters und variables lassen sich Unterschiede zwischen Umgebungen (etwa abteilungsspezifische Einstellungswerte) in einem einzigen Dokument ausdrücken. Die Ausdruckssyntax ist eine Teilmenge der ARM-Vorlagenfunktionen.2

Aufbau eines KonfigurationsdokumentsEin Konfigurationsdokument besteht aus einem Schema, das das Dokumentschema identifiziert, parameters und variables, die Umgebungsunterschiede aufnehmen, und einem resources-Array von Ressourceninstanzen, von denen jede name, type und properties hatKonfigurationsdokument (YAML / JSON)$schema: URI des Dokumentschemasparameters / variablesresources: Array von Instanzenname, type, properties

Abbildung 5: Ein Konfigurationsdokument ist schlichte Daten, nichts weiter als „Schema + Parameter + Ressourcendeklarationen“; es ist kein Programm.

Setzen Sie vor dem Anwenden immer „Beobachten“ davor. dsc config test meldet, ob es Differenzen gibt, ohne etwas zu ändern, und dsc config set --what-if zeigt eine Vorhersage, „was sich ändern würde, wenn das ausgeführt würde“.7

# 1. Prüfen, ob es Differenzen gibt (keine Änderungen)
dsc config test --file .\standard-pc.dsc.config.yaml

# 2. Eine Vorhersage anzeigen, was das Anwenden ändern würde (keine Änderungen)
dsc config set --file .\standard-pc.dsc.config.yaml --what-if

# 3. Anwenden, sobald Sie einverstanden sind
dsc config set --file .\standard-pc.dsc.config.yaml

# 4. Den Zustand nach dem Anwenden bestätigen
dsc config get --file .\standard-pc.dsc.config.yaml

Es gibt auch einen Einstieg in die Gegenrichtung. Für die im mit --file übergebenen Eingabedokument aufgeführten Ressourcen (nur solche, die export unterstützen) erzeugt dsc config export ein Konfigurationsdokument mit jeder Instanz auf dem System und schreibt es auf die Standardausgabe. Es kann als Ausgangspunkt dienen, den aktuellen Zustand einer bestehenden Umgebung festzuhalten.8

# Ein Eingabedokument mit den Zielressourcen übergeben und das aktuelle Konfigurationsdokument speichern
dsc config export --file .\export-targets.dsc.config.yaml > .\current-state.dsc.config.yaml
Die vier Schritte des sicheren AnwendensMit dsc config test, das nichts ändert, auf Differenzen prüfen, die Änderungen mit der Option what-if von dsc config set vorhersagen, nach Zustimmung mit set anwenden und das Ergebnis mit get bestätigen, in dieser sicheren Reihenfolgedsc config test (auf Differenzen prüfen)set --what-if (die Änderungen vorhersagen)dsc config set (anwenden)dsc config get (das Ergebnis bestätigen)

Abbildung 6: Solange Sie die Reihenfolge „beobachten, vorhersagen, anwenden, bestätigen“ einhalten, hat das Anwenden einer deklarativen Konfiguration nichts von der Angst vor einem einmaligen Glücksspiel.

Dass ein Konfigurationsdokument Daten ist, kein Programm, ist sein größter betrieblicher Vorteil. „Was auf dieser Maschine konfiguriert sein soll“ lässt sich als YAML-Diff reviewen, und die Änderungshistorie ist unmittelbar die Änderungshistorie der Konfiguration.

6. Vorhandene Assets weiterverwenden — Adapter für PSDSC-Ressourcen und WinGet Configuration

Zu hören, „v3 sei ein eigenes Produkt“, weckt Sorge um bisherige Assets, aber DSC v3 kann die PSDSC-Ressourcen älterer Generationen über einen Mechanismus namens Adapterressourcen aufrufen. Unter den aktuellen Namen in DSC 3.2 und später bedient Microsoft.Adapter/PowerShell die klassenbasierten Ressourcen für PowerShell 7 und Microsoft.Adapter/WindowsPowerShell die MOF-basierten und skriptbasierten Ressourcen für Windows PowerShell 5.1 (davor hießen sie Microsoft.DSC/PowerShell und Microsoft.Windows/WindowsPowerShell).9 Das über viele Jahre gewachsene Ökosystem der PSDSC-Ressourcen ist direkt aus einem v3-Konfigurationsdokument erreichbar.

Der andere Anschlusspunkt ist WinGet Configuration. Die .winget-Dateien aus dem Artikel zum PC-Kitting nutzen ab dem v3-Schema (WinGet 1.11 und später) DSC v3 direkt als Prozessor. Wenn Sie in den metadata der Konfigurationsdatei dscv3 als Prozessor angeben, ist der Körper des Dokuments selbst ein DSC-v3-Konfigurationsdokument.10

# WinGet Configuration v3 — der Körper ist ein DSC-v3-Konfigurationsdokument
$schema: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json
metadata:
  winget:
    processor:
      identifier: dscv3
resources:
  - name: Betriebsmodus der App
    type: Microsoft.Windows/Registry
    properties:
      keyPath: HKCU\Software\MyCompany\App
      valueName: Mode
      valueData:
        String: standard

Es gibt einen Vorbehalt. Eine vorhandene Datei im v2-Format (das Format mit properties.configurationVersion: 0.2.0 und den Ressourcen unter properties) läuft unter dem dscv3-Prozessor nicht unverändert. v2-Dateien funktionieren weiter mit dem bisherigen Prozessor; um sie auf DSC v3 zu legen, migrieren Sie das Format nach der offiziellen Umwandlungsanleitung („Convert to v3“ im Samples-Repository).10

Die Schichtenstruktur mit DSC v3 in der MitteOrchestrierungsschichten wie winget configure und Azure Machine Configuration rufen DSC v3 auf, und DSC v3 ruft native Ressourcen direkt und vorhandene PSDSC-Ressourcen über Adapterressourcen aufwinget configure, Machine Configurationdsc.exe (DSC v3)Native Ressourcen (Registry usw.)AdapterressourcenVorhandene PSDSC-Ressourcen (PowerShell-Assets)

Abbildung 7: DSC v3 ist ein eigenständiges Werkzeug und zugleich die gemeinsame Grundlage unter höherliegenden Werkzeugen wie winget und Azure. Vorhandene PSDSC-Assets hängen unter dem Adapter.

Mit anderen Worten: Das Wissen und die Konfigurationen, die Sie für v3 schreiben, funktionieren mit dsc.exe auf der eigenen Maschine, mit winget configure beim Kitting und mit Machine Configuration in der Cloud-Verwaltung. Das ist kein Neuernen; die Wege laufen zusammen.1

7. In den Betrieb bringen — in Git verwalten und Drift erkennen

Der Ort für Konfigurationsdokumente ist ein Git-Repository. Konfigurationsänderungen folgen dann demselben Ablauf wie die Softwareentwicklung: im Pull Request reviewen, mergen, anwenden. Der Begriff einer Anleitung, die niemand aktualisiert hat, verschwindet.

Die Herausforderung nach dem Anwenden ist Konfigurationsdrift (jemand ändert eine Einstellung von Hand, und die Maschine entfernt sich vom gewünschten Zustand). In DSC ist Drifterkennung schlicht das periodische Ausführen von dsc config test. Weil test nichts ändert, lassen sich Erkennung und Behebung trennen, und das ist eine wichtige Eigenschaft. Das sichere Betriebsmuster ist, zuerst die Erkennung zu automatisieren und erst nach Prüfung der Differenzen zu beheben (set).

# Für periodische Läufe: einen Fehlschlag von test selbst, Fehler je Ressource und Drift unterscheiden und in allen Fällen nichtnull beenden
$json = dsc config test --file C:\config\standard-pc.dsc.config.yaml
if ($LASTEXITCODE -ne 0 -or -not $json) {
    Write-Error "dsc config test selbst ist fehlgeschlagen (Exitcode: $LASTEXITCODE)"
    exit 2
}
$result = $json | ConvertFrom-Json
if ($result.hadErrors) {
    # Die Dokumentvalidierung ist fehlgeschlagen oder eine Ressource ist nichtnull beendet. Die Prüfung ist nicht durchgelaufen, daher nicht als gesund melden
    Write-Error "Die Prüfung einiger Ressourcen ist mit Fehlern geendet. messages prüfen"
    exit 2
}
if ($result.results.result.inDesiredState -contains $false) {
    Write-Error "Konfigurationsdrift erkannt"
    exit 1
}

Für die periodische Ausführung eignet sich auf Clients die Aufgabenplanung (der Entwurf unbeaufsichtigter Ausführung steht in einem eigenen Artikel), für Serverflotten CI-Runner. Für Organisationen, die die Verwaltung in Azure gebündelt haben, ist Machine Configuration der verwaltete Orchestrierungsdienst, der Konfiguration auf Azure-VMs und über Azure Arc auf lokalen Servern prüft und anwendet.11

Der Betriebszyklus der Konfigurationsverwaltung mit Git als AusgangspunktKonfigurationsdokumente in einem Git-Repository werden in einem Pull Request gereviewt, bevor sie angewendet werden, periodische test-Läufe aus der Aufgabenplanung oder CI erkennen Drift, und nach Prüfung der Differenz kehrt der Zyklus zur Behebung oder zur Aktualisierung der Konfiguration zurückDrift erkanntKonfiguration ist richtigdie Realität ist richtigGit-Repository (Konfigurationsdokumente)Änderungen in Pull Requests reviewenMit dsc config set anwendenPeriodischer Lauf: dsc config testDie Differenz prüfen und entscheidenMit set beheben

Abbildung 8: Der Umgang mit Drift ist nicht nur „Beheben“. Ist die Änderung vor Ort die richtige, ist das Korrigieren und Mergen des Konfigurationsdokuments die angemessene Praxis deklarativer Verwaltung.

Der Zweig unten rechts in Abbildung 8 wird leicht übersehen. Drift ist nicht immer „schlecht“; manchmal bedeutet sie nur, dass eine vor Ort nötige Änderung noch nicht in der Konfiguration steht. Dann setzen Sie die Maschine nicht zurück, sondern aktualisieren das Konfigurationsdokument, damit es der Wirklichkeit entspricht. Solange Sie die Disziplin halten, dass die Quelle der Wahrheit stets die Deklaration in Git ist, bricht die Verwaltung nicht, egal nach welcher Seite Sie gehen.

8. Einschränkungen und Fallstricke

Hier, offen, die Einschränkungen, die Sie vor der Einführung kennen sollten.

Es gibt keinen LCM. Der LCM (Local Configuration Manager) in v1.1 war ein residenter Agent, der die Konfiguration hielt und periodisches Anwenden und automatische Behebung ausführte. v3 ist „ein Befehl, der nur läuft, wenn er aufgerufen wird“ und bleibt nicht als Dienst resident.1 Brauchen Sie fortlaufendes Erzwingen, müssen Sie die Ausführungsinfrastruktur selbst wählen (Aufgabenplanung, CI, Machine Configuration), wie im vorigen Abschnitt. Das ist keine Regression, sondern eine Entwurfsänderung, die „wie es ausgeführt wird“ modernen Werkzeugen öffnet; trotzdem irritiert es, wenn man mit der Denkweise des Pull-Server-Betriebs von v1.1 ankommt.

Umgang mit Administratorrechten. set auf Ressourcen, die die ganze Maschine betreffen (HKLM, Windows-Features und so weiter), erfordert eine Erhöhung der Rechte, und die Nutzung von Windows-PowerShell-PSDSC-Ressourcen über den Adapter setzt ebenfalls die Ausführung als Administrator voraus.6 Benutzerbezogene und maschinenbezogene Einstellungen schon auf der Ebene des Konfigurationsdokuments zu trennen, erleichtert den Entwurf des Ausführungskontexts.

Schreiben Sie keine Geheimnisse in die Konfiguration. Konfigurationsdokumente sind Daten, die nach Git gehen. Schreiben Sie Passwörter oder API-Schlüssel nicht direkt hinein; parametrisieren Sie sie und übergeben Sie sie zur Laufzeit.

Lesen Sie fremde Konfigurationsdateien, bevor Sie sie ausführen. Ein Konfigurationsdokument hat die Macht, das System über Ressourcen zu ändern. Bevor Sie eine .winget-Datei oder ein Konfigurationsdokument aus einem öffentlichen Repository anwenden, prüfen Sie den Inhalt und die Vertrauenswürdigkeit der referenzierten Ressourcen. Das ist eine betriebliche Pflicht, vor der auch die offizielle Dokumentation ausdrücklich warnt.12

Der residente LCM von v1.1 gegenüber dem Befehlsmodell von v3In PSDSC v1.1 hielt ein residenter LCM die Konfiguration und übernahm periodisches Pull und automatische Behebung, während DSC v3 nur als Befehl gestartet wird, sodass Sie die periodische Ausführungsinfrastruktur selbst aus Aufgabenplanung, CI und Machine Configuration wählen und bereitstellenPSDSC v1.1: residenter LCMHält die Konfiguration, periodisches Pull, automatische BehebungDSC v3: nur BefehlsaufrufDie Ausführungsinfrastruktur stellen Sie bereitAufgabenplanung, CI, Machine Configuration

Abbildung 9: In v3 gibt es niemanden, „der sich die Konfiguration merkt und sie von selbst richtet“. Ob Sie das als Unannehmlichkeit oder als zurückgewonnene Kontrolle über die Ausführung nehmen, ist die Entwurfsentscheidung.

9. Zusammenfassung — die Anleitung durch ein Repository ersetzen

  • Wenn Sie jetzt mit deklarativem IaC für Windows beginnen, verwenden Sie Microsoft DSC v3 (dsc.exe). Von den vier Linien namens „DSC“ sollten Sie stets wissen, von welcher die Informationen handeln, die Sie lesen.3
  • DSC schreibt den „gewünschten Zustand“, nicht die „Schritte“, in YAML/JSON, und test (vergleichen) und set (die Differenz anwenden) garantieren idempotente Konvergenz. Der sichere Ablauf beginnt mit Beobachten über dsc resource get/test, prüft die Auswirkungen mit --what-if und wendet dann an.7
  • Vorhandene PSDSC-Ressourcen stoßen über Adapter zur v3-Welt hinzu, und .winget-Assets fürs Kitting über das WinGet-Configuration-v3-Schema (Dateien im v2-Format brauchen eine Formatmigration nach der Umwandlungsanleitung).910
  • v3 hat keinen LCM. Das Rückgrat des Betriebs ist, die Quelle der Wahrheit in Git zu halten, Drift mit periodischen Läufen von dsc config test zu erkennen und der Disziplin zu folgen: „Ist die Konfiguration richtig, beheben; ist die Realität richtig, die Konfiguration aktualisieren“.

Das Schicksal einer Anleitung war, von dem Moment an, in dem sie geschrieben wurde, von der Wirklichkeit abzuweichen. Deklarative Konfigurationsverwaltung macht aus dieser Abweichung eine „erkennbare Differenz“. Beginnen Sie damit, eine Handvoll Einstellungen der eigenen Maschine in ein Konfigurationsdokument zu schreiben und dsc config test auszuführen. Sie sollten ein Gefühl dafür bekommen, wie die Anleitung zu einem Repository wird.

Verwandte Artikel

Verwandte Beratungsbereiche

KomuraSoft LLC unterstützt die Migration der Konfiguration von Windows-Clients und -Servern zur deklarativen Verwaltung, die Automatisierung von Kitting und internen Standardumgebungen sowie die Umwandlung personenabhängiger Anleitungen in ausführbare Form.

Quellen

  1. Microsoft Learn, Microsoft Desired State Configuration overview. Dazu, dass DSC v3 eine deklarative, idempotente Konfigurationsplattform ist, die ohne Abhängigkeit von PowerShell auf Linux, macOS und Windows läuft; dazu, dass es keinen LCM (Local Configuration Manager) enthält, als Befehl gestartet wird und nicht als Dienst resident bleibt; zur Kompatibilität mit PSDSC-Ressourcen über Adapterressourcen; zur Installation aus der Microsoft-Store-Quelle von winget (stabile ID 9NVTPZWRC6KQ) oder aus den GitHub-Releases; und dazu, dass WinGet, Microsoft Dev Box und Azure Machine Configuration frühe Partner auf der Orchestrierungsschicht sind.  2 3 4 5

  2. Microsoft Learn, DSC configuration documents. Dazu, dass ein Konfigurationsdokument eine YAML/JSON-Datendatei ist, die den gewünschten Zustand deklariert, während „wie konfiguriert wird“ Sache der Ressource ist; dazu, dass die Pflichtproperties $schema und resources sind und jede Instanz name, type und properties hat; dazu, dass parameters und variables doppelte Definitionen reduzieren und dynamische Werte ausdrücken; dazu, dass Dokumente durch die vier Operationen dsc config get/test/set/export verarbeitet werden; und zur Unterstützung einer Teilmenge der Ausdrucksfunktionen von ARM-Vorlagen.  2 3

  3. Microsoft Learn, Desired State Configuration (DSC) Overview. Dazu, dass DSC vier Versionen hat (PSDSC 1.1, eingebaut in Windows PowerShell 5.1, PSDSC 2.0 für PowerShell 7, die PSDSC-3.0-Vorschau für die Linux-Unterstützung von Azure Machine Configuration und Microsoft DSC 3.0 als eigenständiges Produkt ohne Abhängigkeit von PowerShell), und dazu, dass Microsoft DSC 3.0 wirklich plattformübergreifend ist und vorhandene PSDSC-Ressourcen nutzen kann.  2

  4. Microsoft Learn, DSC Resources. Dazu, dass eine Ressource eine standardisierte Schnittstelle zu einem Konfigurationsziel ist, bei der Sie „was der gewünschte Zustand ist“ in deklarativer Syntax schreiben und die Ressource das „Wie konfigurieren“ übernimmt; dazu, dass Ressourcen stets die Operationen Get und Test haben und die meisten auch das Erzwingen über Set unterstützen; zum Angeben von Ressourcen über den vollqualifizierten Typnamen (owner.group.area/name); und dazu, dass Adapterressourcen Ressourcen, die keine Befehle sind, nutzbar machen. 

  5. Microsoft Learn, dsc resource set. Dazu, dass dsc config set jede Instanz stets testet (mit der test-Implementierung der Ressource oder einem synthetischen Test) und set nur bei Instanzen aufruft, die nicht im gewünschten Zustand sind; dazu, dass das eigenständige dsc resource set dagegen stets set aufruft und ein Vorabtest von set.implementsPretest im Ressourcenmanifest abhängt; und dazu, dass vor set ein dsc resource test für Ressourcen ohne implementsPretest empfohlen wird. 

  6. Microsoft Learn, Get started with DSC. Zum einführenden Ablauf, Ressourcen zu entdecken, einzeln aufzurufen und Konfigurationsdokumente zu verwalten; zum einzelnen Bedienen der Ressource Microsoft.Windows/Registry mit get, test und set; zum Prüfen, Anwenden und Bestätigen einer Konfiguration mit dsc config test/set/get; und dazu, dass bei Windows-PowerShell-PSDSC-Ressourcen ein Administratorterminal nötig ist.  2

  7. Microsoft Learn, dsc config set. Dazu, dass dsc config set der Befehl ist, der den gewünschten Zustand in einem Konfigurationsdokument auf das System anwendet, und dazu, dass die Option –what-if eine Vorhersage anzeigt, „was sich wie ändern würde, wenn das ausgeführt würde“, ohne tatsächlich etwas zu ändern. Außerdem, aus DSC Resource manifest whatIf property, dazu, dass diese Information aus dem Testergebnis synthetisiert wird, wenn eine Ressource das what-if-Verhalten nicht direkt implementiert.  2

  8. Microsoft Learn, dsc config export. Dazu, dass der Unterbefehl export ein Konfigurationsdokument erzeugt und zurückgibt, das jede vorhandene Instanz der im mit –file oder –input übergebenen Eingabedokument aufgeführten Ressourcen definiert; und dazu, dass das Eingabedokument auf Ressourcen beschränkt ist, deren Manifest einen export-Abschnitt hat, wobei jeder Ressourcentyp nur einmal deklariert wird. 

  9. Microsoft Learn, Microsoft.Adapter/WindowsPowerShell. Dazu, dass die Adapterressource DSC v3 ermöglicht, mit Windows PowerShell 5.1 kompatible PSDSC-Ressourcen (Skript, Klasse und Binär) zu entdecken und aufzurufen; dazu, dass sie das eingebaute Modul PSDesiredStateConfiguration 1.1 verwendet; dazu, dass dieser Name in DSC 3.2 den bisherigen Adapter Microsoft.Windows/WindowsPowerShell ersetzt; und zur Verwendung von Microsoft.Adapter/PowerShell (früher Microsoft.DSC/PowerShell) für klassenbasierte Ressourcen unter PowerShell 7.  2

  10. Microsoft Learn, WinGet Configuration file v3 schema reference. Dazu, dass das WinGet-Configuration-v3-Schema DSC v3 als Prozessor nutzt; dazu, dass WinGet 1.11 oder höher und der dscv3-Prozessor nötig sind (automatisch als gesondertes Paket Microsoft.DesiredStateConfiguration installiert); zum Angeben von dscv3 in metadata.winget.processor.identifier und zum direkten Schreiben von resources an der Dokumentwurzel; und dazu, dass eine Umwandlungsanleitung vom v2-Format im offiziellen Samples-Repository bereitsteht.  2 3

  11. Microsoft Learn, Understanding Azure Machine Configuration. Dazu, dass die Machine-Configuration-Funktion von Azure Policy Einstellungen im Betriebssystem für Azure-VMs und Azure-Arc-fähige Server verwaltet prüft und konfiguriert. 

  12. Microsoft Learn, configure-Befehl (winget). Dazu, dass winget configure der Befehl ist, der eine Maschine mit einer WinGet-Configuration-Datei in einen gewünschten Zustand versetzt; zur Warnung, den Dateiinhalt zu prüfen und die Vertrauenswürdigkeit der beteiligten Ressourcen zu verifizieren, bevor man ihn ausführt; und zu den Unterbefehlen show/list/test/validate/export zum Anzeigen des Dateiinhalts, Auflisten angewendeter Konfigurationen, Abgleichen des aktuellen mit dem gewünschten Zustand, Validieren einer Datei und Exportieren einer Konfiguration. 

Aktuelle Artikel mit denselben Schlagwörtern führen zu verwandten Themen weiter.

Diese Seiten ordnen den Artikel in einen größeren Leistungs- und Entscheidungskontext ein.

Dieser Artikel ist direkt mit den folgenden Leistungen verbunden.

Häufige Fragen

Fragen, die in Beratungen zu diesem Artikelthema häufig gestellt werden.

Es scheint mehrere Versionen von DSC zu geben. Welche soll ich verwenden?
Wenn Sie jetzt mit deklarativer Konfigurationsverwaltung beginnen, nehmen Sie Microsoft DSC v3 (dsc.exe). Es gibt vier Linien von DSC: PSDSC v1.1, das in Windows PowerShell 5.1 eingebaut ist, PSDSC v2 als Modul für PowerShell 7, PSDSC v3 (Vorschau) für die Linux-Unterstützung von Azure Machine Configuration, und Microsoft DSC v3, neu geschrieben als eigenständiger Befehl, der nicht von PowerShell abhängt. v3 ist plattformübergreifend, schreibt die Konfiguration als YAML/JSON-Daten statt als PowerShell-Skripte und kann vorhandene PSDSC-Ressourcen über Adapter wiederverwenden. Bei der Suche erleichtert das Anhängen von "DSC v3" oder "dsc.exe" die Trennung von Material älterer Generationen.
Worin unterscheiden sich DSC v3 und ein Ablaufskript (BAT oder PowerShell)?
Ein Ablaufskript beschreibt "die auszuführenden Schritte", daher müssen Sie Idempotenz selbst einbauen, damit der zweite Lauf nicht zu doppelter Anwendung oder Fehlern führt. DSC schreibt den "gewünschten Zustand" als Daten, und die Ressourcen übernehmen den Vergleich mit dem aktuellen Zustand (test) und das Anwenden der Differenz (set). Egal wie oft Sie dasselbe Konfigurationsdokument ausführen: Bei Elementen, die bereits im gewünschten Zustand sind, geschieht nichts. Sie können es also verteilen und erneut ausführen, ohne die Laufzahl zu beachten. Und weil die Konfiguration YAML-Daten ist, sind Diff-Reviews und Versionsgeschichte in Git deutlich einfacher als bei Skripten.
Werden meine vorhandenen PowerShell-DSC-Ressourcen und WinGet-Configuration-Assets wertlos?
Nein. DSC v3 kann vorhandene klassenbasierte und MOF-basierte PSDSC-Ressourcen über Adapterressourcen aufrufen (Microsoft.Adapter/PowerShell und Microsoft.Adapter/WindowsPowerShell in DSC 3.2 und später; davor Microsoft.DSC/PowerShell und Microsoft.Windows/WindowsPowerShell). WinGet Configuration nutzt ab dem v3-Schema (WinGet 1.11 und später) DSC v3 als Prozessor. Vorhandene .winget-Dateien im v2-Format laufen weiter auf dem bisherigen Prozessor; um sie auf den DSC-v3-Prozessor zu legen, müssen Sie sie nach der offiziellen Umwandlungsanleitung ins v3-Format konvertieren.
Wie erzwinge ich eine Konfiguration mit DSC v3 "fortlaufend"?
DSC v3 selbst ist ein Werkzeug, das als Befehl gestartet wird; es hat keinen residenten Agenten und keinen Mechanismus zur automatischen Behebung wie den LCM (Local Configuration Manager) von v1.1. Brauchen Sie fortlaufendes Anwenden und Prüfen, bauen Sie die Drifterkennung selbst, indem Sie dsc config test periodisch aus der Aufgabenplanung oder aus CI ausführen, oder legen Sie es auf eine Orchestrierungsschicht wie Azure Machine Configuration (die über Azure Arc auch lokale Server abdecken kann).
Ich scheue mich, dsc config set sofort auszuführen. Kann ich die Auswirkungen vorher prüfen?
Ja. dsc config test zeigt, welche Ressourceninstanzen nicht im gewünschten Zustand sind, ohne etwas zu ändern. Zusätzlich hat dsc config set die Option --what-if, die eine Vorhersage anzeigt, "was sich wie ändern würde, wenn das ausgeführt würde", ohne tatsächlich etwas zu ändern. Prüfen Sie die Differenzen zuerst mit test und --what-if, und führen Sie set erst aus, wenn Sie einverstanden sind; diese Reihenfolge ist sicher.

Autorenprofil

Profilseite des Artikelautors.

Go Komura

Geschäftsführer von KomuraSoft LLC

Spezialisiert auf Windows-Softwareentwicklung, technische Beratung und Fehleranalyse, insbesondere bei bestehenden Systemen und schwer reproduzierbaren Störungen.

Zurück zum Blog