Tämä on monen sivun tulostettava näkymä osiosta Paina tulostaaksesi.

Palaa tavalliseen näkymään.

Tietoa tästä dokumentaatiosta

Tämä on virallinen dokumentaatiosivusto DNSServer.DebugLogParser-PowerShell-moduulille, joka muuntaa Windows DNS Serverin debug-lokitiedostot rakenteelliseksi, analysoitavaksi CSV-dataksi.

Moduulista

DNSServer.DebugLogParser syntyi todellisesta tarpeesta: Windows DNS Serverin debug-lokit ovat ihmisen luettavissa olevaa tekstiä, mutta eivät sovellu analytiikkaan tai raportointiin. Tämä moduuli täyttää tämän aukon muuntamalla raakaa lokitiedostoa rakenteelliseksi CSV-muodoksi, joka toimii yhdessä yleisten työkalujen kuten Excelin, Power BI:n, SQL-tietokantojen ja SIEM-järjestelmien kanssa.

Keskeiset suunnitteluperiaatteet:

  • Suorituskyky ensin — optimoitu yli 100 Mt tiedostoille käyttäen suoratoistoa ja merkkijonotoimintoja
  • Yhteensopivuus eri versioiden kanssa — tukee PowerShell Desktopia (5.1+) ja Corea (7.x)
  • Tuotantovalmius — sisältää otsikkotarkistuksen, virheenkäsittelyn ja valinnaisen pakkaamisen
  • Putkistoystävällinen — integroituu luonnollisesti PowerShellin putkistoarkkitehtuuriin

Mitä täällä on

OsaLue kun
YleiskatsausHaluat tietää, mitä moduuli tekee ja sopiiko se ongelmaasi
TulostusmuodotTarvitset tietää, mitä CSV-sarakkeet tarkoittavat ennen putkiston suunnittelua
Parametrit ja asetuksetPäätät, mitä kytkimiä muunnoksesi tarvitsee
SuorituskykyLokisi ovat suuria tai muunnos on odotettua hitaampi
IntegraatioLataat tuloksia Exceliin, Power BI:hin, SQL:ään, SIEMiin tai Pythoniin
Käyttöparhaat käytännötAiot ajaa tämän valvomattomasti tuotannossa
KäyttöesimerkitHaluat valmiin, kokonaisvaltaisen esimerkin mukautettavaksi
VianetsintäJokin ei toimi odotetusti
KomentoviiteTarvitset auktoritatiivisen parametrilistan

Uusi moduulissa? Aloita Yleiskatsauksesta.

Resurssit

Osallistuminen

Osallistumisesi on tervetullutta. Jos löydät ongelmia, virheitä tai sinulla on parannusehdotuksia, avaa issue tai pull request GitHub-repositoriossa.

1 - Yleiskatsaus

Mitä DNSServer.DebugLogParser tekee, miltä Windowsin DNS-debug-loki näyttää ja milloin sen muuntaminen CSV-muotoon on vaivan arvoista.

Windows DNS Server voi kirjoittaa debug-lokin. Se on tavallinen tekstimuotoinen tiedosto, joka on tarkoitettu ihmisen luettavaksi, ja se kasvaa satoja megatavuja päivässä vilkkaalla toimialueen ohjaimella. Tämä yhdistelmä tekee siitä lähes käyttökelvottoman heti, kun haluat vastata kysymykseen kuten “mikä asiakas kysyi tätä domainia 40 000 kertaa viime yönä?”

DNSServer.DebugLogParser muuttaa tuon tekstimuotoisen tiedoston CSV-taulukoksi. Yksi lokirivi muuttuu yhdeksi riviksi nimetyillä sarakkeilla, joten voit avata sen Excelissä, ladata Power BI:hin, lisätä massana SQL Serveriin tai lähettää SIEM-järjestelmääsi.

Moduulissa on yksi komento:

Convert-DNSDebugLogFile -InputFile "C:\Windows\System32\dns\dns.log"

Tämä on koko sisäänkäynti. Kaikki muu tällä sivustolla käsittelee sen tekemistä laajassa mittakaavassa, aikataulutetusti ja useilla palvelimilla.

Miltä DNS-debug-loki näyttää

Raaka merkintä on yksittäinen rivi, jossa on paikkaan sidottuja kenttiä, osa niistä hakasuluissa:

2026-01-20 23:00:16 0FE0 PACKET 000002C53117D990 UDP Rcv 10.0.0.2 c049 Q [0001 D NOERROR] A (3)odc(9)officeapps(4)live(3)com(0)

Muunnettuna sama tapahtuma on CSV-rivi, jota voi suodattaa ja lajitella:

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

Huomaa kaksi asiaa, jotka raakamuoto tekee vaikeaksi, mutta parseri hoitaa puolestasi:

  • Kysytty nimi on tallennettu DNS:n lankamuodossa, (3)odc(9)officeapps(4)live(3)com(0), ja siitä tulee normaali FQDN.
  • Yksi tapahtuma ei aina ole yksi rivi. PACKET-yksityiskohtablokit ja tapahtumaviestit jatkuvat sisennetyillä jatkoriveillä. Parseri pitää ne kiinni siihen merkintään, johon ne kuuluvat, sen sijaan että pudottaisi ne tai loisi orpoja rivejä.

Jokaisessa merkinnässä on jopa 16 alkuperäistä kenttää — aikaleima, protokolla, suunta, asiakas-IP, kyselytyyppi, kysytty nimi, vastauskoodi, liput ja muuta. Koko sarakeluettelo on kuvattu Output Formats-sivulla.

Miksi vaivautua muuntamaan

Vianetsintä

  • Selvitä, miksi nimi ei ratkea ja ylipäätään pääsikö kysely palvelimelle
  • Tunnista väärin konfiguroidut asiakkaat tai sovellukset, jotka kuormittavat palvelinta
  • Jäljitä, mistä ongelmallinen kysely oikeasti tulee
  • Varmista vyöhykkeiden siirrot ja yleinen DNS-käyttäytyminen

Suorituskyky ja kapasiteetti

  • Lajittele asiakkaat kyselymäärän mukaan ja löydä meluisimmat
  • Näe, mitkä tietue-tyypit hallitsevat liikennettäsi
  • Havaitse konfiguraatiovirheet, jotka aiheuttavat vältettäviä hakuja
  • Seuraa palvelimen kuormitusta ajan kuluessa arvaamisen sijaan

Turvallisuusanalyysi

  • Havaitse DNS-tunneloiminen ja tiedon ulosvirtaus (yleensä näkyy liiallisena TXT-liikenteenä — katso SQL Server -analyysiesimerkki)
  • Löydä haut haittaohjelmien ja komentokontrollidomainien suuntaan
  • Tunnista kompromettoituneen isännän kyselykuviot
  • Tarkkaile DNS-vahvistusväärinkäytöksiä
  • Rakenna uudelleen, mitä tapahtui tapauksen aikana

Säännösten noudattaminen ja auditointi

  • Täytä lokitus- ja säilytysvelvoitteet
  • Pidä kirjaa verkon toiminnasta
  • Laadi raportteja johdolle tai tarkastajille

Miten moduuli toimii

Convert-DNSDebugLogFile lukee lokin virtana ja kirjoittaa CSV:n virtana. Tiedostoa ei koskaan ladata kokonaan muistiin, joten 100 Mt loki vie suunnilleen saman verran muistia kuin 10 Mt. Yksityiskohdat löytyvät Performance-sivulta.

Mitä se tarjoaa:

OminaisuusKuvaus
Johdonmukainen CSV-rakenne18 saraketta, sama järjestys joka kerta, riippumatta siitä, mitä konteksteja lokissa esiintyy
Moniriviset merkinnätPACKET-yksityiskohtablokit ja tapahtumatekstit pysyvät kiinni omassa merkinnässään
DNS Server -versiot2012 R2:sta vuoteen 2025 lokimuodot
PowerShell-versiotWindows PowerShell 5.1+ ja PowerShell 7.x
TiedostokokoTestattu yli 100 Mt lokit; yksinkertainen suoratoisto
Otsikon validointiHylkää tiedostot, jotka eivät ole DNS-debug-lokeja (voi kytkeä pois)
TilastotValinnaiset päivittäiset yhteenvedot, kontekstin ja asiakkaan/protokollan/tyypin mukaan
PutkituenGet-ChildItem *.log | Convert-DNSDebugLogFile
PakkausValinnainen ZIP-tulos, tyypillisesti yli 90 % pienempi
Lähteen siivousValinnainen lokitiedoston poisto onnistuneen ajon jälkeen
Kansainväliset lokitJäsentää ja kirjoittaa päivämääriä kulttuurin mukaan, joten de-DE-loki voidaan lukea en-US-työasemalla
VerkkopolutLukee lähteitä SMB/UNC-polkujen kautta
Lukitut tiedostotLukee lokeja, joita DNS Server (tai joku muu) on parhaillaan avannut

Aktiivinen loki vs. kierrätetty loki

Käytännön malli on ottaa DNS-palvelimella käyttöön lokin kierrätys ja antaa aikataulutetun muunnoksen ohittaa uusin tiedosto:

Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME

Täydellinen ryhmäkäytäntöön perustuva toteutus on dokumentoitu GPO-driven collection example-sivulla.

Minne mennä seuraavaksi

Lisensointi ja tuki

MIT-lisenssi. Yhteisötuki tapahtuu GitHub Issues -kanavan kautta; virheraportit ja ominaisuuspyynnöt ovat tervetulleita.

2 - Tulostusmuodot

CSV-tiedoston sarakkeet, kaksi valinnaista tilastotiedostoa ja oikeat esimerkkitulosteet, jotka voit avata ennen kuin ajat mitään.

Convert-DNSDebugLogFile tuottaa enintään kolme tiedostoa syöttölokia kohden:

TiedostoSisältääLuodaan kun
<name>.csvYksi rivi jäsentynyttä lokimerkintää kohden-OutputType CSV tai Both
<name>_Statistic.csvPäivittäinen merkintämäärä kontekstin mukaan-OutputType Statistic tai Both
<name>_PacketStatistic.csvPäivittäinen kyselymäärä asiakkaan, protokollan, suunnan ja merkintätyypin mukaan-OutputType Statistic tai Both

Both on oletus. Tuloste sijoittuu syötetiedoston viereen, ellei -OutputFile ole asetettu.

Tällä sivulla linkitetyt esimerkkitiedostot ovat oikeita muunnostuloksia, eivät mallinnuksia. Lataa yksi ja avaa se Excelissä ennen kuin sitoudut putkisuunnitteluun.

CSV-tiedosto

Esimerkkituloste:

AlueDetails-sarakeTiedostot
en-USei täytettyWithComputerName, NoComputerName
de-DEei täytettyWithComputerName, NoComputerName
de-DEtäytettyWithComputerName, NoComputerName

Kaksi riviä oikeasta muunnoksesta — DNS-kysely ja palvelimen sisäinen huomautus:

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

Sarakkeet

Aina 18 saraketta, aina tässä järjestyksessä:

#SarakeMerkitysTyypillinen käyttö
1DateTimeMerkinnän aikaleimaAikasuodatus, yhdistäminen muihin lokitiedostoihin
2ThreadIdDNS-palvelimen työsäieHarvoin tarpeen; hyödyllinen palvelimen sisäisten ongelmien yhdistämisessä
3ContextMerkinnän tyyppi: Packet, Event, Note, DSPoll, Init, Lookup, Recurse, Remote, TombstoneEnsimmäinen suodatin — Packet on varsinainen DNS-liikenne
4PacketIdSisäinen pakettitunnisteKyselyn ja vastauksen parittaminen
5ProtocolUDP tai TCPTCP-piikit voivat viitata suuriin vastauksiin tai vyöhyke-siirtoihin
6DirectionRcv (kysely saapui) tai Snd (palvelin vastasi)Erottele pyyntö- ja vastausmäärät
7ClientIPKyselyn tehneen isännän osoiteSuosituimpien käyttäjien analyysi, tapahtuman laajuuden arviointi
8XidDNS-tapahtumatunnus (heksadesimaali)Pyynnön ja vastauksen yhdistäminen
9TypeQuery tai Response
10OpcodeStandard, Notify, Update, UnknownErottele dynaamiset päivitykset ja vyöhykeilmoitukset tavallisista hauista
11FlagsHexRaakatason otsikkoliput (heksadesimaali)Syvälliseen protokollan analyysiin
12FlagsCharPuretut liput: Authoritative, Truncated, RecursionDesired, RecursionAvailableLuettava versio ylläolevasta
13ResponseCodeNOERROR, NXDOMAIN, SERVFAIL, …Virheraportointi, ratkaisun epäonnistumisen etsintä
14QuestionTypeMerkintätyyppi: A, AAAA, MX, PTR, TXT, …TXT-määrä on klassinen tunneloitumisen indikaattori
15QuestionNameKysytty nimi normaalina FQDN:näUhka-analyysi, suosituimmat domain-raportit
16InformationVapaa teksti Event / Note -merkinnöille; Packet-yksityiskohtien TCP/UDP-otsikkoriviPalvelinviestien lukeminen
17DetailsPacket-yksityiskohtablokin JSON-esitys; muuten tyhjäTäydellinen pakettitarkastus ilman paluuta raakalukuihin
18ComputerNameLähdepalvelin, -ComputerName-parametrin arvoMonipalvelindatan yhdistämisen helpottamiseksi

Kaksi asiaa, jotka kannattaa huomioida:

  • Kaikki sarakkeet eivät ole täytettyjä kaikilla riveillä. Vain Packet-merkinnöillä on asiakas-IP, kyselynimi ja vastauskoodi. Note ja Event -rivit sisältävät tekstinsä Information-sarakkeessa ja jättävät protokollasarakkeet tyhjiksi. Suunnittele tietokantakaavio ja kojelaudan suodattimet tämän mukaan.
  • ComputerName on aina viimeinen sarake, vaikka et käyttäisi -ComputerName-parametria. Se on silloin vain tyhjä. Tämä pitää tiedostojen rakenteen identtisen kaikilla palvelimilla, jolloin voit yhdistää monen DNS-palvelimen tiedostot ilman sarakemäärityksiä.

Details-sarake

Yksityiskohtablokit näkyvät vain, jos DNS-palvelin on konfiguroitu tallentamaan täydelliset pakettitiedot. Kun ne ovat olemassa, jäsentäjä muuntaa ne yhdeksi JSON-arvoksi, jotta rivi pysyy yhtenä:

{
  "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": []
  }
}

Näiden blokien jäsentäminen vie aikaa ja kasvattaa CSV-tiedostoa merkittävästi. Jos et tarvitse niitä, käytä -NoDetailsParsing — sarake pysyy mukana mutta tyhjänä, ja muunnos nopeutuu. Katso Suorituskyky.

Tilastotiedostot

Tilastot ovat päivittäisiä yhteenlaskettuja arvoja. Käytä niitä, kun haluat trendin tai yhteenvedon etkä halua siirtää koko tietueryhmää — ne ovat tietotiedostoa huomattavasti pienempiä.

Kontekstin tilastot (*_Statistic.csv)

Vastaus: kuinka paljon mitäkin toimintaa tapahtui päivässä?

Date;Context;Count;ComputerName
2026-01-20;Event;2;dc01
2026-01-20;Note;2;dc01
2026-01-20;Packet;12;dc01
SarakeMerkitys
DatePäivä, aina muodossa yyyy-MM-dd
ContextKontekstin nimi (Packet, Event, Note, …)
CountKyseisen kontekstin merkintöjen määrä kyseisenä päivänä
ComputerNameLähdepalvelin

Esimerkkitiedostot: en-US WithComputerName, en-US NoComputerName, de-DE WithComputerName, de-DE NoComputerName

Pakettitilastot (*_PacketStatistic.csv)

Vastaus: kuka kysyi mitä, kuinka usein, päivässä?

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
SarakeMerkitys
DatePäivä, aina muodossa yyyy-MM-dd
ClientIPKyselyn tehnyt isäntä
ProtocolUDP tai TCP
DirectionRcv tai Snd
QuestionTypeDNS-merkintätyyppi
CountKyseisen päivän vastaavien pakettien määrä
ComputerNameLähdepalvelin

Esimerkkitiedostot: en-US WithComputerName, en-US NoComputerName, de-DE WithComputerName, de-DE NoComputerName

Erotin- ja päivämäärämuoto

Molemmat tulostyypit noudattavat -Delimiter (oletus ;) ja -OutputCulture asetuksia. Kaikessa koneellisesti tuotavassa tiedossa käytä ISO-tyyppisiä aikaleimoja:

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'

Tämä tuottaa 2026-01-20 23:00:16, jonka SQL Server, Power BI ja pandas lukevat ilman erillistä muotoiluvihjettä. Lisätietoja Parametrit ja asetukset.

3 - Parametrit ja valinnat

Mitä kukin Convert-DNSDebugLogFile-komennon valinta oikeasti muuttaa, milloin sitä tarvitset ja mihin sudenkuoppiin on helppo astua.

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ä ja komennolla:

Get-Help Convert-DNSDebugLogFile -Full

Lyhyt versio

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öä.

ValintaOletusMuuta kun
-InputFile(pakollinen)aina
-OutputFilesyötetiedoston polku .csv-päätteellähaluat tulosteen muualle
-Delimiter;kuluttajasi odottaa pilkkua, tabulaattoria tai putkea
-ComputerNametyhjäyhdistät lokeja useammalta palvelimelta
-OutputTypeBothhaluat vain datan tai vain yhteenvedot
-ContextFilterAllkiinnostaa vain varsinainen DNS-liikenne
-InputCulturenykyinen kulttuuriloki on peräisin palvelimelta, jolla on eri alueasetus
-OutputCulturenykyinen kulttuurikone lukee CSV:n
-NoDetailsParsingpois päältäläpimenolla on väliä enemmän kuin pakettien sisällöllä
-CompressOutputpois päältäarkistoit tai siirrät tulokset
-RemoveSourceFilepois päältäajastettu siivous ja luotat tulokseen
-SkipHeaderValidationpois 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:

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:

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 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.

-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.

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ComputerName $env:COMPUTERNAME

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.

# 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
ArvoSisältää
Allkaiken (oletus)
PacketDNS-kyselyt ja vastaukset — data, jota useimmat analyysit tarvitsevat
Eventpalvelintapahtumat, esim. “DNS-palvelin on käynnistynyt”
Notediagnostiikkamuistiinpanot 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ää:

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
KulttuuriLokin aikaleiman muoto
de-DEPP.KK.VVVV HH:MM:SS
en-USK/P/VVVV H:MM:SS AM/PM
en-GBPP/KK/VVVV HH:MM:SS
sv-SEVVVV-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:

# 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ä.

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.

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.

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput -RemoveSourceFile

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:

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.

Yhdistämällä kaikki

Tyypillinen tuotantokutsu toimialueen ohjaimella:

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ä.

4 - Suorituskyky

Kuinka jäsentäjä käsittelee 100 Mt lokitiedostoja ilman, että palvelimesi muisti loppuu, ja mitä voit tehdä muunnosten nopeuden ylläpitämiseksi.

DNS-vianmäärityslokit vilkkaalla toimialueen ohjaimella ovat suuria. Convert-DNSDebugLogFile on suunniteltu tätä varten: sitä on testattu yli 100 Mt:n lokitiedostoilla, ja se käsittelee ne minuuteissa tavallisella palvelinlaitteistolla.

Miksi se on nopea

Et tarvitse tätä tietoa moduulin käyttämiseen, mutta se selittää havaitsemasi käyttäytymisen.

TekniikkaHuomattava vaikutus
StreamReader / StreamWriter 64 kt puskureillaTiedosto luetaan ja kirjoitetaan paloissa yhden suuren Get-Content-kutsun sijaan
Virtaava, yksinkertainen läpikäyntiMuistin käyttö pysyy suunnilleen samana riippumatta lokin koosta
Merkkijono-operaatiot (.Substring(), .IndexOf()) säännöllisten lausekkeiden sijaanHuomattavasti vähemmän CPU-käyttöä per rivi, ja rivejä on miljoonia
CSV kirjoitetaan käsin Export-Csv-komennon sijaanEi objektiputken ylikuormitusta per tietue
Tilastojen kokoaminen hashtablen avullaYhteenvedot maksavat lähes mitään saman läpikäynnin aikana

Tärkeä seuraus: koko lokia ei koskaan pidetä muistissa kerralla. 500 Mt:n loki ei tarvitse 500 Mt RAM-muistia. Tämä erottaa moduulin kotikutoisista skripteistä, jotka lukevat tiedoston, pilkkovat sen ja rakentavat objekteja — tuo lähestymistapa toimii hyvin 5 Mt:n näytteellä, mutta kaatuu oikealla DC:llä.

Parhaan suorituskyvyn saaminen

Muunna kiertävät palat, älä yhtä jättitiedostoa

Määritä DNS-palvelin kierrättämään loki hallittavissa olevassa koossa — 50–200 Mt on hyvä haarukka. Useat keskikokoiset tiedostot muuntuvat ennustettavasti ja ajoitettu tehtävä ehtii valmistua ajoissa. Yksi jatkuvasti kasvava tiedosto ei.

Kiertäminen antaa myös suljetut tiedostot käsiteltäväksi, mikä on muutenkin toivottavaa:

Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME

Ohita yksityiskohtainen jäsentäminen, jos et tarvitse sitä

Jos DNS-palvelin kirjoittaa täydelliset pakettitiedot, niiden muuntaminen JSON-muotoon on muunnoksen kallein osa.

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -NoDetailsParsing

Odota 30–50 % nopeampia suorituksia lokeilla, joissa on paljon yksityiskohtaisia lohkoja, sekä huomattavasti pienempi CSV. Saat silti kyselytason tiedot ja TCP/UDP-yksityiskohtaisen otsikkorivin Information-tietueessa. Katso Parametrit ja asetukset.

Suodata aikaisin

-ContextFilter Packet pudottaa palvelinmuistiinpanot ja tapahtumat ennen niiden kirjoittamista. Vähemmän tulostusta tarkoittaa vähemmän I/O:ta, pienempiä tiedostoja ja vähemmän työtä jälkikäsittelyssä.

Pyydä vain tarvitsemasi

-OutputType Statistic ohittaa rivikohtaisen CSV:n kirjoittamisen kokonaan. Jos kojelaudallasi näytetään vain päivittäiset määrät, tämä on selvästi halvin vaihtoehto.

Muunna paikallisesti, siirrä tulokset

Moduuli lukee SMB/UNC-polkuja, mutta 200 Mt:n raakaa lokia siirtäminen verkon yli keskitettyyn jäsentämiseen on hidas tapa. Muunna DNS-palvelimella ja siirrä sitten (pakattu) CSV — se on yleensä kymmenesosa tavuista. Tämä on suunnittelun taustalla GPO-ohjatun keräyksen esimerkissä.

Pakkaa siirtoa ja arkistointia varten

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput

Tämän muotoinen CSV kutistuu tyypillisesti 90 % tai enemmän. Pakkaus vaatii hieman CPU:ta suorituksen lopussa, mutta säästää paljon levytilaa ja verkon kaistaa myöhemmin.

Kun suoritus on odotettua hitaampi

Tarkista nämä järjestyksessä:

  1. Levy, ei CPU. Muunnos on I/O-raskas. Lokitiedosto vilkkaalla asemalla tai hidas linkki hallitsee suoritusaikaa.
  2. Yksityiskohtaiset lohkot. Jos lokissa on täydelliset pakettitiedot etkä käyttänyt -NoDetailsParsing-valitsinta, aika kuluu niihin.
  3. Tiedoston koko. Yksi monigigatavun loki kestää kauan joka tapauksessa. Korjaa tämä kierrätyksellä, älä parametreilla.
  4. Virustorjunta. Sekä lähdelokin että tuotetun CSV:n reaaliaikainen tarkistus voi kaksinkertaistaa I/O-kustannukset. Poissulku lokihakemistolle on yleinen ja järkevä toimenpide.
  5. Muistipaine. Moduuli käyttää virtausta, joten sen ei pitäisi olla syy — mutta palvelin, joka jo käyttää swap-tilaa, hidastaa kaikkea.

Lisää oireita ja korjauksia on koottu Vianmääritykseen.

5 - Integrointi analyysityökaluihin

Muunnetun CSV-tiedoston tuominen Exceliin, Power BI:hin, SQL Serveriin, SIEMiin tai Python-muistikirjaan — mukaan lukien erotin- ja päivämääräasetukset, jotka saavat sen toimimaan heti ensimmäisellä yrityksellä.

DNS-vianmäärityslokin muuntamisen tarkoitus on se, mitä sen jälkeen tapahtuu. CSV valittiin, koska kaikki lukevat sitä — mutta “kaikki lukevat CSV:tä” kätkee kaksi asetusta, jotka ratkaisevat, onko tuonti vaivatonta vai koko iltapäivän säätämistä.

Kaksi asetusta, jotka ratkaisevat kaiken

Erotinmerkki. Oletus on ;. Pidä se Excelissä maissa, joissa pilkkua käytetään desimaalierottimena. Vaihda , useimpiin tietokantoihin ja data-analytiikan työkaluihin. Mikä tahansa valintasi on, kerro sama tuovalle osapuolelle.

Päivämäärämuoto. -OutputCulture ohjaa, miten aikaleimat kirjoitetaan. Koneen luettavaksi käytä sv-SE (tai invarianttikulttuuria), jotta DateTime tulee muodossa 2026-01-20 23:00:16:

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'

Kaikki alla olevat kuluttajat ymmärtävät tämän muodon ilman vihjettä. Paikalliseen asetukseen perustuva tuloste kuten 20.01.2026 tuodaan tekstinä tai, vielä pahempaa, tulkitaan väärin kuukauden/päivän mukaan.

Microsoft Excel

Nopein tapa tarkastella yhtä muunnettua lokia.

  • Oletuserottimella ; ja sitä odottavalla paikallisella asetuksella kaksoisklikkaus avaa tiedoston oikeilla sarakkeilla.
  • Jos kaikki päätyy sarakkeeseen A, erotin ei vastaa Excelin asetusta. Suorita uudelleen -Delimiter "," tai tuo tiedosto Data → From Text/CSV -toiminnolla ja valitse erotin siellä.
  • Muunna alue taulukoksi (Ctrl+T) ja rakenna Pivot-taulukko ClientIP, QuestionName tai QuestionType -kentän perusteella. Suosituimmat asiakkaat ja domainit löytyvät minuutissa.
  • Yli muutaman sadantuhannen rivin tiedostoille käytä mieluummin Power Queryä tai muita alla mainittuja vaihtoehtoja.

*_Statistic.csv ja *_PacketStatistic.csv -tiedostot ovat yleensä parempia Excel-kohteita — ne ovat esikäsiteltyjä ja pysyvät pieninä. Katso Output Formats.

Power BI

Tuo CSV-tiedostot ja rakenna kojelaudat DNS-toiminnalle, suosituimmille asiakkaille, kyselytrendeille ja virheiden määrille.

  • Kohdista Power Query kansioon, jossa muunnetut tiedostot ovat, älä yksittäiseen tiedostoon. Rakenne on sama palvelimilla ja päivillä, joten tiedostot vain lisätään perään.
  • ComputerName-sarake mahdollistaa monipalvelinraportoinnin — aseta -ComputerName muunnon yhteydessä, muuten et voi suodattaa palvelimen mukaan.
  • ResponseCode ja QuestionType ovat luonnollisia suodattimia; DateTime toimii aikajanana.
  • Syöttämällä Power BI:hin *_PacketStatistic.csv täyden datatiedoston sijaan malli pysyy pienenä, kun tarvitset vain päivittäisiä trendejä.

SQL-tietokannat

Lataa CSV-massa SQL Serveriin, PostgreSQL:ään tai mihin tahansa SQL:ää tukevaan järjestelmään pitkäaikaista säilytystä ja toistettavia kyselyjä varten.

Valmis esimerkki — taulun määrittely, muunnos, SqlBulkCopy-tuonti ja epäilyttävän TXT-toiminnan havaitsemiskysely — on dokumentoitu kohdassa Security Analysis Workflow with SQL Server.

Suunniteltavia asioita ennen ensimmäistä latausta:

  • Käytä -OutputCulture 'sv-SE', jotta aikaleimat menevät datetime2-sarakkeeseen ilman muunnosvippaskonsteja.
  • Information ja Details voivat olla pitkiä; anna niille nvarchar(max).
  • Indeksoi ne kentät, joita todella kysyt — tyypillisesti DateTime, ClientIP ja QuestionName.
  • Pidä -ComputerName täytettynä, jotta rivit pysyvät tunnistettavina yhdistämisen jälkeen.

SIEM-järjestelmät

Splunk, Elastic, Sentinel ja vastaavat alustat ottavat CSV:n vastaan korrelointia varten muiden tietoturvatelemetriikoiden kanssa ja hälytysten luomiseksi.

  • Lähetä pakattu tuloste (-CompressOutput) — se on noin kymmenesosa koosta ja useimmat kerääjät purkavat sen itse.
  • Määrittele kenttien kartoitus kerran; sarakejärjestys ei muutu ajokertojen tai palvelimien välillä, mukaan lukien aina läsnä oleva loppuosa ComputerName.
  • Anna kerääjän poistaa duplikaatit tai arkistoi käsitellyt .log-tiedostot. Muunnostyö, joka käsittelee samoja kiertäviä lokitiedostoja uudelleen, lähettää muuten identtiset rivit uudestaan.
  • -ContextFilter Packet pitää vastaanottomäärän (ja lisenssikustannukset) kurissa, kun palvelinmuistiinpanoja ei tarvita.

Python, R ja data-analytiikan työkalut

Rakenteellinen tuloste on valmis poikkeavuuksien havaitsemiseen, perustason luomiseen ja räätälöityyn analytiikkaan.

import pandas as pd

df = pd.read_csv(
    r"C:\Administration\Logs\DNSServer\dns.csv",
    sep=";",
    parse_dates=["DateTime"],
)

# top 20 kysyttyä nimeä, vain kyselyt
top = (
    df[df["Direction"] == "Rcv"]
    .groupby("QuestionName")
    .size()
    .sort_values(ascending=False)
    .head(20)
)
print(top)

parse_dates toimii suoraan, kun olet vienyt tiedoston -OutputCulture 'sv-SE' -asetuksella. Tästä eteenpäin pandas, scikit-learn tai R hoitavat klusteroinnin, kausivaihtelun ja poikkeamien tunnistuksen kuten tavallista.

PowerShellissä pysyminen

Et tarvitse lähteä PowerShellistä saadaksesi nopean vastauksen:

$dns = Import-Csv "C:\Administration\Logs\DNSServer\dns.csv" -Delimiter ';'

# meluisimmat asiakkaat
$dns | Where-Object Direction -eq 'Rcv' |
    Group-Object ClientIP |
    Sort-Object Count -Descending |
    Select-Object -First 10 Count, Name

# epäonnistuneet haut
$dns | Where-Object ResponseCode -eq 'NXDOMAIN' |
    Group-Object QuestionName |
    Sort-Object Count -Descending |
    Select-Object -First 10 Count, Name

Import-Csv lukee koko tiedoston muistiin, joten tämä sopii pyöräytettyyn osaan, mutta ei monen gigatavun vientiin — siihen on tietokanta- ja SIEM-reitit.

6 - Toiminnalliset parhaat käytännöt

Mitä pitää saada oikein ennen kuin DNS-lokin muunnos ajetaan valvomatta tuotannon toimialueen ohjaimilla.

Lokien käsin muuntaminen on helppoa. Sen ajaminen joka yö jokaisella toimialueen ohjaimella vuosikausia ilman, että kukaan katsoo tuloksia, vaatii hieman suunnittelua. Tässä ovat käytännössä tärkeimmät kohdat.

1. Muunna kiertävät lokit, älä aktiivista

Ota lokin kierto käyttöön DNS-palvelimella ja muunna vain suljetut tiedostot. Moduuli voi lukea lokia, johon DNS-palvelin parhaillaan kirjoittaa, mutta kyseinen tiedosto muuttuu muunnoksen aikana: uusimmat merkinnät voivat puuttua ja viimeinen rivi voi olla katkaistu. Kaksi ajoa tuottaa kaksi erilaista tulosta.

Vakio käytäntö ohittaa uusimman tiedoston:

Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME

Huomioitava kompromissi: vähäliikenteisellä palvelimella kierto voi kestää yli päivän, jolloin kuluvan päivän tiedot pysyvät muuntamattomina kunnes tiedosto kiertää. Säädä kierron kynnysarvo sen mukaisesti.

2. Ajoita tehtävä ja anna sille toimiva tunnus

Tehtävien ajoitus on tavallisin tapa — päivittäinen ajo on järkevä oletus. Täydellinen ryhmäkäytäntöön perustuva toteutus toimialueen ohjaimille on dokumentoitu GPO-ohjatun keräyksen esimerkissä, ja itsenäinen tehtävä Scheduled Task -esimerkissä.

Kolme yleistä ongelmaa:

  • Moduulin löydettävyys. SYSTEM-tilassa ja -NoProfile-valitsimella ajettava tehtävä näkee vain konekohtaiset moduulipolut. Asenna moduuli konekohtaisesti tai lisää tehtävän toimintaan eksplisiittinen Import-Module.
  • Kulttuuri. Tehtävän suorittavalla tilillä ei välttämättä ole samaa paikallisasetusta, jolla testasit interaktiivisesti. Aseta -InputCulture ja -OutputCulture eksplisiittisesti äläkä luota oletuksiin.
  • Verkkoyhteys. Jos lähde- tai kohdekohde on UNC-polku, SYSTEM todentuu koneen tilinä. Anna jaetun kansion ja NTFS-oikeudet koneen tilille (tai Domain Controllers -ryhmälle) tai aja tehtävä omalla palvelutilillä.

3. Kierrä tiedostokoko, jonka pystyt käsittelemään

50–200 Mt per tiedosto pitää muunnokset ennustettavina ja mahdollistaa yön aikana suoritettavan työn. Yksi jatkuvasti kasvava tiedosto ei lopulta pysy mukana. Katso Suorituskyky.

4. Vahvista ensimmäiset tulokset ennen automatisointia

Aja muunnos manuaalisesti kahdella tai kolmella oikealla lokilla ja avaa CSV-tiedostot:

  • Ovatko aikaleimat oikein — eivätkö päivä ja kuukausi ole vaihtaneet paikkaa? (Jos ovat, aseta -InputCulture.)
  • Vastaako erotin kuluttajasi odotuksia?
  • Onko ComputerName täytetty?
  • Ovatko tarvitsemasi kontekstit mukana ja tarpeettomat suodatettu pois?

-WhatIf näyttää, mitä tiedostoja erä koskisi ennen kuin se koskee niitä:

Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf

5. Päätä, mitä käsitellyille lokeille tapahtuu

Tehtävä, joka yksinkertaisesti muuntaa “kaikki lokit paitsi uusimman”, käsittelee samat tiedostot joka yö uudelleen. Se on luotettava ja yksinkertainen, mutta ylikirjoittaa tulokset ja voi työntää duplikaattirivejä kerääjälle.

Valitse yksi:

  • siirrä käsitellyt .log-tiedostot arkistokansioon
  • poista ne -RemoveSourceFile-valitsimella, kun putki on luotettava
  • tee kerääjästä duplikaattien poisto

Minkä tahansa valitsetkin, kirjaa se ylös — tämä yksityiskohta hämmentää seuraavaa ylläpitäjää.

6. Suunnittele tallennus ja säilytys

Pakkaus (-CompressOutput) yleensä pienentää CSV:n kokoa yli 90 %, mutta määrä kasvaa silti. Arvioi todellisen kyselymääräsi ja säilytysvelvoitteesi perusteella ja aseta datalle päättymispäivä sen sijaan, että annat sen kasvaa loputtomasti.

-OutputType Statistic kannattaa harkita pitkään säilytykseen: päivittäiset yhteenvedot ovat pieniä ja vastaavat usein niitä trendikysymyksiä, joita vanha rivikohtainen data palveli.

7. Kohtele tulosta arkaluontoisena

Jäsennellyt DNS-lokit kuvaavat sisäistä nimirakennettasi ja kuka on mitäkin hakenut. Se paljastaa enemmän kuin useimmat infrastruktuurilokit, ja riippuen lainsäädännöstäsi se voi olla henkilötietoa.

  • Rajoita NTFS- ja jaetun kansion oikeudet tuloskansioissa.
  • Älä pudota CSV-tiedostoja yleiskäyttöiselle tiedostojakolle “väliaikaisesti”.
  • Sisällytä DNS-lokit säilytys- ja poistopolitiikkaasi, älä pelkästään varmuuskopiointipolitiikkaan.
  • Pakattu tulos on pienempi, ei suojattu — käytä salausta tai pääsynvalvontaa siellä, missä sillä on merkitystä.

8. Pidä otsikkotarkistus päällä

Oletustarkistus, joka varmistaa tiedoston olevan oikeasti DNS-debug-loki, ei maksa mitään ja estää väärin kirjoitetun polun tuottamasta tuhansia järjettömiä rivejä. Käytä -SkipHeaderValidation vain aidosti poikkeuksellisissa formaateissa — ja huomaa, että komento kieltäytyy yhdistämästä sitä -RemoveSourceFile-valitsimen kanssa juuri tästä syystä.

9. Valvo tehtävää, älä pelkästään palvelinta

Valvomaton muunnos, joka hiljaa pysähtyy, on pahempi kuin ei muunnosta ollenkaan, koska aukko huomataan vasta, kun joku tarvitsee dataa.

  • Tarkkaile virheiden esiintymistä; GPO-viiteimplementaatio heittää virheen, kun $Error.Count -gt 0, jotta tehtävä raportoi epäonnistumisen.
  • Hälytä ajoitetun tehtävän viimeisestä tuloskoodista, älä pelkästään siitä, onko tehtävä olemassa.
  • Tarkista, että tulostiedostot todella ilmestyvät ja niissä on tuoreita aikaleimoja.
  • Seuraa vapaata levytilaa sekä lokilevyllä että tulostuskohteessa.

Yleisiä epäonnistumisen syitä — pääsyn estot, vioittuneet lokit, virheelliset otsikot — käsitellään Vianmäärityksessä.

10. Dokumentoi työnkulku

Missä lokit kirjoitetaan, milloin tehtävä ajetaan, mitä parametreja käytetään, minne tulos menee, kuka sitä käyttää ja kuinka kauan sitä säilytetään. Kuusi riviä ylläpitowikissäsi. Se tekee asetuksesta auditoitavan ja siirrettävän.

7 - Vianmääritys

Oireet, joihin todennäköisesti törmäät muuntaessasi DNS-vianmäärityslokeja, niiden syyt ja korjaukset.

“Tiedosto ei ole kelvollinen DNS-vianmäärityslokitiedosto”

Otsikkotarkistus hylkäsi syötteen. Yleensä polku on yksinkertaisesti väärä — samaan kansioon tallennettu .log-tiedosto, joka ei ole DNS-vianmääritysloki, tai tiedosto, joka sisältää vain kierrätetyn otsikon.

Tarkista seuraavat asiat:

  1. Avaa tiedosto. DNS-vianmääritysloki alkaa otsikkorivillä, kuten Message logging started at …, ja jatkuu aikaleimatuilla kyselymerkinnöillä.

  2. Varmista, että DNS-vianmäärityslokin kirjaus on todella käytössä ja kirjoittaa odottamaasi polkuun:

    Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize
    
  3. Jos tiedosto on aidosti DNS-loki, mutta otsikko on epätavallinen — käsin muokattu, esisuodatettu, mukautettu vienti — ohita tarkistus:

    Convert-DNSDebugLogFile -InputFile "C:\Logs\odd.log" -SkipHeaderValidation
    

Pidä tarkistus päällä muualla. Huomaa, että -SkipHeaderValidation ei voi yhdistää -RemoveSourceFile-parametrin kanssa, joten vahvistamatonta tiedostoa ei voi koskaan poistaa muunnoksen yhteydessä.

Tulostiedosto on tyhjä tai siinä on paljon vähemmän rivejä kuin odotettu

Tarkista tässä järjestyksessä:

  • Sisältääkö loki lainkaan kyselymerkintöjä? Vasta kierrätetty loki voi sisältää vain otsikon, jos kyselyjä ei ole vielä tapahtunut.
  • Onko käytössä -ContextFilter? -ContextFilter Packet poistaa Event- ja Note-merkinnät tarkoituksella. Jos suodatit Event- tai Note-tyyppiin, useimmat sarakkeet ovat myös tyhjiä — nämä merkintätyypit sisältävät vain DateTime, ThreadId, Context ja Information.
  • Oliko lähdeloki aktiivinen? Tiedostoa, johon DNS-palvelin yhä kirjoittaa, voi muuttua muunnoksen aikana; uusimmat merkinnät voivat puuttua ja viimeinen rivi voi olla katkennut. Muunna kierrätetty, suljettu loki, kun tarvitset täydellisen tuloksen.
  • Onko tiedosto vioittunut tai katkennut? Tarkista lokin loppu puoliksi kirjoitetun rivin varalta.

Päivät ovat väärin, siirtyneet tai päivä ja kuukausi ovat vaihtaneet paikkaa

Loki on kirjoitettu palvelimella, jonka Windowsin alueasetus poikkeaa muunnoksen suorittavan istunnon asetuksesta. 20.01.2026 ja 01/20/2026 kuvaavat samaa hetkeä, mutta vain jos molemmat osapuolet ovat samaa formaattia.

# loki tuli saksalaiselta palvelimelta
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'

Aseta -InputCulture selkeästi ajoitettuihin tehtäviin sen sijaan, että luottaisit tehtävän suorittavan käyttäjätilin alueasetukseen. Jos tulos halutaan koneen luettavaksi, lisää -OutputCulture 'sv-SE'. Lisätietoja Parametrit ja asetukset.

Kaikki päätyy yhteen sarakkeeseen tuonnin jälkeen

Erotinmerkki ei täsmää. Moduuli kirjoittaa oletuksena ;; kuluttajasi odotti , (tai päinvastoin).

Suorita muunnos uudelleen kuluttajan haluamalla erotinmerkillä:

Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter ","

…tai kerro tuojalle, mikä erotinmerkki tiedostossa on — Excelissä valitse Data → From Text/CSV, PowerShellissä käytä Import-Csv -Delimiter ';'.

“Access denied” (Pääsy evätty)

  • DNS-lokin kansio vaatii tyypillisesti järjestelmänvalvojan oikeudet. Käynnistä PowerShell korotettuna tai suorita ajoitettu tehtävä tilillä, jolla on pääsy.
  • Tarkista myös kirjoitusoikeudet tuloskansioon, ei pelkästään lukuoikeudet lokiin.
  • SMB/UNC-polkujen kohdalla: SYSTEM-tilillä ajettava tehtävä todentaa verkossa tietokoneen tilinä. Myönnä jaetun kansion ja NTFS-oikeudet kyseiselle tietokoneen tilille (tai Domain Controllers -ryhmälle) tai käytä omaa palvelutiliä.
  • Jos -RemoveSourceFile epäonnistuu muuten onnistuneen ajon lopussa, tilillä on lukuoikeus lokiin, mutta ei poisto-oikeutta.

Käsittely on hyvin hidasta

  1. Tarkista ensin levy — muunnos on I/O-sidonnainen. Kuormittunut levy tai hidas verkkopolku hallitsee suoritusaikaa.
  2. Käytä -NoDetailsParsing, jos et tarvitse pakettitason JSON-tietoja; yksityiskohtaisissa lokeissa tämä säästää 30–50 %.
  3. Käytä -ContextFilter Packet kirjoittamaan vähemmän.
  4. Pilko valtavat lokit DNS-palvelimen lokin kierrätyksellä sen sijaan, että muunnat yhtä jättimäistä tiedostoa.
  5. Harkitse virustorjunnan poissulkemista lokihakemistosta.

Lisää tietoa Suorituskyky.

Pakattu tulos on odotettua suurempi

Erittäin monipuolista sisältöä sisältävät lokit — paljon uniikkeja domaineja, monia eri asiakkaita — pakautuvat huonommin kuin toistuvat. Tämä on normaalia. ZIP saavuttaa yleensä merkittävän koon pienennyksen; jos ei, tarkista, paisuttaako Details-sarake tiedostoa ja tarvitsetko sitä lainkaan.

Tilastot eivät vastaa odotuksiani

  • Varmista, että käytit -OutputType Both tai -OutputType Statistic. -OutputType CSV ei kirjoita lainkaan tilastotiedostoja.
  • Count on kokonaismäärä, ei erillisten lukumäärä. Yksi asiakas, joka kysyy samaa nimeä 500 kertaa, lisää lukemaan 500. Tämä on yleisin syy “tuo luku ei voi olla oikea” -ongelmaan.
  • Tilastot ryhmitellään päivittäin. Kaksi päivää kattava loki tuottaa rivejä molemmille päiville.
  • Jos ComputerName on tyhjä tilastotiedostoissa, -ComputerName ei ollut asetettuna muunnoksen aikana.

Ajoitettu tehtävä toimii vuorovaikutteisesti mutta ei tehtävänä

Useimmiten kyseessä on jokin kolmesta:

  • Moduulia ei löydy. SYSTEM-tili ilman profiilia näkee vain konekohtaiset moduulipolut. Asenna moduuli konekohtaisesti tai lisää tehtävän toimintaan selkeä Import-Module DNSServer.DebugLogParser.
  • Väärä alueasetus. Tehtävän tilin alueasetus poikkeaa omastasi. Aseta -InputCulture ja -OutputCulture selkeästi.
  • Suorituspolitiikka tai allekirjoittamaton skripti. Vastaa tehtävän -ExecutionPolicy allekirjoituspolitiikkaasi ja poista estot muualta kopioiduilta tiedostoilta.

Suorita tehtävän tarkka komentorivi manuaalisesti samassa kontekstissa (esim. PsExecillä SYSTEM-tilillä) toistaaksesi ongelman.

Ongelman raportointi

Jos mikään ylläoleva ei auta:

  1. Päivitä moduuli uusimpaan versioon ja kokeile uudelleen.

  2. Etsi samaa oiretta GitHub-ongelmilistalta.

  3. Kerää diagnostiikka:

    $PSVersionTable
    Get-Module DNSServer.DebugLogParser -ListAvailable | Select-Object Name, Version, Path
    Get-Culture
    

    sekä tarkka käyttämäsi komento, koko virheilmoitus pinon jäljityksineen ja — jos voit jakaa — pieni anonymisoitu ote lokista, joka toistaa ongelman.

  4. Avaa uusi ongelma näillä tiedoilla.

8 - Moduulikomentojen viite

Täältä löydät viitteen moduulin kaikista komennoista. Tämä viite on suunniteltu auttamaan sinua löytämään nopeasti tarvitsemasi komento ja ymmärtämään, miten sitä käytetään tehokkaasti.

Klikkaamalla komentoa siirryt yksityiskohtaiselle sivulle, joka tarjoaa kattavat tiedot komennosta, mukaan lukien sen syntaksi, parametrit, esimerkit sekä mahdolliset lisähuomiot tai vinkit käytöstä.

8.1 - Convert-DNSDebugLogFile

YHTEENVETO

Muuttaa Windows DNS Serverin debug-lokit jäsenneltyyn CSV-muotoon analyysiä ja raportointia varten.

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]

ALIASET

Tällä cmdletillä on seuraavat alias-nimet,

KUVAUS

Muuttaa Windows DNS Serverin debug-lokitiedostot jäsennellyksi CSV-dataksi, jota voidaan analysoida Excelissä, Power BI:ssä, SQL-tietokannoissa tai SIEM-työkaluissa. Suunniteltu tietoturva-analyysiin, suorituskyvyn seurantaan, vianmääritykseen ja vaatimustenmukaisuusraportointiin.

Cmdlet jäsentää DNS-debug-lokit ja kirjoittaa yhdenmukaisen CSV-tulosteen analyysiä varten. CSV-tuloste sisältää 18 saraketta, mukaan lukien Information-sarake tapahtuma-/diagnostiikkatekstille, valinnaisen Details JSON-sarakkeen pakettien yksityiskohtaisille lohkoille sekä aina mukana olevan ComputerName-sarakkeen (tyhjä, ellei määritetty).

TÄRKEIMMÄT OMINAISUUDET:

  • Virtauskäsittely estää koko tiedoston lataamisen muistiin (sopii erittäin suurille lokeille)
  • Suorituskykyinen jäsentäminen optimoitu suurille tiedostoille (100 Mt+)
  • Mukautettava CSV-erotin (oletus: puolipiste)
  • Valinnaiset tilastoyhteenvedot koottujen mittareiden kanssa
  • Kontekstisuodatus (Packet, Event, Note ja muut kontekstit) keskittyäksesi tiettyihin lokimerkintöihin
  • Kulttuuritietoinen päivämäärän jäsentäminen ja muotoilu kansainvälisille palvelimille
  • Putkituen avulla useiden tiedostojen eräkäsittely
  • Valinnainen tulostiedostojen pakkaus (ZIP-muoto)
  • Valinnainen lähdetiedostojen automaattinen poisto käsittelyn jälkeen
  • Otsikkotarkistus tietojen eheyden varmistamiseksi

TULOSTEEN MUOTO: ComputerName-sarake sisältyy aina jokaisen tietueen loppuun. Jos -ComputerName-parametriä ei määritetä, sarake on tyhjä. Tämä varmistaa yhdenmukaisen tulosteen rakenteen monipalvelinyhdistelmätapauksissa.

SUORITUSKYKY: Optimoitu käyttämällä StreamReader/StreamWriter 64 kt:n puskureilla, virtauskäsittely muistiystävälliseen suurten tiedostojen käsittelyyn, merkkijonotoiminnot regexin sijaan, manuaalinen CSV:n generointi ja tehokas hajautustaulupohjainen tilastojen keruu.

YHTEENSOPIVUUS:

  • PowerShell 5.1+ (Desktop ja Core-versiot)
  • Windows Server 2016+
  • DNS Server 2012 R2 - 2025 lokimuodot

ESIMERKIT

ESIMERKKI 1

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"

Muuttaa DNS-debug-lokin oletusasetuksilla (sekä data- että tilastotiedostot puolipiste-erottimella). Tulosteet:

  • C:\Logs\dns.csv
  • C:\Logs\dns_Statistic.csv
  • C:\Logs\dns_PacketStatistic.csv

ESIMERKKI 2

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType CSV

Tuottaa vain datatiedoston ilman tilastoja. Tuloste: C:\Logs\dns.csv

ESIMERKKI 3

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType Statistic

Tuottaa vain tilastotiedostot koottujen mittareiden kanssa. Tulosteet:

  • C:\Logs\dns_Statistic.csv
  • C:\Logs\dns_PacketStatistic.csv

ESIMERKKI 4

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"

Muuttaa lokin mukautettuun tulostussijaintiin. Tuloste: C:\Output\parsed.csv

ESIMERKKI 5

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both

Muuttaa pilkulla erotettuna ja lisää ComputerName-sarakkeen arvolla “DNS01”. Tulosteet:

  • C:\Logs\dns.csv
  • C:\Logs\dns_Statistic.csv
  • C:\Logs\dns_PacketStatistic.csv

ESIMERKKI 6

PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -OutputType Both

Käsittelee useita DNS-debug-lokitiedostoja putken kautta erissä. Tuloste: Jokaiselle .log-tiedostolle luodaan .csv ja _statistic.csv tiedostot

ESIMERKKI 7

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput

Muuttaa ja pakkaa tulosteen ZIP-arkistoon. Tuloste: C:\Logs\dns.zip (sisältäen dns.csv + tilastotiedostot)

ESIMERKKI 8

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -RemoveSourceFile -Verbose

Muuttaa lokin ja poistaa lähdetiedoston onnistuneen käsittelyn jälkeen. Verbose-tuloste vahvistaa tiedoston poiston.

ESIMERKKI 9

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'

Jäsentää saksalaisen päivämäärämuodon (PP.KK.VVVV) ja tuottaa US-muodossa (KK/PP/VVVV). Käytä, kun käsittelet lokeja eri alueasetuksilla olevilta palvelimilta.

ESIMERKKI 10

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet'

Muuttaa vain DNS-kysely/vastauspakettien merkinnät, poissulkee EVENT- ja Note-merkinnät. Käytä keskittyäksesi varsinaiseen DNS-liikenteeseen.

ESIMERKKI 11

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet','Event'

Muuttaa sekä DNS-kysely/vastauspaketit että palvelintapahtumat, poissulkee Note- ja muut merkinnät. Käytä analysoidaksesi DNS-liikennettä yhdessä palvelintapahtumien kanssa.

ESIMERKKI 12

PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -RemoveSourceFile -CompressOutput

Automaattinen lokien arkistointi: käsittelee kaikki lokit, pakkaa tulosteen ja poistaa lähdetiedostot. Ihanteellinen ajoitettuihin lokikäsittelyputkiin.

ESIMERKKI 13

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\large-dns.log" -NoDetailsParsing

Käsittelee suuren lokitiedoston ilman yksityiskohtien jäsentämistä maksimaalisen suorituskyvyn saavuttamiseksi. PACKET-yksityiskohtalohkot ohitetaan, Details-sarake pysyy tyhjänä. Käytä, kun käsittelet erittäin suuria tiedostoja eikä yksityiskohtaista pakettirakenteen analyysiä tarvita.

PARAMETRIT

-CompressOutput

Pakkaa luodut CSV-tiedostot ZIP-arkistoksi käsittelyn jälkeen.

Luo .zip-tiedoston, joka sisältää luodut CSV-tiedostot, ja poistaa purkamattomat CSV:t. ZIP-tiedosto luodaan samaan hakemistoon kuin tulostettava CSV ja sillä on sama perusnimi.

Hyödyt:

  • Vähentää merkittävästi levytilan käyttöä (CSV-tiedostot pakkaantuvat yleensä yli 90 %)
  • Yksinkertaistaa tiedostojen hallintaa ja arkistointia
  • Sopii pitkäaikaiseen säilytykseen

Esimerkki: Syöte ‘dns.log’ tuottaa ‘dns.csv’, joka pakataan ‘dns.zip’ ja ‘dns.csv’ poistetaan.

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

Määrittää arvon ComputerName-sarakkeelle CSV-tulosteessa. ComputerName-sarake on aina mukana tulosteessa – jos tätä parametria ei määritetä, sarake on tyhjä.

Käytä tätä, kun yhdistät lokeja useilta DNS-palvelimilta lähdepalvelimen tunnistamiseksi yhdistetyissä aineistoissa.

Huom: Tämä EI ole etäkäyttöparametri. Se vain merkitsee tulosteen. Jos -InputFile osoittaa UNC-polkuun, tiedosto luetaan suoraan siitä polusta (ei suoriteta WinRM-etäkäyttöä).

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

Kysyy vahvistuksen ennen cmdletin suorittamista.

Jos määritetty, pyytää vahvistusta ennen:

  • Jokaisen DNS-debug-lokitiedoston käsittelyä
  • Lähdetiedostojen poistamista (kun -RemoveSourceFile on määritetty)
  • Olemassa olevien tulostiedostojen ylikirjoittamista

Hyödyllinen vuorovaikutteisessa käsittelyssä, kun haluat hallita, mitkä tiedostot käsitellään.

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

Suodattaa, mitkä lokimerkintätyypit sisällytetään tulosteeseen. Hyväksyy yhden tai useamman arvon.

DNS-debug-lokit sisältävät eri kontekstit:

  • PACKET: DNS-kysely- ja vastauspakettitiedot (ensisijainen data)
  • EVENT: DNS-palvelimen tapahtumat (esim. “DNS-palvelin on käynnistynyt.”)
  • Note: Diagnostiikka- ja varoitusmerkinnät (esim. soketti-virheet, sisäiset tilat)
  • DSPoll, Init, Lookup, Recurse, Remote, Tombstone: Lisäkontekstit

Sallitut arvot:

  • ‘All’: Sisällytä kaikki kontekstit (oletus)
  • ‘Packet’: Sisällytä vain PACKET-merkinnät (DNS-kyselyt/vastaukset)
  • ‘Event’: Sisällytä vain EVENT-merkinnät (palvelintapahtumat)
  • ‘Note’: Sisällytä vain Note-merkinnät (diagnostiikkatiedot)
  • Mikä tahansa yhdistelmä: Määritä useita arvoja sisällyttääksesi tietyt kontekstit

Oletus: All

Esimerkit:

  • ‘Packet’ suodattaa vain DNS-liikenteen
  • ‘Packet’,‘Event’ sisältää sekä DNS-liikenteen että palvelintapahtumat
  • ‘Note’,‘Event’ sisältää diagnostiikkamuistiinpanot ja palvelintapahtumat

Huom: Kun suodatetaan ‘Event’ tai ‘Note’, vain DateTime, ThreadId, Context ja Information -sarakkeet sisältävät tietoa. Muut sarakkeet (Protocol, ClientIP jne.) ovat tyhjiä.

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

Määrittää CSV-tulosteen erottimen merkin.

Oletus: puolipiste (;)

Yleisiä vaihtoehtoja: pilkku (,), sarkain (`t), putki (|)

Käytä puolipistettä alueilla, joissa pilkku on desimaalierotin (Eurooppa). Käytä pilkkua standardeissa CSV-työkaluissa ja tietokannoissa, jotka odottavat pilkuilla erotettuja arvoja.

Type: String
DefaultValue: ;
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 2
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-InputCulture

Määrittää kulttuurin/alueen, jota käytetään päivämäärä-/aikamuotojen jäsentämiseen DNS-debug-lokissa.

DNS Serverin debug-lokit käyttävät Windowsin palvelimen paikallisen asetuksen päivämäärämuotoa, jossa loki on luotu. Käytä tätä parametria, kun käsittelet lokeja eri alueasetuksilla olevilta palvelimilta.

Oletus: Nykyinen kulttuuri

Yleisiä esimerkkejä:

  • ‘de-DE’ tai ‘de-AT’: Saksan muoto (PP.KK.VVVV tai PP/KK/VVVV)
  • ’en-US’: Yhdysvaltain muoto (KK/PP/VVVV AM/PM)
  • ’en-GB’: Britannian muoto (PP/KK/VVVV 24h)
  • ‘sv-SE’: Ruotsalainen/ISO-muoto (VVVV-KK-PP)
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

Määrittää polun jäsennettävään DNS-debug-lokitiedostoon. Tukee taulukoita useiden tiedostojen käsittelyyn.

Hyväksyy putkisyötteen Get-ChildItemiltä tai muilta tiedostoa tuottavilta cmdleteiltä.

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

Ohittaa PACKET-yksityiskohtalohkojen jäsentämisen jäsennellyksi JSON-muodoksi.

Jos määritetty, PACKET-tietueet, joissa on yksityiskohtalohkoja, sisältävät TCP/UDP-tietorivin Information-sarakkeessa, mutta Details-sarake pysyy tyhjänä. Tämä parantaa merkittävästi suorituskykyä suurten lokitiedostojen käsittelyssä, kun yksityiskohtainen pakettirakenteen analyysi ei ole tarpeen.

Käytä tätä, kun:

  • Käsittelet erittäin suuria lokitiedostoja (100 Mt+) ja tarvitset vain peruskyselytiedot
  • Yksityiskohtainen rakenne (viestilippuja, DNS-osioita) ei ole tarpeen analyysissä
  • Suorituskyvyn maksimointi on tärkeämpää kuin täydellisyys

Suorituskykyvaikutus: voi parantaa käsittelynopeutta 30-50 % lokeissa, joissa on paljon PACKET-yksityiskohtalohkoja.

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

Määrittää kulttuurin/alueen, jota käytetään päivämäärä-/aikamuotojen muotoiluun tulostettavissa CSV-tiedostoissa.

Ohjaa, miten DateTime-arvot kirjoitetaan CSV:hen. Käytä tätä, kun CSV-tiedostot kulutetaan sovelluksissa tai järjestelmissä, joilla on tietyt alueasetukset.

Oletus: Nykyinen kulttuuri

Yleisiä esimerkkejä:

  • ’en-US’: Yhdysvaltain muoto (KK/PP/VVVV)
  • ‘de-DE’: Saksan muoto (PP.KK.VVVV)
  • ‘sv-SE’ tai InvariantCulture: ISO-muoto (VVVV-KK-PP) maksimaaliseen yhteensopivuuteen
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

Määrittää polun tulostettavalle CSV-tiedostolle. Jos ei määritetä, käytetään syötetiedoston nimeä .csv-päätteellä samassa hakemistossa kuin syötteellä.

Tärkeää: Täytyy olla tiedostopolku, ei hakemisto. Jos haluat käyttää syötetiedoston hakemistoa mukautetulla nimellä, määritä koko polku tiedostonimen kanssa.

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

Määrittää tuotettavan tulosteen tyypin.

Sallitut arvot:

  • ‘CSV’: Tuottaa vain datatiedoston kaikilla jäsennetyillä lokimerkinnöillä
  • ‘Statistic’: Tuottaa vain tilastotiedostot koottujen mittareiden kanssa
  • ‘Both’: Tuottaa sekä data- että tilastotiedostot (oletus)

Oletus: Both

Kun tilastot tuotetaan, luodaan kaksi erillistä tiedostoa:

  • ‘_Statistic.csv’: Yhteenvedot kontekstityypeittäin päivittäin (Päivämäärä, Konteksti, Määrä, ComputerName)
  • ‘_PacketStatistic.csv’: Yksityiskohtaiset PACKET-laskelmat päivittäin asiakas-IP:n, protokollan, suunnan ja kyselytyypin mukaan (Päivämäärä, ClientIP, Protokolla, Suunta, Kyselytyyppi, Määrä, ComputerName)
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

Poistaa lähde-DNS-debug-lokitiedoston onnistuneen käsittelyn jälkeen.

Käytä tätä automatisoiduissa lokikäsittelyputkissa tai levytilan hallinnassa. Lähdetiedosto poistetaan vain, jos käsittely onnistuu ja kaikki tulostiedostot luodaan.

Turvallisuus: Ei voi käyttää yhdessä -SkipHeaderValidation-parametrin kanssa estääkseen virheellisten tiedostojen vahingossa tapahtuvan poistamisen.

Varoitus: Lähdetiedostot poistetaan pysyvästi. Varmista, että tulostiedostot ovat kelvollisia ennen tämän vaihtoehdon käyttöä.

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

Ohittaa DNS-debug-lokin otsikkotarkistuksen.

Oletuksena cmdlet tarkistaa, että syötetiedostossa on kelvollinen DNS Server debug -lokin otsikko. Käytä tätä kytkintä käsitelläksesi tiedostoja ilman tarkistusta, mikä voi olla hyödyllistä:

  • Muokatuissa tai mukautetuissa lokimuodoissa
  • Vianmäärityksessä tarkistusongelmissa
  • Ei-standardeissa tai esikäsitellyissä lokeissa

Varoitus: Voi johtaa käsittelyvirheisiin, jos tiedosto ei ole kelvollinen DNS-loki.

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

Näyttää, mitä tapahtuisi, jos cmdlet suoritettaisiin. Cmdletiä ei suoriteta.

Jos määritetty, näyttää yksityiskohtaiset tiedot toiminnoista, jotka suoritettaisiin ilman, että niitä oikeasti suoritetaan. Hyödyllinen:

  • Ennakkotarkastukseen, mitkä tiedostot käsiteltäisiin
  • Tulostiedostopolkujen tarkistamiseen ennen käsittelyä
  • Skriptien testaamiseen ennen tuotantokäyttöä
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

Tämä cmdlet tukee yleisiä parametreja: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ja -WarningVariable. Lisätietoja on kohdassa about_CommonParameters.

SYÖTTEET

System.String[]

HUOMAUTUKSET

Versio : 1.7.2.1
Tekijä : Andi Bellstedt, Copilot, Patrick Charbonnier (Silent Waters IT Consulting S.L.)
Päiväys : 2026-07-24
Avainsanat : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser

LIITTYVÄT LINKIT

9 - Käyttöesimerkit

Täältä löydät käytännön esimerkkejä siitä, miten moduulia voi käyttää oikeissa tilanteissa. Nämä esimerkit on suunniteltu auttamaan sinua ymmärtämään, miten moduulin toiminnallisuutta sovelletaan.

Nämä ovat esimerkkejä, joissa on hieman enemmän syvyyttä ja kontekstia. Jos haluat vain moduulin komentojen käytön, katso komentoviite.

9.1 - Ajoitetun tehtävän esimerkki

Tämä esimerkki näyttää, miten luodaan Windowsin ajoitettu tehtävä, joka suorittaa PowerShell-skriptin DNS-vianmäärityslokien käsittelemiseksi päivittäin.

Tämä skripti luo Windowsin ajoitetun tehtävän, joka suoritetaan päivittäin klo 2:00. Se tuo moduulin ja käsittelee kaikki lokitiedostot kansiossa, jossa skripti suoritetaan (tässä esimerkissä “C:\Administration\Logs\DNS”). Prosessi pakkaa tuloksen ZIP-tiedostoiksi ja poistaa alkuperäiset tiedostot siisteyden ylläpitämiseksi.

$actionParams = @{
    Execute = "powershell.exe"
    Argument = '-ExecutionPolicy RemoteSigned -Command "Import-Module DNSServer.DebugLogParser; Get-ChildItem .\*.log | Sort-Object lastwritetime, Name -Descending | Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME -Delimiter \";\" -OutputType Both -ContextFilter Packet -OutputCulture sv-SE -CompressOutput"'
    WorkingDirectory = "C:\Administration\Logs\DNS"
}
$Action = New-ScheduledTaskAction @actionParams

$Trigger = New-ScheduledTaskTrigger -Daily -At "2:00AM"

Register-ScheduledTask -TaskName "Process DNS Logs" -Action $Action -Trigger $Trigger -Description "Convert DNS debug logs to CSV daily"

9.2 - Käytännön käyttö toimialueympäristössä (GPO-ohjattu kokoelma ja muunnos)

Tämä esimerkki näyttää, miten toteuttaa GPO-ohjattu työnkulku DNS-vianmäärityslokien keräämiseen ja muuntamiseen toimialueen ohjaimilla.

Tässä dokumentissa esitellään käytännön, päästä päähän -esimerkki DNSServer.DebugLogParserin ajamisesta Active Directory -toimialueympäristössä, keskittyen Windows DNS Serverin vianmäärityslokien muuntamiseen toimialueen ohjaimilla.

Tämän esimerkin mukana on ZIP-arkisto, joka sisältää politiikka-artifaktit työnkulun toteuttamiseen.
Merkittävimmät artifaktit ovat varmuuskopion manifesti, GPO-raportti, Files.xml, Set-DNSServerDebugLogging.ps1 ja ScheduledTasks.xml.

Tilannekuvaus

  • Useat toimialueen ohjaimet (DC) isännöivät DNS-palvelinroolia.
  • DNS-vianmääritysloki on otettu käyttöön ja konfiguroitu johdonmukaisesti jokaisella DC:llä ajastetun tehtävän avulla (lokitiedostot tallennetaan polkuun C:\Administration\Logs\DNSServer).
  • Keskitetysti hallittu prosessi muuntaa lokit CSV-muotoon seuraaviin tarkoituksiin:
    • tietoturva-analytiikka
    • operatiivinen raportointi
    • vianetsintä
    • vaatimustenmukaisuus ja säilytys

Tavoitteet

  • Johdonmukaiset muunnosasetukset kaikilla DC:illä
  • Ennustettava tulostuspaikka ja nimeäminen
  • Valinnainen pakkaus tallennustilan säästämiseksi
  • Valinnaiset tilastotulosteet nopeisiin päivittäisiin yhteenvedonäkymiin
  • Minimiriskit isäntäpuolella, selkeät uudelleenkäynnistys- ja siivouskäytännöt

Suositeltu arkkitehtuuri

Keräysmalli: paikallinen muunnos + keskitetty haku

  1. Jokainen DC kirjoittaa DNS-vianmäärityslokit levylle rollover-ominaisuus päällä.
  2. Jokainen DC muuntaa kiertävät *.log-tiedostot data-CSV:ksi ja tilastotiedostoiksi, ja pakkaa tulokset *.zip-muotoon ajastetusti (Task Scheduler).
  3. Tulosteet kirjoitetaan lokitiedostojen viereen, jotta putki pysyy yksinkertaisena.
  4. Keskitetty palvelin kerää *.zip-tulosteet esimerkiksi tiedostojakojen kautta, ajastetulla kopioinnilla, SIEM-välityksellä tai agenttipohjaisella kerääjällä.

Tämä malli minimoi suurten raakalukujen verkon lukemisen ja pitää jäsentämisen lähellä dataa.

GPO-työnkulku

Työnkulku toteutetaan ryhmäkäytännön (Group Policy, tietokoneen asetukset) avulla, jotta asetukset ovat yhdenmukaiset kaikilla toimialueen ohjaimilla.

Tämän repositorion mukana tulee viiteimplementaatio (GPO-raportti):

  • Arkisto-/raporttinimi: T0-C-Analytics-DNSDebugLogging
  • Varmuuskopion tunniste: {2B6F16BC-0E7C-4787-83D7-2854FED882EE}
  • GPO-linkin kohde: corp.company.com/Domain Controllers
  • Kohdesuodatin (käytetään sekä tiedostojen käyttöönotossa että ajastetuissa tehtävissä): soveltuu vain, jos C:\Windows\System32\dns.exe on olemassa

1) Esivaatimukset (kansiot + moduuli)

Toimitettu varmuuskopio olettaa, että seuraavat kansiot ovat jo olemassa. Lisää erilliset GPP-kohteet, jos haluat, että käyttöönotto luo ne automaattisesti:

  • C:\Administration\Scripts
  • C:\Administration\Logs\DNSServer

Varmuuskopio olettaa myös, että Convert-DNSDebugLogFile on jo saatavilla DC:illä. Muunnostyö käynnistää Windows PowerShell 5.1:n -NoProfile-asetuksella eikä tuo moduulia eksplisiittisesti, joten moduulin on oltava asennettuna konekohtaisessa Windows PowerShell -moduulipolussa, joka on näkyvissä LocalSystem-tilille. Suositellut tavat:

  • Asenna DNSServer.DebugLogParser DC:ille, esimerkiksi PowerShell Gallerysta (jos politiikka sallii).
  • Ota moduuli käyttöön sisäisen repositorion tai tiedostojakopalvelimen kautta, jotta se löytyy $env:PSModulePath-polusta.
  • Lisää eksplisiittinen Import-Module tehtävän toimintaan, jos haluat varmistaa latauksen deterministisesti.

2) Ota käyttöön vianmäärityslokin konfigurointiskripti (GPP Files)

GPO ottaa käyttöön skriptin:

  • Lähde (SYSVOLin kautta GPP): %GptPath%\Preferences\Files\Set-DNSServerDebugLogging.ps1
  • Kohde (jokaisella DC:llä): C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1

Tämä on toteutettu GPP Files -asetuskohteena Files.xml-tiedostossa.

3) Ajastettu tehtävä: konfiguroi DNS-vianmääritysloki

GPO luo ajastetun tehtävän nimeltä Set-DNSServerDebugLogging.

  • Turvakonteksti toimitetussa varmuuskopiossa: SYSTEM kirjautumistyyppi S4U
  • Laukaisin toimitetussa varmuuskopiossa: päivittäin (aloitusraja 2025-03-01T00:00:01)
  • Toiminto ScheduledTasks.xml-tiedostossa:
    • powershell.exe -ExecutionPolicy RemoteSigned -command " & { C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1 }"
    • Työhakemisto: C:\Administration\Scripts

Linkitetty Set-DNSServerDebugLogging.ps1-skripti konfiguroi DNS-vianmäärityslokin komentoja Get-DnsServerDiagnostics / Set-DnsServerDiagnostics käyttäen ja erityisesti:

  • Ottaa käyttöön lokituksen tiedostoon + rolloverin
  • Kirjoittaa tiedostoon: C:\Administration\Logs\DNSServer\DnsDebugLog_<COMPUTERNAME>.<Domain>_.log
  • Käyttää 10 Mt:n rollover-kokoa per tiedosto
  • Tallentaa pääasiassa kyselyihin liittyvää toimintaa (kyselyt + ilmoitukset + päivitykset + kyselytapahtumat) ja sulkee pois täydellisen pakettitason lokituksen

4) Ajastettu tehtävä: muunna kiertävät vianmäärityslokit pakatuiksi CSV-tiedostoiksi

GPO luo ajastetun tehtävän nimeltä Convert-DNSDebugLogs.

  • Turvakonteksti toimitetussa varmuuskopiossa: SYSTEM kirjautumistyyppi InteractiveToken
  • Laukaisin toimitetussa varmuuskopiossa: päivittäin (aloitusraja 2026-01-01T00:30:00)
  • Työhakemisto: C:\Administration\Logs\DNSServer
  • Toiminto ScheduledTasks.xml-tiedostossa (muotoiltu luettavuuden vuoksi):
Get-ChildItem .\*.log |
  Sort-Object lastwritetime, Name -Descending |
  Select-Object -Skip 1 |
  Convert-DNSDebugLogFile `
    -ComputerName $env:COMPUTERNAME `
    -Delimiter ';' `
    -OutputType Both `
    -ContextFilter Packet `
    -OutputCulture sv-SE `
    -CompressOutput

Suunnittelumuistiinpanot:

  • Select-Object -Skip 1 jättää tietoisesti käsittelemättä uusimman (aktiivisen) lokitiedoston. Convert-DNSDebugLogFile pystyy lukemaan lokin, jonka DNS Server on tällä hetkellä auki, mutta tiedosto muuttuu lukemisen aikana: tuloste voi jäädä puutteelliseksi tai päättyä katkaistuun tietueeseen, ja kaksi ajoa eivät tuota identtisiä tuloksia. Aktiivisen tiedoston ohittaminen pitää ajastetun tulosteen toistettavana.
  • Tämä tarkoittaa, että nykyiset tiedot viedään vain rolloverin jälkeen; pienemmällä kuormituksella DC:llä aktiivinen loki voi jäädä käsittelemättä yli päivän. Pienennä rollover-kokoa, jos viive on liian pitkä käyttötapaukseesi.
  • Koska Convert-DNSDebugLogFile käyttää oletuksena -OutputFile-asetusta “sama kansio, sama nimi, .csv”, tulosteet sijoittuvat *.log-tiedostojen viereen.
  • -CompressOutput-asetuksella jokainen käsitelty loki tuottaa *.zip-tiedoston ja väliaikaiset CSV:t poistetaan.
  • Ellet arkistoi tai poista käsiteltyjä *.log-tiedostoja, myöhemmät ajot käsittelevät kaikki ei-aktiiviset lokit uudelleen.
  • Tehtävä heittää virheen, jos $Error.Count -gt 0, merkiksi epäonnistuneesta ajosta.

5) Keskitetty keräys

Vaihtoehdot (valitse yksi):

  • Tiedostojakojen keräys: DC kirjoittaa (tai kopioi) C:\Administration\Logs\DNSServer\*.zip polkuun \\fileserver\share\dns\$env:COMPUTERNAME\... (myönnä jakamisoikeudet ja NTFS-oikeudet DC:n tietokoneen tileille tai Domain Controllers -ryhmälle, jos tehtävä ajetaan SYSTEM-tilillä)
  • Haku-malli: keskitetty työ lukee \\dc\C$\Administration\Logs\DNSServer\*.zip (vähiten suositeltu; vaatii hallintajakamiset)
  • Agentin välitys: SIEM- tai lokiputki, joka lähettää *.zip-tulosteet

Käyttöön liittyvät huomioitavat asiat

  • Vähimmän oikeuden periaate: tehtävät ajetaan SYSTEM-tilillä; varmista, että paikalliset kansiot ovat kirjoitettavissa ja että UNC-kohteet myöntävät pääsyn tietokoneen tilille, jos niitä käytetään.
  • Allekirjoituspolitiikka: molemmat tehtävät käyttävät -ExecutionPolicy RemoteSigned; allekirjoita tai poista estot käyttöön otetusta skriptistä ja moduulista politiikkasi mukaisesti.
  • Levyn käyttö: -CompressOutput auttaa merkittävästi, mutta tämä työnkulku ei poista lähdelokeja; suunnittele säilytys ja siivous.
  • Uudelleenkäsittely: ellet arkistoi tai poista käsiteltyjä lokitiedostoja, muunnostyö käsittelee kaikki ei-aktiiviset *.log-tiedostot uudelleen myöhemmillä ajoilla. Tämä on yksinkertaista ja luotettavaa, mutta voi ylikirjoittaa tulosteita ja aiheuttaa kaksoiskeräystä, jos kerääjä ei poista duplikaatteja.
  • Usean DC:n yhdistäminen: -ComputerName $env:COMPUTERNAME sisältyy, jotta yhdistetyt aineistot pysyvät jäljitettävinä. Huomaa, että -ComputerName vain merkitsee tulosteen — se ei tee etäyhteyttä.
  • Verkkotiedostojako: Convert-DNSDebugLogFile pystyy lukemaan lähdelokit SMB/UNC-poluilta, mutta paikallinen muunnos ja pakattujen tulosten lähetys on parempi malli suurille raakalukuille. Jos käytät UNC-polkuja, muista, että SYSTEM-tilillä ajettava tehtävä todentaa verkossa tietokoneen tilinä ja tarvitsee jakamis- ja NTFS-oikeudet.
  • Päivämäärämuoto: -OutputCulture sv-SE on valittu tarkoituksella, jotta aikaleimat kirjoitetaan muodossa 2026-01-20 23:00:16. Tämä muoto tunnistetaan ilman vihjettä SQL Serverissä, Power BI:ssä ja useimmissa tuontityökaluissa, riippumatta DC:n paikallisesta asetuksesta.
  • Validointi: otsikkotarkistus on päällä, koska tehtävä ei käytä -SkipHeaderValidation-asetusta (suositeltavaa).

Varmista ja mukauta (ZIP:n avulla)

Käytä ZIP-arkistoa viiteimplementaationa ja sovita seuraavat asiat ympäristöösi:

  • Kohdealue: mitkä DC:t / OU:t saavat politiikan
  • Suoritusidentiteetti: varmista, että molemmat ajastetut tehtävät käyttävät haluttua kirjautumistyyppiä (S4U vs InteractiveToken) tai yhdenmukaista ne standardiisi
  • Kansioiden luonti: päätä, luodaanko C:\Administration\Scripts ja C:\Administration\Logs\DNSServer etukäteen muualla vai GPP-kohteilla
  • Polut: varmista, että C:\Administration\Scripts ja C:\Administration\Logs\DNSServer vastaavat standardeja
  • Säilytys: päätä, säilytetäänkö raakalokitus ja kuinka pitkään (erityisesti, jos siivousvaihtoehdot otetaan käyttöön)
  • Keräys: varmista, mihin CSV/ZIP-tulosteet kirjoitetaan ja miten ne kerätään keskitetysti

Jos haluat tarkistaa tarkan GPO-konfiguraation ilman tuontia, tämän repositorion auktoritatiiviset lähteet ovat:

9.3 - SQL Server -tietokannan turvallisuusanalyysityönkulku

Muunna DNS-vianmäärityslokit CSV-muotoon DNSServer.DebugLogParserilla, tuo tulos SQL Serveriin ja suorita yksinkertainen havaitsemiskysely epäilyttävälle TXT-tietueiden toiminnalle.

Tässä esimerkissä näytetään käytännön työnkulku turvallisuusanalytiikkaan: jäsennä DNS-vianmääritysloki Convert-DNSDebugLogFile-komennolla, tuo luotu CSV SQL Serveriin ja suorita kysely, joka korostaa epätavallisen suuria TXT-tietueiden hakumääriä.

Parhaan yhteensopivuuden varmistamiseksi tämä esimerkki kirjoittaa aikaleimat ISO-tyyppisessä muodossa käyttämällä -OutputCulture 'sv-SE'.

Tarvittavat moduulit

Tämä esimerkki käyttää seuraavia PowerShell-moduuleja:

  • DNSServer.DebugLogParser
  • SqlServer

Asenna ne tarvittaessa:

Install-Module -Name DNSServer.DebugLogParser -Scope CurrentUser
Install-Module -Name SqlServer -Scope CurrentUser

Tilanne

Käytä tätä työnkulkua, kun haluat siirtää jäsenneltyjä DNS-vianmäärityslokitietoja SQL Serveriin, jotta voit:

  • hakea suuria tietoaineistoja tehokkaasti
  • rakentaa toistettavia havaitsemiskyselyjä
  • korreloida toimintaa useiden DNS-palvelimien välillä
  • säilyttää normalisoidut tiedot myöhempää tutkimusta varten

Muunnosvaiheen tulos

Convert-DNSDebugLogFile ei kirjoita suoraan SQL Serveriin. Se luo ensin CSV-tiedoston. Tämä CSV-tiedosto on tietoaineisto, joka tuodaan tietokantaan.

Tässä esimerkissä:

  • syöttöloki: C:\Administration\Logs\DNS\dns.log
  • luotu CSV: C:\Administration\Logs\DNS\dns.csv
  • kohdetaulu: dbo.DNSQueries

Luo kohdetietokanta

Suorita seuraava lause SQL Serverissä kerran luodaksesi kohdetietokannan.

IF OBJECT_ID('dbo.DNSQueries', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.DNSQueries (
        DateTime      datetime2(0)   NOT NULL,
        ThreadId      int            NULL,
        Context       nvarchar(20)   NULL,
        PacketId      int            NULL,
        Protocol      nvarchar(10)   NULL,
        Direction     nvarchar(10)   NULL,
        ClientIP      nvarchar(64)   NULL,
        Xid           nvarchar(16)   NULL,
        Type          nvarchar(16)   NULL,
        Opcode        nvarchar(16)   NULL,
        FlagsHex      nvarchar(16)   NULL,
        FlagsChar     nvarchar(16)   NULL,
        ResponseCode  nvarchar(32)   NULL,
        QuestionType  nvarchar(32)   NULL,
        QuestionName  nvarchar(512)  NULL,
        Information   nvarchar(max)  NULL,
        Details       nvarchar(max)  NULL,
        ComputerName  nvarchar(256)  NULL
    );
END;

Muunna loki ja tuo CSV

Seuraava PowerShell-esimerkki suorittaa koko työnkulun:

  1. tuo tarvittavat moduulit
  2. muuntaa DNS-vianmäärityslokin CSV-muotoon
  3. lataa luodun CSV:n
  4. tuo rivit eräajona SQL Serveriin
# Requires -Modules DNSServer.DebugLogParser, SqlServer

Import-Module -Name DNSServer.DebugLogParser -ErrorAction Stop
Import-Module -Name SqlServer -ErrorAction Stop

$logPath = 'C:\Administration\Logs\DNS\dns.log'
$csvPath = 'C:\Administration\Logs\DNS\dns.csv'
$serverInstance = 'SQLServer'
$databaseName = 'DNSLogs'
$delimiter = ';'

$createTableSql = @'
IF OBJECT_ID('dbo.DNSQueries', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.DNSQueries (
        DateTime      datetime2(0)   NOT NULL,
        ThreadId      int            NULL,
        Context       nvarchar(20)   NULL,
        PacketId      int            NULL,
        Protocol      nvarchar(10)   NULL,
        Direction     nvarchar(10)   NULL,
        ClientIP      nvarchar(64)   NULL,
        Xid           nvarchar(16)   NULL,
        Type          nvarchar(16)   NULL,
        Opcode        nvarchar(16)   NULL,
        FlagsHex      nvarchar(16)   NULL,
        FlagsChar     nvarchar(16)   NULL,
        ResponseCode  nvarchar(32)   NULL,
        QuestionType  nvarchar(32)   NULL,
        QuestionName  nvarchar(512)  NULL,
        Information   nvarchar(max)  NULL,
        Details       nvarchar(max)  NULL,
        ComputerName  nvarchar(256)  NULL
    );
END
'@

Convert-DNSDebugLogFile `
    -InputFile $logPath `
    -ComputerName 'DNS01' `
    -OutputType CSV `
    -OutputFile $csvPath `
    -Delimiter $delimiter `
    -OutputCulture 'sv-SE'

$rows = Import-Csv -Path $csvPath -Delimiter $delimiter

if (-not $rows) {
    throw "The generated CSV file '$csvPath' does not contain any rows."
}

$dataTable = [System.Data.DataTable]::new()
foreach ($columnName in $rows[0].PSObject.Properties.Name) {
    $null = $dataTable.Columns.Add($columnName, [string])
}

foreach ($row in $rows) {
    $dataRow = $dataTable.NewRow()
    foreach ($column in $dataTable.Columns) {
        $columnName = $column.ColumnName
        $dataRow[$columnName] = $row.$columnName
    }

    $null = $dataTable.Rows.Add($dataRow)
}

$connectionString = "Server=$serverInstance;Database=$databaseName;Integrated Security=True"
$connection = [System.Data.SqlClient.SqlConnection]::new($connectionString)

try {
    $connection.Open()

    $command = $connection.CreateCommand()
    $command.CommandText = $createTableSql
    $null = $command.ExecuteNonQuery()

    $bulkCopy = [System.Data.SqlClient.SqlBulkCopy]::new($connection)
    $bulkCopy.DestinationTableName = 'dbo.DNSQueries'

    foreach ($column in $dataTable.Columns) {
        $null = $bulkCopy.ColumnMappings.Add($column.ColumnName, $column.ColumnName)
    }

    $bulkCopy.WriteToServer($dataTable)
}
finally {
    $connection.Dispose()
}

Kysely epäilyttävälle TXT-tietueiden toiminnalle

Kun tiedot ovat SQL Serverissä, voit hakea asiakkaita, jotka tekevät epätavallisen suuren määrän TXT-tietuehakukyselyjä.

SELECT
    ComputerName,
    ClientIP,
    QuestionName,
    COUNT(*) AS QueryCount
FROM dbo.DNSQueries
WHERE QuestionType = 'TXT'
GROUP BY
    ComputerName,
    ClientIP,
    QuestionName
HAVING COUNT(*) > 100
ORDER BY QueryCount DESC;

Jos haluat suorittaa kyselyn PowerShellistä, käytä Invoke-Sqlcmd-komentoa SqlServer-moduulista:

$query = @'
SELECT
    ComputerName,
    ClientIP,
    QuestionName,
    COUNT(*) AS QueryCount
FROM dbo.DNSQueries
WHERE QuestionType = 'TXT'
GROUP BY
    ComputerName,
    ClientIP,
    QuestionName
HAVING COUNT(*) > 100
ORDER BY QueryCount DESC;
'@

Invoke-Sqlcmd `
    -ServerInstance 'SQLServer' `
    -Database 'DNSLogs' `
    -Query $query

Miksi TXT-kyselyt ovat kiinnostavia

TXT-tietueiden hakujen suuri määrä voi olla tarkastelun arvoista, koska se voi viitata:

  • DNS-tunnelointiin
  • tietojen ulosvuotoon DNS:n kautta
  • TXT-tietueiden väärinkäyttöön haittaohjelmien tai työkalujen toimesta
  • epätavallisen meluisiin tai virheellisesti konfiguroituihin asiakkaisiin

Tämä kysely on vain lähtökohta. Tuotantoympäristössä sinun tulisi säätää kynnysarvoa ja lisätä suodattimia, jotka sopivat omaan ympäristöösi.

Käyttöhuomautuksia

  • Import-Csv lukee koko tiedoston muistiin. Erittäin suurten lokitiedostojen kanssa kannattaa harkita virtaavaa käsittelyä täyden DataTablen rakentamisen sijaan.
  • Säilytä -ComputerName muunnosvaiheessa, jotta tietueet voidaan edelleen yhdistää lähteeseen keskitetyn tuonnin jälkeen.
  • Käytä yhtenäistä erotinta ja kulttuuria vienti- ja tuontivaiheissa.
  • Varmista säilytys, indeksointi ja käyttöoikeudet SQL Serverissä ennen tämän työnkulun käyttämistä pitkäaikaiseen tallennukseen.