Übersicht
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ähigkeit | Details |
|---|---|
| Konsistentes CSV-Layout | 18 Spalten, immer in derselben Reihenfolge, unabhängig davon, welche Kontexte im Log auftauchen |
| Mehrzeilige Einträge | PACKET-Detailblöcke und Ereignistexte bleiben am zugehörigen Eintrag hängen |
| DNS Server Versionen | Logformate von 2012 R2 bis 2025 |
| PowerShell-Versionen | Windows PowerShell 5.1+ und PowerShell 7.x |
| Dateigröße | Getestet mit Logs über 100 MB; Streaming in einem Durchgang |
| Header-Validierung | Lehnt Dateien ab, die keine DNS-Debug-Logs sind (kann deaktiviert werden) |
| Statistiken | Optionale Tageszusammenfassungen, pro Kontext und pro Client/Protokoll/Typ |
| Pipeline-Unterstützung | Get-ChildItem *.log | Convert-DNSDebugLogFile |
| Kompression | Optionale ZIP-Ausgabe, typischerweise 90 % kleiner |
| Quellbereinigung | Optionales Löschen des Logs nach erfolgreichem Lauf |
| Internationale Logs | Parst und schreibt Datumsangaben kulturabhängig, sodass ein de-DE Log auf einem en-US Rechner gelesen werden kann |
| Netzwerkpfade | Liest Quellen von SMB/UNC-Pfaden |
| Gesperrte Dateien | Liest Logs, die DNS Server (oder andere Prozesse) gerade geöffnet haben |
Aktives Log vs. rotiertes Log
Das Modul kann die Logdatei lesen, in die DNS Server gerade schreibt. Das ist praktisch für einen schnellen Blick, aber die Datei ändert sich während der Umwandlung ständig. Das Ergebnis kann die neuesten Einträge vermissen oder mit einem abgeschnittenen Eintrag enden.
Für alles Geplante oder Produktionsrelevante solltest du stattdessen rotierte, geschlossene Logdateien umwandeln und niemals ein aktives Log mit -RemoveSourceFile kombinieren.
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
- Ausgabeformate — was die Spalten bedeuten, mit echten Beispieldateien
- Parameter und Optionen — die Stellschrauben, einfach erklärt
- Performance — warum es schnell ist und wie es schnell bleibt
- Integration — Excel, Power BI, SQL, SIEM, Python
- Betriebliche Best Practices — Einsatz im Produktivbetrieb
- Anwendungsbeispiele — geplante Tasks, GPO-Rollout, SQL-Analysen
- Befehlsreferenz — die autoritative Parameterliste
Lizenz und Support
MIT-Lizenz. Community-Support läuft über GitHub Issues; Fehlerberichte und Featurewünsche sind willkommen.
- GitHub-Repository: AndiBellstedt/DNSServer.DebugLogParser
- PowerShell Gallery: DNSServer.DebugLogParser