1 - Convert-DNSDebugLogFile
SYNOPSIS
Konvertiert Windows DNS-Server-Debug-Logdateien in das CSV-Format.
SYNTAX
__AllParameterSets
Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
[[-ComputerName] <string>] [[-OutputType] <string>] [[-InputCulture] <cultureinfo>]
[[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation] [-RemoveSourceFile] [-CompressOutput]
[-WhatIf] [-Confirm] [<CommonParameters>]
ALIASES
Dieses Cmdlet hat folgende Aliase,
BESCHREIBUNG
Hochleistungs-Parser für Windows DNS-Server-Debug-Logdateien, der DNS-Serveraktivitäten transparent, analysierbar und auswertbar in Reporting- und Analysewerkzeugen macht.
DNS-Server-Debug-Logs enthalten detaillierte Anfrage-/Antwortinformationen, sind jedoch im Rohtextformat schwer zu analysieren.
Dieses Skript wandelt diese Logs in strukturierte CSV-Dateien um, die in Excel, Power BI, SQL-Datenbanken oder andere Datenanalyseplattformen importiert werden können.
WICHTIGE FUNKTIONEN:
- Parst alle 16 Felder aus DNS-Debug-Logs (Datum, Uhrzeit, Protokoll, Client-IP, Abfragetyp usw.)
- Erzeugt strukturierte CSV-Ausgaben mit anpassbaren Trennzeichen
- Erstellt optionale statistische Zusammenfassungen, die Aktivitäten nach Client, Protokoll und Abfragetyp aggregieren
- Verarbeitet einzelne Dateien oder Stapel über die Pipeline
- Unterstützt sowohl Standard- als auch detaillierte DNS-Debug-Logformate
- Optionale automatische Komprimierung der Ausgabedateien zur Einsparung von Speicherplatz
- Optionale Entfernung der Quelldateien nach erfolgreicher Verarbeitung
- Validiert Logdatei-Header zur Sicherstellung der Datenintegrität
ANWENDUNGSFÄLLE:
- Sicherheitsanalyse: Erkennung verdächtiger DNS-Abfragemuster
- Leistungsüberwachung: Verfolgung von Anfragevolumen und Antwortzeiten
- Kapazitätsplanung: Analyse der DNS-Serverauslastung und Client-Verteilung
- Compliance-Berichterstattung: Dokumentation der DNS-Aktivitäten für Audit-Anforderungen
- Fehlerbehebung: Untersuchung von DNS-Auflösungsproblemen
LEISTUNG:
Optimiert für große Dateien (100MB+) durch:
- String-Operationen statt Regex für das Parsen
- StreamReader/StreamWriter mit 64KB Puffern
- Manuelle CSV-Erzeugung zur Vermeidung von Export-Csv-Overhead
- Effiziente, dictionary-basierte Statistik-Erfassung
KOMPATIBILITÄT:
- PowerShell 5.1+ unter Windows
- PowerShell 7+ unter Windows
- Windows Server 2016 und neuer
- Unterstützt DNS-Server-Debug-Logformate von 2012 R2 bis 2025
BEISPIELE
BEISPIEL 1
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log"
Konvertiert das DNS-Debug-Log in CSV-Format mit Standardeinstellungen.
Ausgabe: C:\Logs\dns.csv (nur Datendatei, Semikolon als Trennzeichen).
BEISPIEL 2
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Both
Konvertiert das DNS-Debug-Log und erzeugt beide Ausgabedateien.
Ausgabe: C:\Logs\dns.csv (Daten) und C:\Logs\dns_statistic.csv (aggregierte Statistiken).
BEISPIEL 3
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Statistic
Erzeugt nur die Statistikdatei ohne die vollständige CSV-Datendatei.
Ausgabe: C:\Logs\dns_statistic.csv (nur Statistik).
BEISPIEL 4
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"
Konvertiert das DNS-Debug-Log an einen benutzerdefinierten Speicherort.
Ausgabe: C:\Output\parsed.csv.
BEISPIEL 5
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both
Konvertiert das Log mit Komma als Trennzeichen und fügt eine ComputerName-Spalte hinzu.
Ausgabe: C:\Logs\dns.csv und C:\Logs\dns_statistic.csv, beide mit “DNS01” in der ComputerName-Spalte.
BEISPIEL 6
PS C:\> Get-ChildItem "C:\Logs\*.log" | .\Convert-DnsDebugLogFile.ps1 -OutputType Both
Verarbeitet mehrere DNS-Debug-Logdateien über die Pipeline.
Ausgabe: Für jede .log-Datei werden sowohl .csv (Daten) als auch _statistic.csv (Statistiken) erstellt.
BEISPIEL 7
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -CompressOutput
Konvertiert das DNS-Debug-Log und komprimiert die Ausgabe in ein ZIP-Archiv.
Ausgabe: C:\Logs\dns.zip mit dns.csv. Die unkomprimierte csv-Datei wird nach der Komprimierung entfernt.
BEISPIEL 8
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Both -CompressOutput
Konvertiert das Log mit Statistik und komprimiert beide Ausgabedateien.
Ausgabe: C:\Logs\dns.zip mit dns.csv und dns_statistic.csv.
BEISPIEL 9
PS C:\> Get-ChildItem "C:\Logs\*.log" | .\Convert-DnsDebugLogFile.ps1 -RemoveSourceFile -CompressOutput
Verarbeitet mehrere Logdateien, komprimiert die Ausgabe und entfernt die Quelldateien.
Jede .log-Datei wird in eine komprimierte .zip-Datei umgewandelt, danach wird die Quelldatei gelöscht.
Ideal für automatisierte Log-Archivierungspipelines.
BEISPIEL 10
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\old_dns.log" -RemoveSourceFile -Verbose
Konvertiert die Logdatei und entfernt die Quelle nach erfolgreicher Verarbeitung.
Verbose-Ausgabe bestätigt die Dateientfernung. Vorsicht: Quelldateien werden dauerhaft gelöscht.
BEISPIEL 11
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE'
Konvertiert ein DNS-Debug-Log von einem deutschen Windows-Server.
Nützlich, wenn die Logdatei von einem Server mit anderen Ländereinstellungen stammt.
BEISPIEL 12
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture ([System.Globalization.CultureInfo]::GetCultureInfo('sv-SE'))
Konvertiert ein DNS-Debug-Log von einem schwedischen Windows-Server mit ISO-Datumsformat (YYYY-MM-DD).
Hilfreich für Logs von Servern mit unterschiedlichen Gebietsschemas.
BEISPIEL 13
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'
Konvertiert ein DNS-Debug-Log von einem deutschen Windows-Server und formatiert Ausgabedaten für US-Systeme.
Nützlich für die Verarbeitung internationaler Logs für US-basierte Systeme.
BEISPIEL 14
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
Konvertiert ein DNS-Debug-Log und formatiert Ausgabedaten im ISO 8601-Format (YYYY-MM-DD).
Ideal für plattformübergreifende Kompatibilität oder Datenaustausch-Szenarien.
BEISPIEL 15
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -WhatIf
Zeigt an, was passieren würde, wenn der Befehl ausgeführt wird, ohne Dateien zu erstellen.
Nützlich zum Testen von Befehlsparametern vor der Verarbeitung echter Daten.
BEISPIEL 16
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -RemoveSourceFile -CompressOutput -WhatIf
Zeigt den kompletten Ablauf inklusive Komprimierung und Quellenentfernung an.
Es werden keine Dateien erstellt, komprimiert oder gelöscht – nur eine Vorschau.
PARAMETER
-CompressOutput
Komprimiert die ausgegebenen CSV-Dateien nach der Erstellung in ein ZIP-Archiv.
Erstellt eine .zip-Datei mit den generierten CSV-Dateien und entfernt anschließend die unkomprimierten CSV(s).
Die ZIP-Datei wird im selben Verzeichnis wie die Ausgabedatei mit demselben Basisnamen erstellt.
Die Komprimierung erfolgt unmittelbar nach der Verarbeitung jeder Datei, um Speicherplatz effizient zu verwalten.
Vorteile:
- Reduziert den Speicherplatzbedarf erheblich (CSV-Dateien lassen sich sehr gut komprimieren)
- Vereinfacht Dateiverwaltung und Archivierung
- Geeignet für die langfristige Speicherung verarbeiteter Logs
Beispiel: Eingabe ‘dns.log’ erzeugt ‘dns.csv’, das zu ‘dns.zip’ komprimiert wird, danach wird ‘dns.csv’ entfernt.
Kompatibel mit PowerShell 5.1+ und Windows Server 2016+.
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
Optional.
Wenn angegeben, wird eine ComputerName-Spalte mit dem angegebenen Wert in die CSV-Ausgabe eingefügt.
Nützlich beim Zusammenführen von Logs mehrerer DNS-Server.
Wichtig: Dies ist KEIN Remoting-Feature.
Das Skript verarbeitet nur lokale Dateien.
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, wird vor folgenden Aktionen um Bestätigung gebeten:
- Verarbeitung jeder DNS-Debug-Logdatei
- Entfernen von Quelldateien (bei Verwendung von -RemoveSourceFile)
- Überschreiben vorhandener Ausgabedateien
Nützlich für interaktive Verarbeitung, wenn du kontrollieren 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: ''
-Delimiter
Das Trennzeichen für die CSV-Ausgabe.
Standard ist Semikolon ‘;’
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 an, die zum Parsen von Datums-/Uhrzeitwerten im DNS-Debug-Log verwendet wird.
DNS-Server-Debug-Logs verwenden das Datumsformat der Windows-Gebietsschemaeinstellung des Servers, auf dem das Log erstellt wurde.
Dieser Parameter ermöglicht das Parsen von Logs von Servern mit unterschiedlichen regionalen Einstellungen.
Standard ist die aktuelle Kultur ([System.Globalization.CultureInfo]::CurrentCulture).
Gängige Kulturwerte:
- ‘de-DE’ oder ‘de-AT’: Deutsches Format (TT.MM.JJJJ oder TT/MM/JJJJ)
- ’en-US’: US-Format (MM/TT/JJJJ)
- ’en-GB’: UK-Format (TT/MM/JJJJ)
- ‘sv-SE’: Schwedisch/ISO-Format (JJJJ-MM-TT)
Beispiel: -InputCulture ‘de-DE’ für Logs von einem deutschen Windows-Server.
Beispiel: -InputCulture ([System.Globalization.CultureInfo]::GetCultureInfo(‘sv-SE’)) für schwedische Logs.
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 5
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
Pfad zur zu parsenden DNS-Debug-Logdatei.
Unterstützt Arrays zur Verarbeitung mehrerer Dateien.
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: ''
-OutputCulture
Gibt die Kultur an, die zum Formatieren von Datums-/Uhrzeitwerten in den Ausgabedateien verwendet wird.
Dieser Parameter steuert, wie DateTime-Werte in der CSV-Ausgabe geschrieben werden.
Nützlich, wenn die CSV-Dateien von Anwendungen oder Systemen mit bestimmten regionalen Einstellungen genutzt werden.
Standard ist die aktuelle Kultur ([System.Globalization.CultureInfo]::CurrentCulture).
Gängige Kulturwerte:
- ’en-US’: US-Format (MM/TT/JJJJ)
- ‘de-DE’: Deutsches Format (TT.MM.JJJJ)
- ’en-GB’: UK-Format (TT/MM/JJJJ)
- ‘sv-SE’: Schwedisch/ISO-Format (JJJJ-MM-TT)
Beispiel: -OutputCulture ’en-US’ zur Formatierung von Daten für US-Systeme.
Beispiel: -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture) für ISO-Format.
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: ''
-OutputFile
Optional.
Pfad für die Ausgabedatei im CSV-Format.
Wenn nicht angegeben, wird der Eingabedateiname mit der Endung .csv verwendet.
Muss ein Dateipfad sein, kein Verzeichnis.
Wenn nur das Ausgabeverzeichnis angegeben werden soll,
lasse diesen Parameter weg und das Skript verwendet dasselbe Verzeichnis wie die Eingabedatei.
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 CSV-Datei mit den geparsten Logdaten (Standard)
- ‘Statistic’: Erzeugt nur die Statistikdatei mit aggregierten Daten
- ‘Both’: Erzeugt sowohl CSV- als auch Statistikdateien
Standard ist ‘Both’.
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-Debug-Logdatei nach erfolgreicher Verarbeitung.
Verwende diesen Schalter, um Eingabedateien automatisch zu löschen, nachdem sie erfolgreich geparst und Ausgabedateien erstellt wurden.
Nützlich für:
- Automatisierte Log-Verarbeitungspipelines
- Speicherplatzverwaltung bei der Log-Sammlung
- Vermeidung der erneuten Verarbeitung bereits konvertierter Dateien
Sicherheitsfunktionen:
- Entfernt Dateien nur nach erfolgreicher Verarbeitung und Ausgabenerstellung
- Überspringt das Entfernen, wenn die Verarbeitung fehlschlägt oder unterbrochen wird
- Kann aus Sicherheitsgründen nicht mit SkipHeaderValidation verwendet werden
Warnung: Quelldateien werden dauerhaft gelöscht.
Stelle sicher, dass die Ausgabedateien gültig sind, bevor du diese Option nutzt.
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 des DNS-Debug-Log-Headers.
Standardmäßig prüft das Skript, ob Eingabedateien eine gültige DNS-Server-Debug-Log-Headerstruktur besitzen.
Verwende diesen Schalter, um Dateien ohne Header-Validierung zu verarbeiten, was nützlich sein kann für:
- Verarbeitung modifizierter oder benutzerdefinierter Logformate
- Fehlerbehebung bei Validierungsproblemen
- Verarbeitung von Logs mit nicht standardmäßigen Headern
Warnung: Die Verwendung dieses Parameters kann zu Verarbeitungsfehlern führen, wenn die Datei kein gültiges DNS-Log 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 von Ausgabepfaden vor der Verarbeitung
- Testen von Skripten vor dem produktiven Einsatz
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 Common Parameters: -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.2.0.0
Autor: Andreas Bellstedt, Copilot
Datum: 2026-01-23
Schlüsselwörter: Microsoft, Windows Server, DNSServer, DNS, DebugLog, LogParser
VERWANDTE LINKS