# Fehlerbehebung

> Symptome, auf die du beim Konvertieren von DNS-Debug-Logs wahrscheinlich stößt, was sie verursacht und wie du sie behebst.

---

LLMS index: [llms.txt](/llms.txt)

---

## „Die Datei ist keine gültige DNS-Debug-Logdatei“

Die Header-Prüfung hat die Eingabe abgelehnt. Meistens ist der Pfad einfach falsch — eine `.log`-Datei im gleichen Ordner, die kein DNS-Debug-Log ist, oder eine Datei, die nur einen rotierten Header enthält.

Arbeite das Folgende durch:

1. Öffne die Datei. Ein DNS-Debug-Log beginnt mit einer Header-Zeile wie `Message logging started at …` und enthält danach mit Zeitstempel versehene Abfrageeinträge.
2. Bestätige, dass das DNS-Debug-Logging tatsächlich aktiviert ist und in den erwarteten Pfad schreibt:

   ```powershell
   Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize
   ```

3. Wenn die Datei tatsächlich ein DNS-Log ist, der Header aber ungewöhnlich ist — handbearbeitet, vorgefiltert, ein benutzerdefinierter Export — kannst du die Prüfung umgehen:

   ```powershell
   Convert-DNSDebugLogFile -InputFile "C:\Logs\odd.log" -SkipHeaderValidation
   ```

Behalte die Validierung überall sonst aktiviert. Beachte, dass `-SkipHeaderValidation` nicht mit `-RemoveSourceFile` kombiniert werden kann, sodass eine nicht verifizierte Datei durch die Konvertierung niemals gelöscht wird.

## Ausgabedatei ist leer oder enthält viel weniger Zeilen als erwartet

Prüfe in dieser Reihenfolge:

- **Enthält das Log überhaupt Abfrageeinträge?** Ein frisch rotiertes Log kann außer einem Header noch keine Einträge enthalten, wenn noch keine Abfragen stattgefunden haben.
- **Ist ein `-ContextFilter` aktiv?** `-ContextFilter Packet` entfernt per Design `Event`- und `Note`-Einträge. Wenn du auf `Event` oder `Note` gefiltert hast, sind die meisten Spalten ebenfalls leer — diese Eintragstypen enthalten nur `DateTime`, `ThreadId`, `Context` und `Information`.
- **War das Quell-Log aktiv?** Eine Datei, in die der DNS-Server noch schreibt, kann sich während der Konvertierung ändern; die neuesten Einträge fehlen möglicherweise und der letzte Datensatz kann abgeschnitten sein. Konvertiere ein rotiertes, geschlossenes Log, wenn du vollständige Ausgabe brauchst.
- **Ist die Datei beschädigt oder abgeschnitten?** Prüfe das Ende des Logs auf eine halbgeschriebene Zeile.

## Daten sind falsch, verschoben oder Tag und Monat vertauscht

Das Log wurde von einem Server mit einer anderen Windows-Lokalisierung geschrieben als die Sitzung, die die Konvertierung durchführt. `20.01.2026` und `01/20/2026` beschreiben denselben Zeitpunkt, aber nur, wenn beide Seiten dasselbe Format verwenden.

```powershell
# Log stammt von einem deutschen Server
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

Setze `-InputCulture` explizit in geplanten Aufgaben, anstatt dich auf die Kultur des Kontos zu verlassen, das sie zufällig ausführt. Wenn die Ausgabe maschinenlesbar sein soll, füge `-OutputCulture 'sv-SE'` hinzu. Details in [Parameter und Optionen](../03-parameters-and-options/).

## Nach dem Import landet alles in einer Spalte

Trennzeichen stimmt nicht überein. Das Modul schreibt standardmäßig `;`; dein Importer erwartete `,` (oder umgekehrt).

Entweder führe die Konvertierung mit dem vom Importer gewünschten Trennzeichen erneut aus:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter ","
```

…oder sag dem Importer, welches Trennzeichen die Datei verwendet — in Excel über **Daten → Aus Text/CSV**, in PowerShell über `Import-Csv -Delimiter ';'`.

## „Zugriff verweigert“

- Das DNS-Log-Verzeichnis erfordert typischerweise Administratorrechte. Starte PowerShell erhöht oder führe die geplante Aufgabe mit einem Konto aus, das Zugriff hat.
- Prüfe auch Schreibrechte für das Ausgabeverzeichnis, nicht nur Leserechte für das Log.
- Bei SMB/UNC-Pfaden: Ein Task, der als `SYSTEM` läuft, authentifiziert sich im Netzwerk als **Computer-Konto**. Gewähre Freigabe- und NTFS-Rechte für dieses Computerkonto (oder für die Gruppe `Domain Controllers`), oder nutze ein dediziertes Dienstkonto.
- Wenn `-RemoveSourceFile` am Ende eines ansonsten erfolgreichen Laufs fehlschlägt, kann das Konto das Log lesen, aber nicht löschen.

## Verarbeitung ist sehr langsam

1. Zuerst die Festplatte prüfen — die Konvertierung ist I/O-gebunden. Ein ausgelastetes Volume oder ein langsamer Netzwerkpfad bestimmt die Laufzeit.
2. Nutze `-NoDetailsParsing`, wenn du die Paket-Detail-JSON nicht brauchst; bei detailreichen Logs spart das 30–50 %.
3. Nutze `-ContextFilter Packet`, um weniger zu schreiben.
4. Teile riesige Logs mit DNS-Server-Log-Rollover auf, statt eine riesige Datei zu konvertieren.
5. Ziehe eine Antivirus-Ausnahme für das Log-Verzeichnis in Betracht.

Mehr dazu in [Performance](../04-performance/).

## Komprimierte Ausgabe ist größer als erwartet

Logs mit sehr vielfältigem Inhalt — viele einzigartige Domains, viele verschiedene Clients — komprimieren sich weniger gut als repetitive. Das ist normal. ZIP erreicht trotzdem meist eine deutliche Reduktion; wenn nicht, prüfe, ob die Spalte `Details` die Datei aufbläht und ob du sie überhaupt brauchst.

## Statistiken stimmen nicht mit den Erwartungen überein

- Vergewissere dich, dass du `-OutputType Both` oder `-OutputType Statistic` verwendet hast. Bei `-OutputType CSV` werden keine Statistikdateien geschrieben.
- `Count` ist eine Gesamtzahl, keine Anzahl unterschiedlicher Werte. Ein Client, der denselben Namen 500-mal abfragt, trägt 500 bei. Das ist die häufigste Ursache für „diese Zahl kann nicht stimmen“.
- Statistiken werden pro Tag gruppiert. Ein Log, das zwei Tage umfasst, erzeugt Zeilen für beide.
- Wenn `ComputerName` in den Statistikdateien leer ist, wurde `-ComputerName` während der Konvertierung nicht gesetzt.

## Die geplante Aufgabe funktioniert interaktiv, aber nicht als Aufgabe

Fast immer eine von drei Ursachen:

- **Modul nicht gefunden.** `SYSTEM` mit `-NoProfile` sieht nur maschinenweite Modulpfade. Installiere das Modul maschinenweit oder füge der Task-Aktion ein explizites `Import-Module DNSServer.DebugLogParser` hinzu.
- **Falsche Kultur.** Die Lokalisierung des Task-Kontos unterscheidet sich von deiner. Setze `-InputCulture` und `-OutputCulture` explizit.
- **Ausführungsrichtlinie oder unsigniertes Skript.** Passe die `-ExecutionPolicy` der Aufgabe an deine Signierrichtlinie an und hebe die Blockierung von Dateien auf, die von anderswo kopiert wurden.

Führe die genaue Befehlszeile der Aufgabe manuell im gleichen Kontext aus (zum Beispiel mit PsExec als `SYSTEM`), um das Problem zu reproduzieren.

## Ein Problem melden

Wenn nichts davon hilft:

1. Aktualisiere auf die neueste Modulversion und versuche es erneut.
2. Suche in den [GitHub-Issues](https://github.com/AndiBellstedt/DNSServer.DebugLogParser/issues) nach dem gleichen Symptom.
3. Sammle die Diagnosedaten:

   ```powershell
   $PSVersionTable
   Get-Module DNSServer.DebugLogParser -ListAvailable | Select-Object Name, Version, Path
   Get-Culture
   ```

   plus den genauen Befehl, den du ausgeführt hast, die vollständige Fehlermeldung inklusive Stacktrace und — wenn du sie teilen kannst — einen kleinen anonymisierten Ausschnitt des Logs, der das Problem reproduziert.
4. Öffne ein neues Issue mit diesen Informationen.
