# Ausgabeformate

> Die Spalten der CSV-Datendatei, die zwei optionalen Statistikdateien und echte Beispielausgaben, die du öffnen kannst, bevor du irgendetwas ausführst.

---

LLMS index: [llms.txt](/llms.txt)

---

`Convert-DNSDebugLogFile` erzeugt bis zu drei Dateien pro Eingabeprotokoll:

| Datei | Enthält | Erstellt bei |
|---|---|---|
| `<name>.csv` | Eine Zeile pro geparstem Protokolleintrag | `-OutputType CSV` oder `Both` |
| `<name>_Statistic.csv` | Tägliche Anzahl der Einträge pro Kontext | `-OutputType Statistic` oder `Both` |
| `<name>_PacketStatistic.csv` | Tägliche Abfrageanzahl pro Client, Protokoll, Richtung und Eintragstyp | `-OutputType Statistic` oder `Both` |

`Both` ist die Standardeinstellung. Die Ausgabe landet neben der Eingabedatei, sofern du nicht `-OutputFile` setzt.

Die auf dieser Seite verlinkten Beispieldateien sind echte Konversionsergebnisse, keine Mock-ups. Lade eine herunter und öffne sie in Excel, bevor du dich für ein Pipeline-Design entscheidest.

## Die CSV-Datendatei

Beispielausgabe:

| Gebietsschema | Details-Spalte | Dateien |
|---|---|---|
| en-US | nicht befüllt | [WithComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.WithComputerName.csv), [NoComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.NoComputerName.csv) |
| de-DE | nicht befüllt | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.NoDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.NoDetails.csv) |
| de-DE | befüllt | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.WithDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.WithDetails.csv) |

Zwei Zeilen aus einer echten Konversion — eine DNS-Abfrage und eine serverinterne Notiz:

```text
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
2026-01-20 23:00:16;DF0;Note;;;;;;;;;;;;"";"got GQCS failure on a dead socket context status=995, socket=904";"";dc01
```

### Spalten

Immer 18 Spalten, immer in dieser Reihenfolge:

| # | Spalte | Bedeutung | Typische Verwendung |
|---|---|---|---|
| 1 | `DateTime` | Zeitstempel des Eintrags | Zeitfilterung, Verknüpfung mit anderen Protokollen |
| 2 | `ThreadId` | DNS-Server-Arbeitsthread | Selten benötigt; nützlich bei der Korrelation serverinterner Probleme |
| 3 | `Context` | Art des Eintrags: `Packet`, `Event`, `Note`, `DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone` | Erster Filter, den du anwendest — `Packet` ist der eigentliche DNS-Verkehr |
| 4 | `PacketId` | Interne Paketkennung | Verknüpfung einer Abfrage mit ihrer Antwort |
| 5 | `Protocol` | `UDP` oder `TCP` | TCP-Spitzen können auf große Antworten oder Zonentransfers hinweisen |
| 6 | `Direction` | `Rcv` (Abfrage eingegangen) oder `Snd` (Server antwortete) | Trennung von Anfrage- und Antwortvolumen |
| 7 | `ClientIP` | Adresse des abfragenden Hosts | Analyse der aktivsten Hosts, Eingrenzung von Vorfällen |
| 8 | `Xid` | DNS-Transaktions-ID (hex) | Abgleich von Anfrage und Antwort |
| 9 | `Type` | `Query` oder `Response` | |
| 10 | `Opcode` | `Standard`, `Notify`, `Update`, `Unknown` | Trennt dynamische Updates und Zonennachrichten von normalen Abfragen |
| 11 | `FlagsHex` | Roh-Header-Flags (hex) | Für tiefgehende Protokollanalyse |
| 12 | `FlagsChar` | Dekodierte Flags: `Authoritative`, `Truncated`, `RecursionDesired`, `RecursionAvailable` | Lesbare Version der obigen Flags |
| 13 | `ResponseCode` | `NOERROR`, `NXDOMAIN`, `SERVFAIL`, … | Fehlerquotenbericht, Suche nach Auflösungsfehlern |
| 14 | `QuestionType` | Eintragstyp: `A`, `AAAA`, `MX`, `PTR`, `TXT`, … | `TXT`-Volumen ist ein klassischer Indikator für Tunneling |
| 15 | `QuestionName` | Abgefragter Name als normaler FQDN | Bedrohungs-Intelligence-Abgleich, Top-Domain-Berichte |
| 16 | `Information` | Freitext für `Event` / `Note`-Einträge; für `Packet` Detailblöcke die TCP/UDP-Detail-Headerzeile | Lesen von Servermeldungen |
| 17 | `Details` | JSON-Darstellung eines `Packet` Detailblocks; sonst leer | Vollständige Paketinspektion ohne Rückgriff auf das Rohprotokoll |
| 18 | `ComputerName` | Quellserver, aus `-ComputerName` | Mehrserver-Datensätze zuordenbar halten |

Zwei Dinge, die du beachten solltest:

- **Nicht jede Spalte ist für jede Zeile gefüllt.** Nur `Packet`-Einträge haben eine Client-IP, einen Abfragenamen und einen Antwortcode. `Note`- und `Event`-Zeilen tragen ihren Text in `Information` und lassen die Protokollspalten leer. Gestalte dein Datenbankschema und Dashboard-Filter entsprechend.
- **`ComputerName` ist immer die letzte Spalte, auch wenn du `-ComputerName` nicht benutzt.** Dann ist sie einfach leer. So bleibt das Layout über alle Server hinweg identisch, sodass du Dateien von vielen DNS-Servern ohne Spaltenzuordnung zusammenfügen kannst.

### Die Details-Spalte

Detailblöcke erscheinen nur, wenn der DNS-Server so konfiguriert ist, dass er vollständige Paketdetails protokolliert. Wenn sie vorhanden sind, wandelt der Parser sie in einen einzelnen JSON-Wert um, sodass die Zeile eine Zeile bleibt:

```json
{
  "Socket": "848",
  "Remote": "addr 10.10.0.11, port 60580",
  "Buflength": "0x10000 (65536)",
  "Message": {
    "XID": "0x0001",
    "OPCODE": "0 (QUERY)",
    "RCODE": "0 (NOERROR)",
    "QUESTION": [ { "Name": "berlin.de", "QTYPE": "A (1)", "QCLASS": "1" } ],
    "ANSWER": []
  }
}
```

Das Parsen dieser Blöcke kostet Zeit und macht die CSV deutlich größer. Wenn du sie nicht brauchst, nutze `-NoDetailsParsing` — die Spalte bleibt vorhanden, aber leer, und die Konvertierung wird schneller. Siehe [Performance](../04-performance/).

## Die Statistikdateien

Statistiken sind tägliche Aggregationen. Nutze sie, wenn du einen Trend oder eine Zusammenfassung möchtest und nicht den kompletten Datensatz verschieben willst — sie sind um Größenordnungen kleiner als die Datendatei.

### Kontextstatistiken (`*_Statistic.csv`)

Antworten auf die Frage: *Wie viel von welcher Aktivität ist pro Tag passiert?*

```text
Date;Context;Count;ComputerName
2026-01-20;Event;2;dc01
2026-01-20;Note;2;dc01
2026-01-20;Packet;12;dc01
```

| Spalte | Bedeutung |
|---|---|
| `Date` | Tag, immer `yyyy-MM-dd` |
| `Context` | Kontextname (`Packet`, `Event`, `Note`, …) |
| `Count` | Anzahl der Einträge dieses Kontexts an diesem Tag |
| `ComputerName` | Quellserver |

Beispieldateien: [en-US WithComputerName](../outputformat/en-us.-.dnsdebug-dc01_Statistic.-.WithComputerName.csv), [en-US NoComputerName](../outputformat/en-us.-.dnsdebug-dc01_Statistic.-.NoComputerName.csv), [de-DE WithComputerName](../outputformat/de-de.-.dnsdebug-dc01_Statistic.-.WithComputerName.csv), [de-DE NoComputerName](../outputformat/de-de.-.dnsdebug-dc01_Statistic.-.NoComputerName.csv)

### Paketstatistiken (`*_PacketStatistic.csv`)

Antworten auf die Frage: *Wer hat was wie oft pro Tag abgefragt?*

```text
Date;ClientIP;Protocol;Direction;QuestionType;Count;ComputerName
2026-01-20;10.0.0.1;UDP;Rcv;A;3;dc01
2026-01-20;10.0.0.1;UDP;Snd;A;3;dc01
2026-01-20;10.0.0.2;UDP;Rcv;A;3;dc01
```

| Spalte | Bedeutung |
|---|---|
| `Date` | Tag, immer `yyyy-MM-dd` |
| `ClientIP` | Abfragender Host |
| `Protocol` | `UDP` oder `TCP` |
| `Direction` | `Rcv` oder `Snd` |
| `QuestionType` | DNS-Eintragstyp |
| `Count` | Anzahl der passenden Pakete an diesem Tag |
| `ComputerName` | Quellserver |

Beispieldateien: [en-US WithComputerName](../outputformat/en-us.-.dnsdebug-dc01_PacketStatistic.-.WithComputerName.csv), [en-US NoComputerName](../outputformat/en-us.-.dnsdebug-dc01_PacketStatistic.-.NoComputerName.csv), [de-DE WithComputerName](../outputformat/de-de.-.dnsdebug-dc01_PacketStatistic.-.WithComputerName.csv), [de-DE NoComputerName](../outputformat/de-de.-.dnsdebug-dc01_PacketStatistic.-.NoComputerName.csv)

<div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">Counts sind Gesamtsummen, keine eindeutigen Werte</div>


`Count` ist die Anzahl der Einträge in dieser Tagesgruppe. Ein Client, der denselben Namen 500-mal abgefragt hat, trägt 500 bei, nicht 1. Wenn eine Zahl zu hoch erscheint, ist das meistens der Grund.
</div>


## Trennzeichen- und Datumsformat

Beide Ausgabetypen respektieren `-Delimiter` (Standard `;`) und `-OutputCulture`. Für alles, was maschinell importiert wird, schreibe ISO-ähnliche Zeitstempel:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'
```

Das ergibt `2026-01-20 23:00:16`, was SQL Server, Power BI und pandas alle ohne Formatangabe lesen. Details in [Parameter und Optionen](../03-parameters-and-options/).
