Übersicht

Was DNSServer.DebugLogParser macht, wie ein Windows DNS-Debug-Log aussieht und wann sich die Umwandlung in CSV lohnt.

For AI agents: a documentation index is available at /llms.txt; a markdown version of this page is available at /de/docs/01-overview/index.md.

Windows DNS Server kann ein Debug-Log schreiben. Es ist eine Textdatei, die für Menschen lesbar ist und an einem stark genutzten Domänencontroller täglich um mehrere hundert Megabyte wächst. Diese Kombination macht sie nahezu nutzlos, sobald du eine Frage beantworten willst wie „Welcher Client hat diese Domain letzte Nacht 40.000 Mal abgefragt?“

DNSServer.DebugLogParser verwandelt diese Textdatei in eine CSV-Tabelle. Eine Logzeile wird zu einer Zeile mit benannten Spalten, sodass du sie in Excel öffnen, in Power BI laden, massenhaft in SQL Server einfügen oder an dein SIEM schicken kannst.

Das Modul enthält einen einzigen Befehl:

Convert-DNSDebugLogFile -InputFile "C:\Windows\System32\dns\dns.log"

Das ist der ganze Einstiegspunkt. Alles andere auf dieser Seite dreht sich darum, es im großen Stil, nach Zeitplan und über mehrere Server hinweg zu machen.

Wie ein DNS-Debug-Log aussieht

Ein roher Eintrag ist eine einzelne Zeile mit Positionsfeldern, einige davon in Klammern:

2026-01-20 23:00:16 0FE0 PACKET 000002C53117D990 UDP Rcv 10.0.0.2 c049 Q [0001 D NOERROR] A (3)odc(9)officeapps(4)live(3)com(0)

Nach der Umwandlung ist dasselbe Ereignis eine CSV-Zeile, die du filtern und sortieren kannst:

DateTime;ThreadId;Context;PacketId;Protocol;Direction;ClientIP;Xid;Type;Opcode;FlagsHex;FlagsChar;ResponseCode;QuestionType;QuestionName;Information;Details;ComputerName
2026-01-20 23:00:16;0FE0;Packet;000002C53117D990;UDP;Rcv;10.0.0.2;c049;Query;Standard;0001;RecursionDesired;NOERROR;A;"odc.officeapps.live.com";"";"";dc01

Beachte zwei Dinge, die das rohe Format erschwert und der Parser für dich erledigt:

  • Der abgefragte Name ist im DNS-Wire-Format gespeichert, (3)odc(9)officeapps(4)live(3)com(0), und wird zu einem normalen FQDN.
  • Ein einzelnes Ereignis ist nicht immer eine einzelne Zeile. PACKET-Detailblöcke und Ereignismeldungen setzen sich in eingerückten Folgelinien fort. Der Parser hängt diese an den zugehörigen Datensatz an, anstatt sie zu verwerfen oder verwaiste Zeilen zu erzeugen.

Jeder Eintrag enthält bis zu 16 native Felder — Zeitstempel, Protokoll, Richtung, Client-IP, Abfragetyp, abgefragter Name, Antwortcode, Flags und mehr. Die vollständige Spaltenliste findest du in Ausgabeformate.

Warum die Umwandlung lohnt

Fehlerbehebung

  • Herausfinden, warum ein Name nicht aufgelöst wird und ob die Abfrage überhaupt den Server erreicht hat
  • Fehlkonfigurierte Clients oder Anwendungen identifizieren, die den Server überlasten
  • Nachverfolgen, wo eine problematische Abfrage tatsächlich herkommt
  • Zonentransfers und allgemeines DNS-Verhalten überprüfen

Leistung und Kapazität

  • Clients nach Abfragevolumen sortieren und die lauten Kandidaten finden
  • Sehen, welche Record-Typen deinen Traffic dominieren
  • Konfigurationsfehler erkennen, die vermeidbare Abfragen verursachen
  • Serverlast über die Zeit verfolgen statt zu raten

Sicherheitsanalyse

  • DNS-Tunneling und Datenexfiltration erkennen (typischerweise sichtbar als übermäßiger TXT-Traffic — siehe das SQL Server Analysebeispiel)
  • Abfragen gegen Malware- und Command-and-Control-Domains finden
  • Abfragemuster eines kompromittierten Hosts erkennen
  • DNS-Amplification-Missbrauch beobachten
  • Rekonstruieren, was während eines Vorfalls passiert ist

Compliance und Auditing

  • Protokollierungs- und Aufbewahrungspflichten erfüllen
  • Eine Audit-Trail der Netzwerkaktivität führen
  • Berichte für Management oder Auditoren erstellen

Wie das Modul funktioniert

Convert-DNSDebugLogFile liest das Log als Stream und schreibt die CSV ebenfalls als Stream. Die Datei wird nie komplett in den Speicher geladen, sodass ein 100 MB Log ungefähr genauso viel RAM benötigt wie ein 10 MB Log. Details findest du unter Performance.

Das bekommst du:

FähigkeitDetails
Konsistentes CSV-Layout18 Spalten, immer in derselben Reihenfolge, unabhängig davon, welche Kontexte im Log auftauchen
Mehrzeilige EinträgePACKET-Detailblöcke und Ereignistexte bleiben am zugehörigen Eintrag hängen
DNS Server VersionenLogformate von 2012 R2 bis 2025
PowerShell-VersionenWindows PowerShell 5.1+ und PowerShell 7.x
DateigrößeGetestet mit Logs über 100 MB; Streaming in einem Durchgang
Header-ValidierungLehnt Dateien ab, die keine DNS-Debug-Logs sind (kann deaktiviert werden)
StatistikenOptionale Tageszusammenfassungen, pro Kontext und pro Client/Protokoll/Typ
Pipeline-UnterstützungGet-ChildItem *.log | Convert-DNSDebugLogFile
KompressionOptionale ZIP-Ausgabe, typischerweise 90 % kleiner
QuellbereinigungOptionales Löschen des Logs nach erfolgreichem Lauf
Internationale LogsParst und schreibt Datumsangaben kulturabhängig, sodass ein de-DE Log auf einem en-US Rechner gelesen werden kann
NetzwerkpfadeLiest Quellen von SMB/UNC-Pfaden
Gesperrte DateienLiest Logs, die DNS Server (oder andere Prozesse) gerade geöffnet haben

Aktives Log vs. rotiertes Log

Das praktische Muster ist, auf dem DNS-Server die Protokollrotation zu aktivieren und die geplante Umwandlung die neueste Datei überspringen zu lassen:

Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME

Eine vollständige, auf Gruppenrichtlinien basierende Umsetzung ist im GPO-gesteuerten Sammelbeispiel dokumentiert.

Wohin als Nächstes

Lizenz und Support

MIT-Lizenz. Community-Support läuft über GitHub Issues; Fehlerberichte und Featurewünsche sind willkommen.