# Parametrit ja valinnat

> Mitä kukin Convert-DNSDebugLogFile-komennon valinta oikeasti muuttaa, milloin sitä tarvitset ja mihin sudenkuoppiin on helppo astua.

---

LLMS index: [llms.txt](/llms.txt)

---

Tällä sivulla selitetään valinnat selkokielellä ja siinä järjestyksessä, jossa niitä yleensä tarvitset. Tämä on opas, ei spesifikaatio — virallinen, aina ajan tasalla oleva parametrilista löytyy [komentoviitteestä](../commands/convert-dnsdebuglogfile/) ja komennolla:

```powershell
Get-Help Convert-DNSDebugLogFile -Full
```

## Lyhyt versio

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
```

Tuo yksittäinen rivi antaa jo järkevän toiminnan: sekä data- että tilastotiedostot, puolipiste erotinmerkkinä, koneesi päivämäärämuoto, otsikon tarkistus päällä, lähdeloki koskemattomana. Kaikki alla oleva on hienosäätöä.

| Valinta | Oletus | Muuta kun |
|---|---|---|
| `-InputFile` | *(pakollinen)* | aina |
| `-OutputFile` | syötetiedoston polku `.csv`-päätteellä | haluat tulosteen muualle |
| `-Delimiter` | `;` | kuluttajasi odottaa pilkkua, tabulaattoria tai putkea |
| `-ComputerName` | tyhjä | yhdistät lokeja useammalta palvelimelta |
| `-OutputType` | `Both` | haluat vain datan tai vain yhteenvedot |
| `-ContextFilter` | `All` | kiinnostaa vain varsinainen DNS-liikenne |
| `-InputCulture` | nykyinen kulttuuri | loki on peräisin palvelimelta, jolla on eri alueasetus |
| `-OutputCulture` | nykyinen kulttuuri | kone lukee CSV:n |
| `-NoDetailsParsing` | pois päältä | läpimenolla on väliä enemmän kuin pakettien sisällöllä |
| `-CompressOutput` | pois päältä | arkistoit tai siirrät tulokset |
| `-RemoveSourceFile` | pois päältä | ajastettu siivous ja luotat tulokseen |
| `-SkipHeaderValidation` | pois päältä | tiedosto on validi mutta otsikko on epätavallinen |

## Syöte ja tuloste

### -InputFile

Polku muunnettavaan lokiin. Ottaa taulukon ja putkisyötteen — siksi tämä toimii:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" | Convert-DNSDebugLogFile
```

`Get-ChildItem` tuottaa objekteja, joilla on `FullName`-ominaisuus, ja `-InputFile` hyväksyy sen ominaisuuden nimellä (alias-nimet ovat mm. `FullName`, `Path`, `FilePath`). Ei tarvita `ForEach-Object`-komentoa.

Paikalliset polut ja SMB/UNC-polut toimivat molemmat:

```powershell
Convert-DNSDebugLogFile -InputFile "\\dc01\C$\Administration\Logs\DNSServer\dns.log"
```

Komento voi myös avata lokin, jonka DNS-palvelin on parhaillaan auki. Katso [aktiiviset lokit](#aktiiviset-lokit) alta ennen kuin luotat tähän.

### -OutputFile

Ilman tätä CSV-tiedosto sijoittuu syötetiedoston viereen, sama perusnimi ja `.csv`-päätteellä. Tämän kanssa hallitset kohteen.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Tämän on oltava tiedostopolku, ei kansio</div>


`-OutputFile "D:\Processed\"` ei tarkoita "kirjoita tähän kansioon". Anna koko polku tiedostonimen kanssa: `-OutputFile "D:\Processed\dns_data.csv"`.

Tämä tarkoittaa myös, että `-OutputFile` ei ole järkevä, kun putkitat monta tiedostoa — jokainen muunnos kirjoittaisi samaan kohteeseen. Eräajoissa jätä se pois ja anna jokaisen lokin tuottaa oma CSV.
</div>


### -Delimiter

Oletuksena puolipiste, koska maissa, joissa pilkku on desimaalierotin, Excel odottaa sitä. Käytä `-Delimiter ","` työkaluissa ja tietokannoissa, jotka olettavat perinteisen pilkulla erotetun arvon, tai `` -Delimiter "`t" `` tabulaattorille.

Minkä tahansa valitsetkin, käytä *samaa* arvoa tuonnissa. Virheellinen erotin on yleisin syy siihen, että kaikki päätyy yhteen sarakkeeseen.

## Merkintä ja suodatus

### -ComputerName

Täyttää `ComputerName`-sarakkeen. Sarake on olemassa joka tapauksessa; tämä vain antaa sille arvon.

```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">Tämä ei ole etäkäyttöparametri</div>


Nimestään (ja alias-nimistä `-Server` / `-DNSServer` / `-HostName`) huolimatta `-ComputerName` **ei** muodosta yhteyttä mihinkään. Ei WinRM:ää, ei etäajoa. Se vain kirjoittaa tunnisteen tulosteeseen. Etälokin lukemiseksi osoita `-InputFile` UNC-polkuun.
</div>


Aseta se aina, kun useampi palvelin syöttää samaan aineistoon — muuten et jälkikäteen tiedä, mistä DC:stä rivi on peräisin.

### -OutputType

- `CSV` — vain datatiedosto
- `Statistic` — vain kaksi yhteenvedotiedostoa, ei rivikohtaista dataa
- `Both` — kaikki kolme tiedostoa *(oletus)*

`Statistic` on nopea, pieni vaihtoehto, kun tarvitset vain päivittäiset trendit. `CSV` on oikea, kun jälkikäsittelyjärjestelmä tekee oman yhteenvedon.

### -ContextFilter

DNS-debug-loki sekoittaa varsinaisen kyselyliikenteen palvelimen sisäiseen jutteluun. `-ContextFilter` päättää, mikä päätyy tulosteeseen.

```powershell
# vain oikea DNS-liikenne
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet

# liikenne plus palvelintapahtumat, mutta ei diagnostiikkamuistiinpanoja
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet, Event
```

| Arvo | Sisältää |
|---|---|
| `All` | kaiken *(oletus)* |
| `Packet` | DNS-kyselyt ja vastaukset — data, jota useimmat analyysit tarvitsevat |
| `Event` | palvelintapahtumat, esim. "DNS-palvelin on käynnistynyt" |
| `Note` | diagnostiikkamuistiinpanot ja varoitukset, esim. socket-virheet |

Lisää kontekstityyppejä (`DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone`) näkyy `All`-valinnassa.

Suodatus `Event`- tai `Note`-arvoon täyttää vain `DateTime`, `ThreadId`, `Context` ja `Information` -sarakkeet — protokollasarake jää tyhjäksi, koska näissä merkinnöissä ei ole sitä tietoa.

`-ContextFilter Packet` on tavallinen valinta turvallisuus- ja raportointiputkissa: se poistaa kohinan ja pienentää tulostetta merkittävästi.

## Kansainväliset lokit

DNS-palvelin kirjoittaa aikaleimat koneen Windowsin alueasetuksen mukaan. Saksalainen DC kirjoittaa `20.01.2026 23:00:16`; yhdysvaltalainen palvelin `1/20/2026 11:00:16 PM`. Jos työaseman alueasetus poikkeaa palvelimesta, jäsentäminen menee pieleen — tai vielä pahempaa, päivä ja kuukausi vaihtuvat hiljaisesti.

### -InputCulture

Kerro jäsentäjälle, mitä alueasetusta *lähdeloki* käyttää:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

| Kulttuuri | Lokin aikaleiman muoto |
|---|---|
| `de-DE` | `PP.KK.VVVV HH:MM:SS` |
| `en-US` | `K/P/VVVV H:MM:SS AM/PM` |
| `en-GB` | `PP/KK/VVVV HH:MM:SS` |
| `sv-SE` | `VVVV-KK-PP HH:MM:SS` |

Oletuksena on komentoa ajavan istunnon kulttuuri. Sekakulttuurisessa ympäristössä aseta se eksplisiittisesti äläkä luota oletukseen — ja muista, että ajastettu tehtävä, joka pyörii `SYSTEM`-tilassa, ei välttämättä käytä samaa kulttuuria kuin interaktiivinen testi.

### -OutputCulture

Ohjaa, miten aikaleimat *kirjoitetaan* CSV:hen:

```powershell
# ISO-tyylinen tuloste, jonka SQL Server, Power BI ja pandas ymmärtävät
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'

# sama vaikutus, eksplisiittinen invariantti kulttuuri
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" `
    -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
```

Nyrkkisääntö: jos ihminen avaa tiedoston Excelissä, käytä paikallista kulttuuria. Jos kone lukee sen, käytä `sv-SE` tai invarianttia kulttuuria ja älä murehdi alueasetuksista tuonnissa.

Nämä kaksi parametria ovat toisistaan riippumattomia — voit lukea ruotsalaisen lokin ja kirjoittaa yhdysvaltalaismuotoisen tulosteen.

## Nopeus ja tallennus

### -NoDetailsParsing

Jos DNS-palvelin kirjaa täydelliset pakettitiedot, jäsentäjä muuntaa jokaisen yksityiskohtablokin JSON-muotoon `Details`-sarakkeessa. Se on hyödyllistä, mutta myös kallein osa suoritusta ja kasvattaa CSV:tä.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -NoDetailsParsing
```

Sarake pysyy paikallaan mutta on tyhjä; TCP/UDP-yksityiskohtien otsikkorivi on edelleen `Information`-sarakkeessa. Yksityiskohtia sisältävissä lokeissa tämä voi lyhentää käsittelyaikaa 30–50 %. Käytä aina kun riittää kyselytason tiedot.

### -CompressOutput

Pakkaa luodut CSV-tiedostot zip-muotoon ja poistaa purkamattomat tiedostot. `dns.log` tuottaa `dns.zip`-tiedoston `dns.csv` sijaan.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
```

Tämän muotoiset CSV:t pakkaantuvat tyypillisesti yli 90 %, joten tämä on lähes ilmaista tallennustilansäästöä arkistoihin ja tiedostojen siirtoon verkon yli.

### -RemoveSourceFile

Poistaa lähdetiedoston `.log` onnistuneen muunnoksen jälkeen — loki poistetaan vain, jos kaikki tulostiedostot luotiin.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput -RemoveSourceFile
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Poisto on pysyvä</div>


Roska-astia puuttuu. Varmista tulos oikeilla lokeilla ennen kuin otat tämän käyttöön ajastetussa tehtävässä, äläkä koskaan osoita sitä aktiiviseen lokitiedostoon.

Komento kieltäytyy tarkoituksella yhdistämästä `-RemoveSourceFile`- ja `-SkipHeaderValidation`-valintoja, joten et voi poistaa tiedostoa, jota ei ole vahvistettu DNS-lokiksi.
</div>


## Turvaverkot

### -SkipHeaderValidation

Oletuksena komento tarkistaa, että tiedosto on todella DNS-palvelimen debug-loki ennen jäsentämistä. Tämä estää klassisen virheen, jossa työ ajoitetaan väärään kansioon.

Kytke pois päältä vain aidosti epätavallisissa tapauksissa: käsin muokatut lokit, esisuodatetut otteet, mukautetut muodot. Pidä päällä muualla — se on halpa tarkistus ja erottaa kirjoitusvirheen ja roskarivit.

### -WhatIf ja -Confirm

Komento tukee molempia. `-WhatIf` on oikea tapa nähdä, mihin uusi eräajo koskisi:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
```

`-Confirm` kysyy vahvistuksen ennen jokaisen tiedoston käsittelyä, lähdetiedoston poistoa ja olemassa olevan tulosteen ylikirjoitusta.

## Aktiiviset lokit

`Convert-DNSDebugLogFile` voi lukea tiedoston, jonka DNS-palvelin on auki. Kätevä satunnaiseen katsaukseen siitä, mitä juuri nyt tapahtuu.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Ei ajastettuihin tai tuotantokäyttöihin</div>


Aktiivinen loki muuttuu sitä luettaessa. Tuloste voi jäädä vaille muunnoksen aikana kirjoitettuja merkintöjä ja sen viimeinen rivi voi olla katkennut. Toistuva ajo antaa eri tuloksen.

Toistettavan tuloksen saamiseksi ota DNS-palvelimella käyttöön lokin kierto ja muunna vain suljetut, kiertoon siirretyt tiedostot — esimerkiksi ohittamalla uusin:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```
</div>


## Yhdistämällä kaikki

Tyypillinen tuotantokutsu toimialueen ohjaimella:

```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
```

Tulkinta: ota jokainen kiertoon siirretty loki paitsi aktiivinen, pidä vain DNS-liikenne, merkitse jokainen rivi palvelimen nimellä, kirjoita koneen luettavat aikaleimat ja jätä pakatut arkistot jäljelle. Täydellinen ajastetun tehtävän ja ryhmäkäytännön versio tästä löytyy [GPO-ohjatusta keräysesimerkistä](../examples/gpo-driven-collection/).
