# Parametry i opcje

> Co faktycznie zmienia każda opcja Convert-DNSDebugLogFile, kiedy jej potrzebujesz i na jakie pułapki łatwo się natknąć.

---

LLMS index: [llms.txt](/llms.txt)

---

Ta strona wyjaśnia opcje prostym językiem i w kolejności, w jakiej zazwyczaj ich potrzebujesz. To przewodnik, a nie specyfikacja — autorytatywna, zawsze aktualna lista parametrów znajduje się w [referencji poleceń](../commands/convert-dnsdebuglogfile/) oraz w:

```powershell
Get-Help Convert-DNSDebugLogFile -Full
```

## Krótkie podsumowanie

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
```

Ta jedna linia już daje rozsądne zachowanie: pliki danych i statystyk, średnik jako separator, format daty twojej maszyny, włączona walidacja nagłówka, oryginalny plik dziennika nietknięty. Wszystko poniżej to dopracowywanie.

| Opcja | Domyślnie | Zmień, gdy |
|---|---|---|
| `-InputFile` | *(wymagane)* | zawsze |
| `-OutputFile` | ścieżka wejściowa z `.csv` | chcesz wynik gdzie indziej |
| `-Delimiter` | `;` | twój odbiorca oczekuje przecinka, tabulatora lub kreski pionowej |
| `-ComputerName` | puste | łączysz dzienniki z więcej niż jednego serwera |
| `-OutputType` | `Both` | chcesz tylko dane albo tylko podsumowania |
| `-ContextFilter` | `All` | interesuje cię tylko rzeczywisty ruch DNS |
| `-InputCulture` | bieżąca kultura | dziennik pochodzi z serwera o innej lokalizacji |
| `-OutputCulture` | bieżąca kultura | plik CSV będzie czytać maszyna |
| `-NoDetailsParsing` | wyłączone | ważniejsza jest przepustowość niż szczegóły pakietów |
| `-CompressOutput` | wyłączone | archiwizujesz lub przesyłasz wyniki |
| `-RemoveSourceFile` | wyłączone | zaplanowane sprzątanie i ufasz wynikowi |
| `-SkipHeaderValidation` | wyłączone | plik jest poprawny, ale nagłówek nietypowy |

## Wejście i wyjście

### -InputFile

Ścieżka do dziennika do konwersji. Przyjmuje tablicę i dane z potoku — dlatego działa to:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" | Convert-DNSDebugLogFile
```

`Get-ChildItem` zwraca obiekty z właściwością `FullName`, a `-InputFile` akceptuje ją po nazwie właściwości (aliasy to m.in. `FullName`, `Path`, `FilePath`). Nie trzeba `ForEach-Object`.

Działają zarówno ścieżki lokalne, jak i SMB/UNC:

```powershell
Convert-DNSDebugLogFile -InputFile "\\dc01\C$\Administration\Logs\DNSServer\dns.log"
```

Polecenie może też otworzyć dziennik, który DNS Server ma aktualnie otwarty. Zobacz [aktywne dzienniki](#aktywne-dzienniki) poniżej, zanim na tym polegasz.

### -OutputFile

Bez tego plik CSV trafia obok pliku wejściowego, z tą samą nazwą bazową i rozszerzeniem `.csv`. Z tym parametrem kontrolujesz miejsce docelowe.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">To musi być ścieżka do pliku, nie folderu</div>


`-OutputFile "D:\Processed\"` nie oznacza „zapisz do tego folderu”. Podaj pełną ścieżkę wraz z nazwą pliku: `-OutputFile "D:\Processed\dns_data.csv"`.

To też oznacza, że `-OutputFile` nie ma sensu, gdy przesyłasz wiele plików — każda konwersja zapisywałaby do tego samego pliku. Przy wsadowych uruchomieniach pomiń ten parametr, aby każdy dziennik wygenerował własny CSV.
</div>


### -Delimiter

Domyślnie średnik, bo w lokalizacjach, gdzie przecinek jest separatorem dziesiętnym, Excel tego oczekuje. Użyj `-Delimiter ","` dla narzędzi i baz danych, które zakładają klasyczny format CSV z przecinkiem, lub `` -Delimiter "`t" `` dla tabulatora.

Cokolwiek wybierzesz, używaj *tej samej* wartości po stronie importu. Niezgodność to najczęstsza przyczyna, że „wszystko wylądowało w jednej kolumnie”.

## Etykietowanie i filtrowanie

### -ComputerName

Wypełnia kolumnę `ComputerName`. Kolumna istnieje zawsze; ten parametr tylko nadaje jej wartość.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ComputerName $env:COMPUTERNAME
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">To nie jest parametr zdalnego wywołania</div>


Pomimo nazwy (i aliasów `-Server` / `-DNSServer` / `-HostName`), `-ComputerName` **nie** łączy się z niczym. Nie ma WinRM, nie ma zdalnego wykonania. Tylko wpisuje etykietę do wyniku. Aby czytać zdalny dziennik, wskaż `-InputFile` na ścieżkę UNC.
</div>


Ustawiaj zawsze, gdy kilka serwerów zasila jeden zestaw danych — inaczej potem nie odróżnisz, z którego DC pochodzi wiersz.

### -OutputType

- `CSV` — tylko plik danych
- `Statistic` — tylko dwa pliki zbiorcze, bez danych wierszowych
- `Both` — wszystkie trzy pliki *(domyślnie)*

`Statistic` to szybka, mała opcja, gdy potrzebujesz tylko trendów dziennych. `CSV` jest właściwe, gdy system dalej sam agreguje dane.

### -ContextFilter

Dziennik debugowania DNS miesza rzeczywisty ruch zapytań z wewnętrznym szumem serwera. `-ContextFilter` decyduje, co przejdzie do wyniku.

```powershell
# tylko prawdziwy ruch DNS
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet

# ruch plus zdarzenia serwera, ale bez not diagnostycznych
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet, Event
```

| Wartość | Zawiera |
|---|---|
| `All` | wszystko *(domyślnie)* |
| `Packet` | zapytania i odpowiedzi DNS — dane potrzebne większości analiz |
| `Event` | zdarzenia serwera, np. „Serwer DNS został uruchomiony” |
| `Note` | notatki diagnostyczne i ostrzeżenia, np. błędy gniazda |

Dodatkowe typy kontekstu (`DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone`) pojawiają się pod `All`.

Filtrowanie tylko do `Event` lub `Note` wypełnia tylko `DateTime`, `ThreadId`, `Context` i `Information` — kolumny protokołu pozostają puste, bo te wpisy ich po prostu nie zawierają.

`-ContextFilter Packet` to zwykły wybór dla potoków bezpieczeństwa i raportowania: usuwa szum i zauważalnie zmniejsza wynik.

## Dzienniki międzynarodowe

Serwer DNS zapisuje znaczniki czasu w lokalizacji Windows maszyny, na której działa. Niemiecki DC zapisze `20.01.2026 23:00:16`; amerykański serwer `1/20/2026 11:00:16 PM`. Jeśli lokalizacja twojej stacji różni się od serwera, parsowanie się nie uda — albo, co gorsza, dzień i miesiąc się zamienią.

### -InputCulture

Powiedz parserowi, jaką lokalizację *ma dziennik źródłowy*:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

| Kultura | Format znacznika czasu w dzienniku |
|---|---|
| `de-DE` | `DD.MM.YYYY HH:MM:SS` |
| `en-US` | `M/D/YYYY H:MM:SS AM/PM` |
| `en-GB` | `DD/MM/YYYY HH:MM:SS` |
| `sv-SE` | `YYYY-MM-DD HH:MM:SS` |

Domyślnie to kultura sesji uruchamiającej polecenie. W środowisku mieszanym ustaw ją jawnie, zamiast polegać na domyśle — i pamiętaj, że zadanie zaplanowane jako `SYSTEM` może mieć inną kulturę niż ta, której używałeś interaktywnie.

### -OutputCulture

Kontroluje, jak znaczniki czasu *są zapisywane* do CSV:

```powershell
# wyjście w stylu ISO, które rozumie SQL Server, Power BI i pandas
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'

# ten sam efekt, jawna kultura invariant
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" `
    -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
```

Zasada: jeśli człowiek otwiera plik w Excelu, dopasuj lokalną kulturę. Jeśli czyta go maszyna, użyj `sv-SE` lub kultury invariant i przestań się martwić ustawieniami regionalnymi po stronie importu.

Te dwa parametry są niezależne — możesz czytać szwedzki dziennik i zapisywać wynik w formacie amerykańskim.

## Prędkość i miejsce

### -NoDetailsParsing

Jeśli serwer DNS loguje pełne szczegóły pakietów, parser zamienia każdy blok szczegółów na JSON w kolumnie `Details`. To przydatne, ale też najdroższa część działania i powiększa CSV.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -NoDetailsParsing
```

Kolumna pozostaje obecna, ale pusta; nagłówek szczegółów TCP/UDP jest dalej w `Information`. Na dziennikach bogatych w bloki szczegółów może to skrócić czas przetwarzania o 30–50%. Używaj, gdy wystarczy informacja na poziomie zapytań.

### -CompressOutput

Spakowuje wygenerowane pliki CSV i usuwa nieskompresowane. `dns.log` daje `dns.zip` zamiast `dns.csv`.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
```

CSV tego typu zwykle kompresuje się o 90% lub więcej, więc to niemal darmowa oszczędność miejsca na archiwa i przesyłanie plików po sieci.

### -RemoveSourceFile

Usuwa plik źródłowy `.log` po udanej konwersji — plik jest usuwany tylko, jeśli wszystkie pliki wyjściowe zostały utworzone.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput -RemoveSourceFile
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Usunięcie jest trwałe</div>


Nie ma tu kosza. Zweryfikuj wynik na prawdziwych dziennikach, zanim włączysz to w zadaniu zaplanowanym i nigdy nie wskazuj na aktywny plik dziennika.

Polecenie celowo odmawia łączenia `-RemoveSourceFile` z `-SkipHeaderValidation`, więc nie usuniesz pliku, który nigdy nie został potwierdzony jako dziennik DNS.
</div>


## Siatki bezpieczeństwa

### -SkipHeaderValidation

Domyślnie polecenie sprawdza, czy plik to faktycznie dziennik debugowania DNS Server, zanim go przetworzy. To łapie klasyczny błąd wskazania zadania na zły folder.

Wyłączaj tylko w naprawdę nietypowych przypadkach: ręcznie edytowane dzienniki, wyciągi po filtracji, formaty niestandardowe. Włączaj wszędzie indziej — to tanie i chroni przed literówką i górami śmieci.

### -WhatIf i -Confirm

Polecenie obsługuje oba. `-WhatIf` to właściwy sposób, by zobaczyć, co zrobi nowe zadanie wsadowe:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
```

`-Confirm` pyta przed przetworzeniem każdego pliku, przed usunięciem pliku źródłowego i przed nadpisaniem istniejącego wyniku.

## Aktywne dzienniki

`Convert-DNSDebugLogFile` może czytać plik, który DNS Server ma otwarty. Przydatne do doraźnego podglądu, co się dzieje teraz.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Nie do zadań zaplanowanych ani produkcyjnych</div>


Aktywny dziennik zmienia się podczas czytania. Wynik może pominąć wpisy dodane w trakcie konwersji, a ostatni rekord może być obcięty. Powtórzenie uruchomienia da inny rezultat.

Dla powtarzalnych wyników włącz obrót dzienników na serwerze DNS i konwertuj tylko zamknięte, obrócone pliki — na przykład pomijając najnowszy:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```
</div>


## Składanie wszystkiego razem

Typowe wywołanie produkcyjne na kontrolerze domeny:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile `
        -ComputerName $env:COMPUTERNAME `
        -Delimiter ';' `
        -OutputType Both `
        -ContextFilter Packet `
        -OutputCulture 'sv-SE' `
        -CompressOutput
```

Czytaj: weź każdy obrócony dziennik oprócz aktywnego, zachowaj tylko ruch DNS, oznacz każdy wiersz nazwą serwera, zapisz znaczniki czasu w formacie maszynowym i zostaw spakowane archiwa. Pełna wersja do zadania zaplanowanego i GPO jest w [przykładzie zbierania sterowanym GPO](../examples/gpo-driven-collection/).
