1 - Convert-DNSDebugLogFile
SYNOPSIS
Wandelt Windows DNS-Server-Debugprotokolle in ein strukturiertes CSV-Format zur Analyse und Berichterstellung um.
SYNTAX
__AllParameterSets
Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
[[-ComputerName] <string>] [[-OutputType] <string>] [[-ContextFilter] <string[]>]
[[-InputCulture] <cultureinfo>] [[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation]
[-RemoveSourceFile] [-CompressOutput] [-NoDetailsParsing] [-WhatIf] [-Confirm] [<CommonParameters>]
ALIASES
Dieses Cmdlet hat folgende Aliase,
BESCHREIBUNG
Konvertiert Windows DNS-Server-Debugprotokolldateien in strukturierte CSV-Daten, die in Excel, Power BI, SQL-Datenbanken oder SIEM-Tools analysiert werden können. Entwickelt für Sicherheitsanalysen, Leistungsüberwachung, Fehlerbehebung und Compliance-Berichte.
Das Cmdlet analysiert DNS-Debugprotokolle und schreibt eine konsistente CSV-Ausgabe zur Analyse. Die CSV-Ausgabe enthält 18 Spalten, darunter eine Information-Spalte für Ereignis-/Diagnosetexte, eine optionale Details-JSON-Spalte für Paketdetailblöcke und eine immer vorhandene ComputerName-Spalte (leer, sofern nicht angegeben).
WICHTIGE FUNKTIONEN:
- Streaming-Verarbeitung vermeidet das Laden der gesamten Datei in den Speicher (geeignet für sehr große Protokolle)
- Hochleistungs-Parsing optimiert für große Dateien (100 MB+)
- Anpassbarer CSV-Trennzeichen (Standard: Semikolon)
- Optionale statistische Zusammenfassungen mit aggregierten Metriken
- Kontextfilterung (Packet, Event, Note und weitere Kontexte) zur Fokussierung auf bestimmte Protokolleintragstypen
- Kulturabhängige Datumsanalyse und -formatierung für internationale Server
- Pipeline-Unterstützung für die Stapelverarbeitung mehrerer Dateien
- Optionale Komprimierung der Ausgabedateien (ZIP-Format)
- Optionale automatische Entfernung der Quelldateien nach der Verarbeitung
- Kopfzeilenvalidierung zur Sicherstellung der Datenintegrität
AUSGABEFORMAT:
Die Spalte ComputerName ist immer am Ende jedes Datensatzes enthalten. Wenn der Parameter -ComputerName nicht angegeben wird, bleibt die Spalte leer. Dies gewährleistet eine konsistente Ausgabestruktur für Multi-Server-Konsolidierungsszenarien.
LEISTUNG:
Optimiert durch Verwendung von StreamReader/StreamWriter mit 64KB-Puffern, Streaming-Verarbeitung für speichereffiziente Handhabung großer Dateien, String-Operationen statt Regex, manuelle CSV-Erzeugung und effiziente Hashtable-basierte Statistik-Erfassung.
KOMPATIBILITÄT:
- PowerShell 5.1+ (Desktop- und Core-Editionen)
- Windows Server 2016+
- DNS Server 2012 R2 bis 2025 Protokollformate
BEISPIELE
BEISPIEL 1
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
Konvertiert das DNS-Debugprotokoll mit Standardeinstellungen (sowohl Daten- als auch Statistikdateien mit Semikolon als Trennzeichen).
Ausgabe:
- C:\Logs\dns.csv
- C:\Logs\dns_Statistic.csv
- C:\Logs\dns_PacketStatistic.csv
BEISPIEL 2
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType CSV
Erzeugt nur die Datendatei ohne Statistiken.
Ausgabe: C:\Logs\dns.csv
BEISPIEL 3
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType Statistic
Erzeugt nur die Statistikdateien mit aggregierten Metriken.
Ausgabe:
- C:\Logs\dns_Statistic.csv
- C:\Logs\dns_PacketStatistic.csv
BEISPIEL 4
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"
Konvertiert das Protokoll an einen benutzerdefinierten Speicherort.
Ausgabe: C:\Output\parsed.csv
BEISPIEL 5
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both
Konvertiert mit Komma als Trennzeichen und fügt die Spalte ComputerName mit dem Wert “DNS01” hinzu.
Ausgabe:
- C:\Logs\dns.csv
- C:\Logs\dns_Statistic.csv
- C:\Logs\dns_PacketStatistic.csv
BEISPIEL 6
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -OutputType Both
Batch-Verarbeitung mehrerer DNS-Debugprotokolldateien über die Pipeline.
Ausgabe: Für jede .log-Datei werden .csv- und _statistic.csv-Dateien erzeugt.
BEISPIEL 7
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
Konvertiert und komprimiert die Ausgabe in ein ZIP-Archiv.
Ausgabe: C:\Logs\dns.zip (enthält dns.csv + Statistikdateien)
BEISPIEL 8
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -RemoveSourceFile -Verbose
Konvertiert das Protokoll und entfernt die Quelldatei nach erfolgreicher Verarbeitung.
Verbose-Ausgabe bestätigt die Dateientfernung.
BEISPIEL 9
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'
Parst das deutsche Datumsformat (TT.MM.JJJJ) und gibt im US-Format (MM/TT/JJJJ) aus.
Verwende dies bei der Verarbeitung von Protokollen von Servern mit unterschiedlichen Regionaleinstellungen.
BEISPIEL 10
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet'
Konvertiert nur DNS-Abfrage-/Antwortpakete, schließt EVENT- und Note-Einträge aus.
Verwende dies, um die Analyse auf den tatsächlichen DNS-Verkehr zu fokussieren.
BEISPIEL 11
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet','Event'
Konvertiert sowohl DNS-Abfrage-/Antwortpakete als auch Serverereignisse, schließt Note- und andere Einträge aus.
Verwende dies, um DNS-Verkehr zusammen mit Serverereigniskontext zu analysieren.
BEISPIEL 12
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -RemoveSourceFile -CompressOutput
Automatisierte Protokollarchivierung: verarbeitet alle Protokolle, komprimiert die Ausgabe und entfernt die Quelldateien.
Ideal für geplante Protokollverarbeitungspipelines.
BEISPIEL 13
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\large-dns.log" -NoDetailsParsing
Verarbeitet eine große Protokolldatei mit deaktivierter Detailanalyse für maximale Leistung.
PACKET-Detailblöcke werden übersprungen, die Details-Spalte bleibt leer.
Verwende dies bei sehr großen Dateien, wenn die detaillierte Paketstruktur nicht benötigt wird.
PARAMETER
-CompressOutput
Komprimiert die Ausgabedateien im CSV-Format nach der Erstellung in ein ZIP-Archiv.
Erstellt eine .zip-Datei, die die generierten CSV-Dateien enthält, und entfernt anschließend die unkomprimierten CSV(s).
Die ZIP-Datei wird im gleichen Verzeichnis wie die Ausgabedatei mit dem gleichen Basisnamen erstellt.
Vorteile:
- Reduziert den Speicherplatzbedarf erheblich (CSV-Dateien komprimieren sich typischerweise um 90%+)
- Vereinfacht Dateiverwaltung und Archivierung
- Geeignet für Langzeitspeicherung
Beispiel: Eingabe ‘dns.log’ erzeugt ‘dns.csv’, das zu ‘dns.zip’ komprimiert wird, danach wird ‘dns.csv’ entfernt.
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-ComputerName
Gibt den Wert für die Spalte ComputerName in der CSV-Ausgabe an.
Die Spalte ComputerName ist immer in der Ausgabe enthalten – wenn dieser Parameter nicht angegeben wird, bleibt die Spalte leer.
Verwende dies bei der Konsolidierung von Protokollen mehrerer DNS-Server, um den Quellserver in kombinierten Datensätzen zu identifizieren.
Hinweis: Dies ist KEIN Remoting-Parameter.
Er kennzeichnet nur die Ausgabe.
Wenn du -InputFile auf einen UNC-Pfad setzt, wird die Datei von diesem Pfad gelesen (keine WinRM-/Remote-Ausführung erfolgt).
Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Server
- DNSServer
- HostName
ParameterSets:
- Name: (All)
Position: 3
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-Confirm
Fordert vor Ausführung des Cmdlets eine Bestätigung an.
Wenn angegeben, erfolgt eine Abfrage vor:
- Verarbeitung jeder DNS-Debugprotokolldatei
- Entfernen von Quelldateien (wenn -RemoveSourceFile angegeben ist)
- Überschreiben vorhandener Ausgabedateien
Nützlich für interaktive Verarbeitung, wenn du steuern möchtest, welche Dateien verarbeitet werden.
Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- cf
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-ContextFilter
Filtert, welche Protokolleintragstypen in die Ausgabe aufgenommen werden.
Akzeptiert einzelne oder mehrere Werte.
DNS-Debugprotokolle enthalten verschiedene Kontexttypen:
- PACKET: DNS-Abfrage- und Antwortpaketinformationen (primäre Daten)
- EVENT: DNS-Serverereignisse (z.B. „Der DNS-Server wurde gestartet.“)
- Note: Diagnosenotizen und Warnungen (z.B. Socket-Fehler, interne Zustände)
- DSPoll, Init, Lookup, Recurse, Remote, Tombstone: Weitere Kontexttypen
Gültige Werte:
- ‘All’: Alle Kontexttypen einschließen (Standard)
- ‘Packet’: Nur PACKET-Einträge einschließen (DNS-Abfragen/-Antworten)
- ‘Event’: Nur EVENT-Einträge einschließen (Serverereignisse)
- ‘Note’: Nur Note-Einträge einschließen (Diagnoseinformationen)
- Beliebige Kombination: Mehrere Werte angeben, um spezifische Kontexttypen einzuschließen
Standard: All
Beispiele:
- ‘Packet’ filtert nur DNS-Verkehr
- ‘Packet’,‘Event’ umfasst DNS-Verkehr und Serverereignisse
- ‘Note’,‘Event’ umfasst Diagnosenotizen und Serverereignisse
Hinweis: Bei Filterung auf ‘Event’ oder ‘Note’ enthalten nur die Spalten DateTime, ThreadId, Context und Information Daten. Andere Spalten (Protokoll, ClientIP usw.) bleiben leer.
Type: String[]
DefaultValue: "@('All')"
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 5
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-Delimiter
Gibt das Trennzeichen für die CSV-Ausgabe an.
Standard: Semikolon (;)
Übliche Alternativen: Komma (,), Tabulator (`t), Pipe (|)
Verwende Semikolon in Regionen, in denen Komma als Dezimaltrennzeichen verwendet wird (Europa).
Verwende Komma für Standard-CSV-Tools und Datenbanken, die komma-separierte Werte erwarten.
Type: String
DefaultValue: ;
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 2
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
Gibt die Kultur/Region an, die zum Parsen von Datums-/Uhrzeitwerten im DNS-Debugprotokoll verwendet wird.
DNS-Server-Debugprotokolle verwenden das Datumsformat der Windows-Region auf dem Server, auf dem das Protokoll erstellt wurde.
Verwende diesen Parameter bei der Verarbeitung von Protokollen von Servern mit unterschiedlichen Regionaleinstellungen.
Standard: Aktuelle Kultur
Häufige Beispiele:
- ‘de-DE’ oder ‘de-AT’: Deutsches Format (TT.MM.JJJJ oder TT/MM/JJJJ)
- ’en-US’: US-Format (MM/TT/JJJJ mit AM/PM)
- ’en-GB’: UK-Format (TT/MM/JJJJ mit 24-Stunden-Zeit)
- ‘sv-SE’: Schwedisch/ISO-Format (JJJJ-MM-TT)
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 6
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
Gibt den Pfad zur zu parsenden DNS-Debugprotokolldatei an.
Unterstützt Arrays zur Verarbeitung mehrerer Dateien.
Akzeptiert Pipeline-Eingaben von Get-ChildItem oder anderen Cmdlets, die Dateien liefern.
Type: String[]
DefaultValue: ''
SupportsWildcards: false
Aliases:
- FullName
- FilePath
- InputPath
- File
- Path
ParameterSets:
- Name: (All)
Position: 0
IsRequired: true
ValueFromPipeline: true
ValueFromPipelineByPropertyName: true
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-NoDetailsParsing
Überspringt das Parsen von PACKET-Detailblöcken in ein strukturiertes JSON-Format.
Wenn angegeben, enthalten PACKET-Datensätze mit Detailblöcken die TCP/UDP-Infozeile in der Information-Spalte, aber die Details-Spalte bleibt leer.
Dies verbessert die Verarbeitungsgeschwindigkeit bei großen Protokolldateien erheblich, wenn die detaillierte Paketstruktur nicht benötigt wird.
Verwende diesen Schalter, wenn:
- Sehr große Protokolldateien (100 MB+) verarbeitet werden und nur grundlegende Abfrageinformationen benötigt werden
- Die Detailstruktur (Nachrichtenflags, DNS-Abschnitte) für die Analyse nicht erforderlich ist
- Die Parsing-Geschwindigkeit wichtiger als die Datenvollständigkeit ist
Leistungsverbesserung: Kann die Verarbeitungsgeschwindigkeit bei Protokollen mit vielen PACKET-Detailblöcken um 30-50 % steigern.
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputCulture
Gibt die Kultur/Region an, die zum Formatieren von Datums-/Uhrzeitwerten in den Ausgabedateien im CSV-Format verwendet wird.
Steuert, wie DateTime-Werte in die CSV geschrieben werden.
Verwende dies, wenn CSV-Dateien von Anwendungen oder Systemen mit spezifischen Regionaleinstellungen verarbeitet werden.
Standard: Aktuelle Kultur
Häufige Beispiele:
- ’en-US’: US-Format (MM/TT/JJJJ)
- ‘de-DE’: Deutsches Format (TT.MM.JJJJ)
- ‘sv-SE’ oder InvariantCulture: ISO-Format (JJJJ-MM-TT) für maximale Kompatibilität
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 7
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputFile
Gibt den Pfad für die Ausgabedatei im CSV-Format an.
Wenn nicht angegeben, wird der Eingabedateiname mit der Erweiterung .csv im gleichen Verzeichnis wie die Eingabedatei verwendet.
Wichtig: Muss ein Dateipfad sein, kein Verzeichnis.
Wenn du das Verzeichnis der Eingabedatei mit einem benutzerdefinierten Namen verwenden möchtest, gib den vollständigen Pfad inklusive Dateiname an.
Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Output
- Destination
- OutFile
- OutputPath
ParameterSets:
- Name: (All)
Position: 1
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputType
Gibt den Typ der zu erzeugenden Ausgabe an.
Gültige Werte:
- ‘CSV’: Erzeugt nur die Datendatei mit allen geparsten Protokolleinträgen
- ‘Statistic’: Erzeugt nur die Statistikdateien mit aggregierten Metriken
- ‘Both’: Erzeugt sowohl Daten- als auch Statistikdateien (Standard)
Standard: Both
Wenn Statistiken erzeugt werden, werden zwei separate Dateien erstellt:
- ‘_Statistic.csv’: Zusammenfassende Zählungen pro Kontexttyp pro Tag (Datum, Kontext, Anzahl, ComputerName)
- ‘_PacketStatistic.csv’: Detaillierte PACKET-Zählungen pro Tag nach Client-IP, Protokoll, Richtung und Abfragetyp (Datum, ClientIP, Protokoll, Richtung, FrageTyp, Anzahl, ComputerName)
Type: String
DefaultValue: Both
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 4
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-RemoveSourceFile
Entfernt die Quell-DNS-Debugprotokolldatei nach erfolgreicher Verarbeitung.
Verwende dies für automatisierte Protokollverarbeitungspipelines oder zur Verwaltung des Speicherplatzes.
Die Quelldatei wird nur entfernt, wenn die Verarbeitung erfolgreich abgeschlossen ist und alle Ausgabedateien erstellt wurden.
Sicherheit: Kann nicht zusammen mit -SkipHeaderValidation verwendet werden, um versehentliches Löschen ungültiger Dateien zu verhindern.
Warnung: Quelldateien werden dauerhaft gelöscht.
Stelle sicher, dass die Ausgabedateien gültig sind, bevor du diese Option verwendest.
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
Umgeht die Validierung der DNS-Debugprotokoll-Kopfzeile.
Standardmäßig prüft das Cmdlet, ob Eingabedateien eine gültige DNS-Server-Debugprotokoll-Kopfzeile besitzen.
Verwende diesen Schalter, um Dateien ohne Validierung zu verarbeiten, was nützlich sein kann bei:
- Modifizierten oder benutzerdefinierten Protokollformaten
- Fehlerbehebung bei Validierungsproblemen
- Nicht standardmäßigen oder vorverarbeiteten Protokollen
Warnung: Kann zu Verarbeitungsfehlern führen, wenn die Datei kein gültiges DNS-Protokoll ist.
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-WhatIf
Zeigt an, was passieren würde, wenn das Cmdlet ausgeführt wird.
Das Cmdlet wird nicht ausgeführt.
Wenn angegeben, werden detaillierte Informationen über die auszuführenden Operationen angezeigt, ohne diese tatsächlich auszuführen.
Nützlich für:
- Vorschau, welche Dateien verarbeitet würden
- Überprüfung der Ausgabepfade vor der Verarbeitung
- Testen von Skripten vor dem Einsatz in der Produktion
Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- wi
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter: -Debug, -ErrorAction, -ErrorVariable,
-InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable,
-ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter
about_CommonParameters.
EINGABEN
System.String[]
HINWEISE
Version : 1.7.1.1
Autor : Andi Bellstedt, Copilot
Datum : 2026-01-26
Schlüsselwörter : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser
VERWANDTE LINKS