4.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] [-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 alle 17 Felder aus DNS-Debugprotokollen, einschließlich Datum/Uhrzeit, Protokoll, Client-IP, Abfragetyp, Domänennamen, Antwortcodes, Flags, Ereignisinformationen und Computername. Es erzeugt strukturierte CSV-Ausgaben mit einer optionalen Statistikübersicht, die Aktivitäten nach Client, Protokoll und Abfragetyp aggregiert.
WICHTIGE FUNKTIONEN:
- Hochleistungsfähige Analyse, optimiert für große Dateien (100MB+)
- Anpassbarer CSV-Trennzeichen (Standard: Semikolon)
- Optionale statistische Zusammenfassungen mit aggregierten Metriken
- Kontextfilterung (PACKET, EVENT, Note) 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 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, String-Operationen statt Regex, manueller CSV-Erstellung und effizienter Hashtable-basierter Statistik-Erfassung.
KOMPATIBILITÄT:
- PowerShell 5.1+ (Desktop- und Core-Editionen)
- Windows Server 2016+
- DNS-Server-Protokollformate von 2012 R2 bis 2025
BEISPIELE
BEISPIEL 1
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
Konvertiert das DNS-Debugprotokoll mit Standardeinstellungen (Daten- und Statistikdateien mit Semikolon als Trennzeichen). Ausgabe: C:\Logs\dns.csv und C:\Logs\dns_statistic.csv
BEISPIEL 2
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType CSV
Erzeugt nur die Datendatei ohne Statistik. Ausgabe: C:\Logs\dns.csv
BEISPIEL 3
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType Statistic
Erzeugt nur die Statistikdatei mit aggregierten Metriken. Ausgabe: C:\Logs\dns_statistic.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 und C:\Logs\dns_statistic.csv mit ComputerName-Spalte
BEISPIEL 6
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -OutputType Both
Verarbeitet mehrere 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 und dns_statistic.csv)
BEISPIEL 8
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -RemoveSourceFile -Verbose
Konvertiert das Protokoll und entfernt die Quelldatei nach erfolgreicher Verarbeitung. Die ausführliche 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. Nützlich 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 und schließt EVENT- und Note-Einträge aus. Nützlich, um die Analyse auf den tatsächlichen DNS-Verkehr zu fokussieren.
BEISPIEL 11
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 Protokollverarbeitungs-Pipelines.
PARAMETER
-CompressOutput
Komprimiert die erzeugten CSV-Dateien 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-Dateien. Die ZIP-Datei wird im gleichen Verzeichnis wie die Ausgabedatei mit demselben Basisnamen erstellt.
Vorteile:
- Spart erheblich Speicherplatz (CSV-Dateien komprimieren sich typischerweise um 90%+)
- Vereinfacht Dateiverwaltung und Archivierung
- Geeignet für Langzeitspeicherung
Beispiel: Die Eingabedatei ‘dns.log’ erzeugt ‘dns.csv’, die zu ‘dns.zip’ komprimiert wird, danach wird ‘dns.csv’ gelöscht.
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
Legt den Wert für die Spalte ComputerName in der CSV-Ausgabe fest. 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. Das Cmdlet 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 der Ausführung des Cmdlets eine Bestätigung an.
Wenn angegeben, erfolgt eine Bestätigung 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 der Ausgabe enthalten sein sollen.
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)
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)
Standard: All
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
Legt das Trennzeichen für die CSV-Ausgabe fest.
Standard: Semikolon (;)
Gängige 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 kommagetrennte 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: ''
Legt die Kultur/Region fest, die zum Parsen von Datum/Uhrzeit-Werten im DNS-Debugprotokoll verwendet wird.
DNS-Server-Debugprotokolle verwenden das Datumsformat der Windows-Regionaleinstellung 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
Gängige 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: ''
Legt den Pfad zur DNS-Debugprotokolldatei fest, die geparst werden soll. 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: ''
-OutputCulture
Legt die Kultur/Region fest, die zum Formatieren von Datum/Uhrzeit-Werten in den Ausgabedateien verwendet wird.
Steuert, wie DateTime-Werte in die CSV geschrieben werden. Verwende dies, wenn CSV-Dateien von Anwendungen oder Systemen mit bestimmten Regionaleinstellungen genutzt werden.
Standard: Aktuelle Kultur
Gängige 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
Legt den Pfad für die Ausgabedatei im CSV-Format fest. 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
Legt fest, welche Art von Ausgabe erzeugt werden soll.
Gültige Werte:
- ‘CSV’: Erzeugt nur die Datendatei mit allen geparsten Protokolleinträgen (Standard)
- ‘Statistic’: Erzeugt nur die Statistikdatei mit aggregierten Metriken
- ‘Both’: Erzeugt sowohl Daten- als auch Statistikdateien
Standard: Both
Statistiken liefern aggregierte Zählungen nach Client-IP, Protokoll, Richtung und Abfragetyp sowie den Datumsbereich für jede eindeutige Kombination.
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 Protokollverarbeitungs-Pipelines 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 für:
- Geänderte oder benutzerdefinierte Protokollformate
- Fehlerbehebung bei Validierungsproblemen
- Nicht standardmäßige oder vorverarbeitete Protokolle
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 Common-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.3.0.1
Autor : Andi Bellstedt, Copilot
Datum : 2026-01-23
Schlüsselwörter : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser
VERWANDTE LINKS