# Praktische Anwendung in einer Domänenumgebung (GPO-gesteuerte Sammlung und Konvertierung)

> Dieses Beispiel zeigt, wie man einen GPO-gesteuerten Workflow zur Sammlung und Konvertierung von DNS-Debug-Protokollen auf Domänencontrollern implementiert.

---

LLMS index: [llms.txt](/llms.txt)

---

Dieses Dokument beschreibt ein praktisches, durchgängiges Beispiel für den Einsatz von DNSServer.DebugLogParser in einer Active Directory-Domänenumgebung, mit Fokus auf die Konvertierung von Windows DNS Server-Debug-Protokollen auf Domänencontrollern.

Dieses Beispiel wird von einem [ZIP-Archiv][gpo-zip] begleitet, das die Richtlinien-Artefakte enthält, die zur Umsetzung des hier beschriebenen Workflows verwendet werden.  
Die wichtigsten Artefakte sind das <a href="../gpo/backup/manifest.xml" target="_blank" rel="noopener noreferrer">Backup-Manifest</a>, der <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/gpreport.xml" target="_blank" rel="noopener noreferrer">GPO-Bericht</a>, die <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Files.xml" target="_blank" rel="noopener noreferrer">Files.xml</a>, das <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Set-DNSServerDebugLogging.ps1" target="_blank" rel="noopener noreferrer">Set-DNSServerDebugLogging.ps1</a> und die <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/ScheduledTasks/ScheduledTasks.xml" target="_blank" rel="noopener noreferrer">ScheduledTasks.xml</a>.

## Szenario

- Mehrere Domänencontroller (DCs) hosten die DNS-Serverrolle.
- DNS-Debug-Protokollierung ist auf jedem DC aktiviert und wird konsistent über eine geplante Aufgabe konfiguriert (Protokolldateien werden nach `C:\Administration\Logs\DNSServer` geschrieben).
- Ein zentral verwalteter Prozess konvertiert die Protokolle in CSV für:
  - Sicherheitsanalysen
  - Betriebsberichte
  - Fehlerbehebung
  - Compliance/Aufbewahrung

## Zielergebnisse

- Einheitliche Konvertierungseinstellungen auf allen DCs
- Vorhersehbarer Ausgabeort und -namen
- Optionale Komprimierung zur Reduzierung des Speicherbedarfs
- Optionale Statistik-Ausgaben für schnelle tägliche Zusammenfassungen
- Minimales Risiko auf dem Host mit expliziten Wiederholungs- und Bereinigungsüberlegungen

## Vorgeschlagene Architektur

### Sammelmodell: lokale Konvertierung + zentrale Abholung

1. Jeder DC schreibt DNS-Debug-Protokolle mit aktivierter Rollierung auf die Festplatte.
2. Jeder DC konvertiert die rotierten `*.log`-Dateien in eine Daten-CSV und Statistik-CSVs und komprimiert die Ausgaben dann zeitgesteuert (Task Scheduler) zu `*.zip`.
3. Die Ausgaben werden neben den Protokolldateien abgelegt, damit die Pipeline einfach bleibt.
4. Ein zentraler Server sammelt die `*.zip`-Ausgaben, z. B. über Dateifreigabe, geplante Kopie, SIEM-Forwarder oder einen agentenbasierten Collector.

Dieses Modell minimiert Netzwerkzugriffe auf große Rohprotokolle und hält die Verarbeitung nahe an den Daten.

## GPO-Workflow

Der Workflow wird über Gruppenrichtlinien (Computerkonfiguration) implementiert, um konsistente Einstellungen auf allen Domänencontrollern sicherzustellen.

Referenzimplementierung in diesem Repository enthalten (<a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/gpreport.xml" target="_blank" rel="noopener noreferrer">GPO-Bericht</a>):

- Archiv-/Berichtsname: `T0-C-Analytics-DNSDebugLogging`
- Backup-ID: `{2B6F16BC-0E7C-4787-83D7-2854FED882EE}`
- GPO-Linkziel: `corp.company.com/Domain Controllers`
- Elementfilter (für Datei-Bereitstellung und geplante Aufgaben): gilt nur, wenn `C:\Windows\System32\dns.exe` existiert

### 1) Voraussetzungen (Ordner + Modul)

Das bereitgestellte Backup geht davon aus, dass diese Ordner bereits existieren. Füge separate GPP-Elemente hinzu, wenn die Bereitstellung sie automatisch erstellen soll:

- `C:\Administration\Scripts`
- `C:\Administration\Logs\DNSServer`

Das Backup setzt außerdem voraus, dass [Convert-DNSDebugLogFile][convert-dnsdebuglogfile] bereits auf den DCs verfügbar ist. Die Konvertierungsaufgabe startet Windows PowerShell 5.1 mit `-NoProfile` und importiert das Modul nicht explizit, daher muss das Modul in einem maschinenweiten Windows PowerShell-Modulpfad installiert sein, der für `LocalSystem` sichtbar ist. Empfohlene Vorgehensweisen:

- Installiere DNSServer.DebugLogParser auf den DCs, z. B. aus der PowerShell Gallery (wenn die Richtlinie dies erlaubt).
- Stelle das Modul über ein internes Repository / Dateifreigabe bereit, sodass es in `$env:PSModulePath` auffindbar ist.
- Füge einen expliziten `Import-Module`-Befehl zur Aufgabenaktion hinzu, wenn du ein deterministisches Ladeverhalten möchtest.

### 2) Bereitstellung des Debug-Logging-Konfigurationsskripts (GPP Dateien)

Die GPO stellt das Skript bereit:

- Quelle (im SYSVOL via GPP): `%GptPath%\Preferences\Files\Set-DNSServerDebugLogging.ps1`
- Ziel (auf jedem DC): `C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1`

Dies ist im GPP-Dateielement in <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Files.xml" target="_blank" rel="noopener noreferrer">Files.xml</a> implementiert.

### 3) Geplante Aufgabe: DNS-Debug-Logging konfigurieren

Die GPO erstellt eine geplante Aufgabe namens `Set-DNSServerDebugLogging`.

- Sicherheitskontext im bereitgestellten Backup: `SYSTEM` mit Anmeldetyp `S4U`
- Trigger im bereitgestellten Backup: täglich (Startzeitpunkt `2025-03-01T00:00:01`)
- Aktion in <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/ScheduledTasks/ScheduledTasks.xml" target="_blank" rel="noopener noreferrer">ScheduledTasks.xml</a>:
  - `powershell.exe -ExecutionPolicy RemoteSigned -command " & { C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1 }"`
  - Arbeitsverzeichnis: `C:\Administration\Scripts`

Das verlinkte <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Set-DNSServerDebugLogging.ps1" target="_blank" rel="noopener noreferrer">Set-DNSServerDebugLogging.ps1</a>-Skript konfiguriert DNS-Debug-Logging über `Get-DnsServerDiagnostics` / `Set-DnsServerDiagnostics` und insbesondere:

- Aktiviert Logging in Dateien + Rollierung
- Schreibt nach: `C:\Administration\Logs\DNSServer\DnsDebugLog_<COMPUTERNAME>.<Domain>_.log`
- Verwendet eine Rolliergröße von 10 MB pro Datei
- Erfasst hauptsächlich abfragebezogene Aktivitäten (Abfragen + Benachrichtigungen + Updates + Frage-Transaktionen) und schließt vollständiges Paket-Logging aus


### 4) Geplante Aufgabe: konvertiere rotierte Debug-Protokolle in komprimierte CSV

Die GPO erstellt eine geplante Aufgabe namens `Convert-DNSDebugLogs`.

- Sicherheitskontext im bereitgestellten Backup: `SYSTEM` mit Anmeldetyp `InteractiveToken`
- Trigger im bereitgestellten Backup: täglich (Startzeitpunkt `2026-01-01T00:30:00`)
- Arbeitsverzeichnis: `C:\Administration\Logs\DNSServer`
- Aktion in <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/ScheduledTasks/ScheduledTasks.xml" target="_blank" rel="noopener noreferrer">ScheduledTasks.xml</a> (zur besseren Lesbarkeit formatiert):

```powershell
Get-ChildItem .\*.log |
  Sort-Object lastwritetime, Name -Descending |
  Select-Object -Skip 1 |
  Convert-DNSDebugLogFile `
    -ComputerName $env:COMPUTERNAME `
    -Delimiter ';' `
    -OutputType Both `
    -ContextFilter Packet `
    -OutputCulture sv-SE `
    -CompressOutput
```

Designhinweise:

- `Select-Object -Skip 1` vermeidet absichtlich die Verarbeitung der neuesten (aktiven) Protokolldatei. [Convert-DNSDebugLogFile][convert-dnsdebuglogfile] kann eine aktuell vom DNS-Server geöffnete Protokolldatei lesen, aber diese Datei ändert sich während des Lesens: Die Ausgabe kann die neuesten Einträge vermissen oder mit einem abgeschnittenen Datensatz enden, und zwei Durchläufe liefern nicht identische Ergebnisse. Das Überspringen der aktiven Datei macht die geplante Ausgabe reproduzierbar.
- Das bedeutet, dass aktuelle Daten erst nach der Rollierung exportiert werden; bei DCs mit geringem Volumen kann die aktive Protokolldatei länger als einen Tag unberührt bleiben. Verringere die Rolliergröße, wenn diese Verzögerung für deinen Anwendungsfall zu lang ist.
- Da [Convert-DNSDebugLogFile][convert-dnsdebuglogfile] standardmäßig `-OutputFile` auf „gleicher Ordner, gleicher Name, `.csv`“ setzt, landen die Ausgaben neben den `*.log`-Eingaben.
- Mit `-CompressOutput` erzeugt jede verarbeitete Protokolldatei eine `*.zip` und die Zwischen-CSVs werden entfernt.
- Sofern du verarbeitete `*.log`-Dateien nicht archivierst oder löschst, werden spätere Durchläufe jede nicht-aktive Protokolldatei erneut verarbeiten.
- Die Aufgabe wirft einen Fehler, wenn `$Error.Count -gt 0` ist, um einen fehlgeschlagenen Lauf zu signalisieren.

### 5) Zentrale Erfassung

Optionen (eine auswählen):

- Dateifreigabe-Erfassung: DC schreibt (oder kopiert) `C:\Administration\Logs\DNSServer\*.zip` nach `\\fileserver\share\dns\$env:COMPUTERNAME\...` (erteile Freigabe- und NTFS-Rechte für die DC-Computer-Konten oder die Gruppe Domänencontroller, wenn die Aufgabe als `SYSTEM` läuft)
- Pull-Modell: zentraler Job liest `\\dc\C$\Administration\Logs\DNSServer\*.zip` (am wenigsten bevorzugt; erfordert Admin-Freigaben)
- Agent-Forwarder: SIEM-/Log-Pipeline, die die `*.zip`-Ausgaben versendet

## Betriebstechnische Überlegungen

- Least Privilege: Aufgaben laufen als `SYSTEM`; stelle sicher, dass die lokalen Ordner beschreibbar sind und dass alle UNC-Ziele Zugriff für das Computerkonto gewähren, falls verwendet.
- Signierungsrichtlinie: beide Aufgaben verwenden `-ExecutionPolicy RemoteSigned`; signiere oder entsperre das bereitgestellte Skript und Modul gemäß deiner Richtlinie.
- Plattennutzung: `-CompressOutput` hilft erheblich, aber dieser Workflow entfernt die Quellprotokolle nicht; plane Aufbewahrung und Bereinigung.
- Wiederverarbeitungsverhalten: Sofern du verarbeitete Protokolle nicht archivierst oder löschst, verarbeitet die Konvertierungsaufgabe bei späteren Läufen jede nicht-aktive `*.log`-Datei erneut. Das ist einfach und robust, kann aber Ausgaben überschreiben und doppelte nachgelagerte Erfassungen erzeugen, wenn dein Collector nicht dedupliziert.
- Multi-DC-Konsolidierung: `-ComputerName $env:COMPUTERNAME` ist enthalten, damit konsolidierte Datensätze nachvollziehbar bleiben. Beachte, dass `-ComputerName` nur die Ausgabe beschriftet — es stellt keine Remote-Verbindung her.
- Netzwerkfreigaben: [Convert-DNSDebugLogFile][convert-dnsdebuglogfile] kann Quellprotokolle von SMB/UNC-Pfaden lesen, aber lokale Konvertierung und Versand der komprimierten Ergebnisse ist das bessere Muster für große Rohprotokolle. Wenn du einen UNC-Pfad verwendest, denke daran, dass eine Aufgabe, die als `SYSTEM` läuft, sich im Netzwerk als Computerkonto authentifiziert und dort Freigabe- sowie NTFS-Rechte benötigt.
- Datumsformat: `-OutputCulture sv-SE` wird bewusst verwendet, damit Zeitstempel als `2026-01-20 23:00:16` geschrieben werden. Dieses Format wird von SQL Server, Power BI und den meisten Importwerkzeugen ohne Hinweis gelesen, unabhängig von der Gebietsschema-Einstellung des DC, der das Protokoll erzeugt hat.
- Validierung: Die Kopfzeilenvalidierung bleibt aktiviert, da die Aufgabe `-SkipHeaderValidation` nicht verwendet (empfohlen).

## Validieren und anpassen (mit dem ZIP)

Nutze das [ZIP-Archiv][gpo-zip] als Referenzimplementierung und passe dann folgende Aspekte an deine Umgebung an:

- Zielbereich: welche DCs / OUs die Richtlinie erhalten
- Ausführungsidentität: bestätige, dass beide geplanten Aufgaben den vorgesehenen Anmeldetyp verwenden (`S4U` vs. `InteractiveToken`) oder normalisiere sie auf deinen Standard
- Ordnererstellung: entscheide, ob `C:\Administration\Scripts` und `C:\Administration\Logs\DNSServer` anderswo vorab bereitgestellt werden oder durch zusätzliche GPP-Elemente erstellt werden sollen
- Pfade: bestätige, dass `C:\Administration\Scripts` und `C:\Administration\Logs\DNSServer` deinen Standards entsprechen
- Aufbewahrung: entscheide, ob Rohprotokolle behalten werden und wie lange (besonders bei aktivierter Bereinigungsoption)
- Erfassung: bestätige, wo CSV/ZIP-Ausgaben geschrieben und wie sie zentral gesammelt werden

Wenn du die genaue GPO-Konfiguration validieren möchtest, ohne sie zu importieren, sind die maßgeblichen Quellen in diesem Repo:

- <a href="../gpo/backup/manifest.xml" target="_blank" rel="noopener noreferrer">manifest.xml</a> für Backup-Metadaten
- <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/gpreport.xml" target="_blank" rel="noopener noreferrer">gpreport.xml</a> für den menschenlesbaren Vollbericht
- <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Files.xml" target="_blank" rel="noopener noreferrer">Files.xml</a> für die Datei-Bereitstellung
- <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/Files/Set-DNSServerDebugLogging.ps1" target="_blank" rel="noopener noreferrer">Set-DNSServerDebugLogging.ps1</a> für Skriptinhalt
- <a href="../gpo/backup/{2B6F16BC-0E7C-4787-83D7-2854FED882EE}/DomainSysvol/GPO/Machine/Preferences/ScheduledTasks/ScheduledTasks.xml" target="_blank" rel="noopener noreferrer">ScheduledTasks.xml</a> für geplante Aufgaben

[convert-dnsdebuglogfile]: ../commands/convert-dnsdebuglogfile/
[gpo-zip]: ../gpo/T0-C-Analytics-DNSDebugLogging.zip
