# Convert-DNSDebugLogFile

LLMS index: [llms.txt](/v1.2.0.0/llms.txt)

---

<!-- This file is auto-generated using PlatyPS + HUGO Workflow automation. Avoid editing directly! Original Front-Matter:
date: 2026-05-25
document type: cmdlet
external help file: DNSServer.DebugLogParser-Help.xml
flagTranslation: Primary
HelpUri: https://github.com/AndiBellstedt/DNSServer.DebugLogParser
Locale: en-US
Module Name: DNSServer.DebugLogParser
ms.date: 05.25.2026
PlatyPS schema version: 2024-05-01
title: Convert-DNSDebugLogFile
type: docs
-->



## SYNOPSIS

Przekształca dzienniki debugowania serwera DNS Windows do strukturalnego formatu CSV do analizy i raportowania.

## 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

Ten cmdlet ma następujące aliasy,

## DESCRIPTION

Konwertuje pliki dzienników debugowania serwera DNS Windows na strukturalne dane CSV, które można analizować
w Excelu, Power BI, bazach danych SQL lub narzędziach SIEM.
Przeznaczony do analizy bezpieczeństwa, monitorowania wydajności,
rozwiązywania problemów i raportowania zgodności.

Cmdlet analizuje dzienniki debugowania DNS i zapisuje spójny wynik w formacie CSV do analizy.
Wynik CSV zawiera 18 kolumn, w tym kolumnę `Information` z tekstem zdarzenia/diagnostycznym,
opcjonalną kolumnę JSON `Details` dla bloków szczegółów pakietu oraz zawsze obecna kolumnę `ComputerName`
(pusta, jeśli nie podano wartości).

KLUCZOWE CECHY:
- Wysoka wydajność parsowania zoptymalizowana pod kątem dużych plików (100MB+)
- Konfigurowalny separator CSV (domyślnie średnik)
- Opcjonalne podsumowania statystyczne z agregowanymi metrykami
- Filtrowanie kontekstu (Pakiet, Zdarzenie, Notatka i inne) do skupienia się na określonych typach wpisów
- Parsowanie i formatowanie dat uwzględniające kulturę dla serwerów międzynarodowych
- Obsługa potoku do przetwarzania wsadowego wielu plików
- Opcjonalna kompresja plików wyjściowych (format ZIP)
- Opcjonalne automatyczne usuwanie plików źródłowych po przetworzeniu
- Walidacja nagłówka dla zapewnienia integralności danych

FORMAT WYJŚCIA:
Kolumna ComputerName jest zawsze dołączana na końcu każdego rekordu.
Jeśli parametr -ComputerName nie jest podany, kolumna pozostanie pusta.
Zapewnia to spójną strukturę wyjścia
w scenariuszach konsolidacji z wielu serwerów.

WYDAJNOŚĆ:
Zoptymalizowano przy użyciu StreamReader/StreamWriter z buforami 64KB, operacji na stringach zamiast
regex, ręcznej generacji CSV oraz efektywnego zbierania statystyk na bazie hashtable.

KOMPATYBILNOŚĆ:
- PowerShell 5.1+ (edycje Desktop i Core)
- Windows Server 2016+
- Format dzienników serwera DNS 2012 R2 do 2025

## EXAMPLES

### PRZYKŁAD 1

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
```

Konwertuje dziennik debugowania DNS z ustawieniami domyślnymi (zarówno pliki danych, jak i statystyk z separatorem średnik).
Wynik:
- C:\Logs\dns.csv
- C:\Logs\dns_Statistic.csv
- C:\Logs\dns_PacketStatistic.csv

### PRZYKŁAD 2

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType CSV
```

Generuje tylko plik danych bez statystyk.
Wynik: C:\Logs\dns.csv

### PRZYKŁAD 3

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType Statistic
```

Generuje tylko pliki statystyk z agregowanymi metrykami.
Wynik:
- C:\Logs\dns_Statistic.csv
- C:\Logs\dns_PacketStatistic.csv

### PRZYKŁAD 4

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"
```

Konwertuje dziennik do niestandardowej lokalizacji wyjściowej.
Wynik: C:\Output\parsed.csv

### PRZYKŁAD 5

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both
```

Konwertuje z separatorem przecinka i dodaje kolumnę ComputerName z wartością "DNS01".
Wynik:
- C:\Logs\dns.csv
- C:\Logs\dns_Statistic.csv
- C:\Logs\dns_PacketStatistic.csv

### PRZYKŁAD 6

```powershell
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -OutputType Both
```

Wsadowe przetwarzanie wielu plików dzienników debugowania DNS przez potok.
Wynik: Dla każdego pliku .log generuje pliki .csv i _statistic.csv

### PRZYKŁAD 7

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
```

Konwertuje i kompresuje wynik do archiwum ZIP.
Wynik: C:\Logs\dns.zip (zawierający dns.csv + pliki statystyk)

### PRZYKŁAD 8

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -RemoveSourceFile -Verbose
```

Konwertuje dziennik i usuwa plik źródłowy po pomyślnym przetworzeniu.
Szczegółowy output potwierdza usunięcie pliku.

### PRZYKŁAD 9

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'
```

Parsuje niemiecki format daty (DD.MM.YYYY) i wyprowadza w formacie amerykańskim (MM/DD/YYYY).
Użyj podczas przetwarzania dzienników z serwerów o różnych ustawieniach regionalnych.

### PRZYKŁAD 10

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet'
```

Konwertuje tylko wpisy pakietów zapytań/odpowiedzi DNS, wykluczając wpisy EVENT i Note.
Użyj, aby skupić analizę na rzeczywistym ruchu DNS.

### PRZYKŁAD 11

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet','Event'
```

Konwertuje zarówno pakiety zapytań/odpowiedzi DNS, jak i zdarzenia serwera, wykluczając wpisy Note i inne.
Użyj, aby analizować ruch DNS wraz z kontekstem zdarzeń serwera.

### PRZYKŁAD 12

```powershell
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -RemoveSourceFile -CompressOutput
```

Automatyczne archiwizowanie dzienników: przetwarza wszystkie dzienniki, kompresuje wynik i usuwa pliki źródłowe.
Idealne dla zaplanowanych potoków przetwarzania dzienników.

### PRZYKŁAD 13

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\large-dns.log" -NoDetailsParsing
```

Przetwarza duży plik dziennika z wyłączonym parsowaniem szczegółów dla maksymalnej wydajności.
Bloki szczegółów PACKET są pomijane, kolumna Details pozostaje pusta.
Użyj, gdy przetwarzasz bardzo duże pliki i nie potrzebujesz szczegółowej analizy struktury pakietów.

## PARAMETERS

### -CompressOutput

Kompresuje pliki CSV wyjściowe do archiwum ZIP po ich utworzeniu.

Tworzy plik .zip zawierający wygenerowane pliki CSV, a następnie usuwa niekompresowane pliki CSV.
Plik ZIP jest tworzony w tym samym katalogu co plik CSV z tą samą nazwą bazową.

Korzyści:
- Znacząco zmniejsza zajętość dysku (pliki CSV zwykle kompresują się o 90%+)
- Upraszcza zarządzanie plikami i archiwizację
- Nadaje się do długoterminowego przechowywania

Przykład: Plik wejściowy 'dns.log' generuje 'dns.csv', który jest kompresowany do 'dns.zip', a następnie 'dns.csv' jest usuwany.

```yaml
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

Określa wartość dla kolumny ComputerName w wyjściowym pliku CSV.
Kolumna ComputerName jest
zawsze obecna w wyjściu – jeśli parametr nie jest podany, kolumna pozostanie pusta.

Używaj tego przy konsolidacji dzienników z wielu serwerów DNS, aby zidentyfikować serwer źródłowy w
połączonych zestawach danych.

Uwaga: To NIE jest parametr zdalnego wywołania.
Cmdlet przetwarza tylko pliki lokalne.

```yaml
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

Pyta o potwierdzenie przed uruchomieniem cmdletu.

Jeśli podany, pyta o potwierdzenie przed:
- Przetwarzaniem każdego pliku dziennika debugowania DNS
- Usunięciem plików źródłowych (gdy użyto -RemoveSourceFile)
- Nadpisaniem istniejących plików wyjściowych

Przydatne przy interaktywnym przetwarzaniu, gdy chcesz kontrolować, które pliki są przetwarzane.

```yaml
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

Filtruje, które typy wpisów dziennika mają być uwzględnione w wyjściu.
Akceptuje pojedyncze lub wiele wartości.

Dzienniki debugowania DNS zawierają różne typy kontekstu:
- PACKET: Informacje o pakietach zapytań i odpowiedzi DNS (główne dane)
- EVENT: Zdarzenia serwera DNS (np. "Serwer DNS został uruchomiony.")
- Note: Notatki diagnostyczne i ostrzeżenia (np. błędy gniazda, stany wewnętrzne)
- DSPoll, Init, Lookup, Recurse, Remote, Tombstone: Dodatkowe typy kontekstu

Dopuszczalne wartości:
- 'All': Uwzględnij wszystkie typy kontekstu (domyślnie)
- 'Packet': Uwzględnij tylko wpisy PACKET (zapytania/odpowiedzi DNS)
- 'Event': Uwzględnij tylko wpisy EVENT (zdarzenia serwera)
- 'Note': Uwzględnij tylko wpisy Note (informacje diagnostyczne)
- Dowolna kombinacja: Podaj wiele wartości, aby uwzględnić wybrane typy kontekstu

Domyślnie: All

Przykłady:
- 'Packet' filtruje tylko ruch DNS
- 'Packet','Event' uwzględnia zarówno ruch DNS, jak i zdarzenia serwera
- 'Note','Event' uwzględnia notatki diagnostyczne i zdarzenia serwera

Uwaga: Przy filtrowaniu do 'Event' lub 'Note' tylko kolumny DateTime, ThreadId, Context i Information
będą zawierać dane.
Pozostałe kolumny (Protocol, ClientIP itd.) będą puste.

```yaml
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

Określa znak separatora dla wyjściowego pliku CSV.

Domyślnie: średnik (;)

Popularne alternatywy: przecinek (,), tabulator (`t), pionowa kreska (|)

Używaj średnika w regionach, gdzie przecinek jest separatorem dziesiętnym (Europa).
Używaj przecinka dla standardowych
narzędzi CSV i baz danych oczekujących wartości oddzielonych przecinkiem.

```yaml
Type: String
DefaultValue: ;
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 2
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -InputCulture

Określa kulturę/lokalizację do parsowania wartości daty/czasu w dzienniku debugowania DNS.

Dzienniki debugowania serwera DNS używają formatu daty lokalizacji Windows na serwerze, na którym dziennik
został wygenerowany.
Użyj tego parametru podczas przetwarzania dzienników z serwerów o różnych ustawieniach regionalnych.

Domyślnie: bieżąca kultura

Popularne przykłady:
- 'de-DE' lub 'de-AT': format niemiecki (DD.MM.YYYY lub DD/MM/YYYY)
- 'en-US': format amerykański (MM/DD/YYYY z AM/PM)
- 'en-GB': format brytyjski (DD/MM/YYYY z czasem 24-godzinnym)
- 'sv-SE': format szwedzki/ISO (YYYY-MM-DD)

```yaml
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: ''
```

### -InputFile

Określa ścieżkę do pliku dziennika debugowania DNS do parsowania.
Obsługuje tablice do przetwarzania wielu plików.

Akceptuje dane z potoku od Get-ChildItem lub innych cmdletów generujących pliki.

```yaml
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

Pomija parsowanie bloków szczegółów PACKET do strukturalnego formatu JSON.

Jeśli podany, rekordy PACKET z blokami szczegółów będą miały linię info TCP/UDP w kolumnie
Information, ale kolumna Details pozostanie pusta.
To znacznie poprawia
wydajność przetwarzania dużych plików dzienników, gdy szczegółowa analiza struktury pakietu nie jest potrzebna.

Użyj tego przełącznika gdy:
- Przetwarzasz bardzo duże pliki dzienników (100MB+) i potrzebujesz tylko podstawowych informacji o zapytaniach
- Nie wymagasz szczegółowej struktury (flagi wiadomości, sekcje DNS) do analizy
- Priorytetem jest maksymalna szybkość parsowania nad kompletnością danych

Wpływ na wydajność: Może przyspieszyć przetwarzanie o 30-50% dla dzienników z wieloma blokami szczegółów PACKET.

```yaml
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

Określa kulturę/lokalizację do formatowania wartości daty/czasu w wyjściowych plikach CSV.

Kontroluje sposób zapisu wartości DateTime do CSV.
Użyj tego, gdy pliki CSV będą używane
przez aplikacje lub systemy z określonymi ustawieniami regionalnymi.

Domyślnie: bieżąca kultura

Popularne przykłady:
- 'en-US': format amerykański (MM/DD/YYYY)
- 'de-DE': format niemiecki (DD.MM.YYYY)
- 'sv-SE' lub InvariantCulture: format ISO (YYYY-MM-DD) dla maksymalnej kompatybilności

```yaml
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

Określa ścieżkę do wyjściowego pliku CSV.
Jeśli nie podano, używa nazwy pliku wejściowego z rozszerzeniem .csv
w tym samym katalogu co plik wejściowy.

Ważne: musi to być ścieżka do pliku, nie katalogu.
Jeśli chcesz użyć katalogu pliku wejściowego z
niestandardową nazwą, podaj pełną ścieżkę wraz z nazwą pliku.

```yaml
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

Określa typ generowanego wyjścia.

Dopuszczalne wartości:
- 'CSV': Generuje tylko plik danych ze wszystkimi sparsowanymi wpisami dziennika
- 'Statistic': Generuje tylko pliki statystyk z agregowanymi metrykami
- 'Both': Generuje zarówno pliki danych, jak i statystyk (domyślnie)

Domyślnie: Both

Gdy generowane są statystyki, tworzone są dwa oddzielne pliki:
- '_Statistic.csv': Podsumowanie liczby wpisów według typu kontekstu na dzień (Data, Kontekst, Liczba, ComputerName)
- '_PacketStatistic.csv': Szczegółowe liczniki PACKET na dzień według IP klienta, protokołu, kierunku
  i typu zapytania (Data, ClientIP, Protokół, Kierunek, TypZapytania, Liczba, ComputerName)

```yaml
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

Usuwa źródłowy plik dziennika debugowania DNS po pomyślnym przetworzeniu.

Używaj tego w automatycznych potokach przetwarzania dzienników lub do zarządzania miejscem na dysku.
Plik źródłowy jest
usuwany tylko, jeśli przetwarzanie zakończy się sukcesem i wszystkie pliki wyjściowe zostaną utworzone.

Bezpieczeństwo: Nie można używać z -SkipHeaderValidation, aby zapobiec przypadkowemu usunięciu nieprawidłowych plików.

Ostrzeżenie: Pliki źródłowe są trwale usuwane.
Upewnij się, że pliki wyjściowe są poprawne przed użyciem tej opcji.

```yaml
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -SkipHeaderValidation

Pomija sprawdzanie poprawności nagłówka dziennika debugowania DNS.

Domyślnie cmdlet weryfikuje, czy pliki wejściowe mają poprawny nagłówek dziennika debugowania serwera DNS.
Użyj tego przełącznika, aby przetwarzać pliki bez walidacji, co może być przydatne dla:
- Zmienionych lub niestandardowych formatów dzienników
- Rozwiązywania problemów z walidacją
- Niestandardowych lub wstępnie przetworzonych dzienników

Ostrzeżenie: Może powodować błędy przetwarzania, jeśli plik nie jest prawidłowym dziennikiem DNS.

```yaml
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

Pokazuje, co by się stało, gdyby cmdlet został uruchomiony.
Cmdlet nie jest wykonywany.

Jeśli podany, wyświetla szczegółowe informacje o operacjach, które zostałyby wykonane,
bez faktycznego ich wykonania.
Przydatne do:
- Podglądu, które pliki zostałyby przetworzone
- Weryfikacji ścieżek plików wyjściowych przed przetwarzaniem
- Testowania skryptów przed uruchomieniem w środowisku produkcyjnym

```yaml
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

Ten cmdlet obsługuje parametry wspólne: -Debug, -ErrorAction, -ErrorVariable,
-InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable,
-ProgressAction, -Verbose, -WarningAction i -WarningVariable. Więcej informacji znajdziesz w
[about_CommonParameters](https://go.microsoft.com/fwlink/?LinkID=113216).

## INPUTS

### System.String[]

## NOTES

Wersja  : 1.7.0.0
Autor   : Andi Bellstedt, Copilot
Data    : 2026-01-25
Słowa kluczowe : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser

## RELATED LINKS

- [github.com/AndiBellstedt/DNSServer.DebugLogParser](https://github.com/AndiBellstedt/DNSServer.DebugLogParser)
