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
Uusi moduulissa? Aloita Yleiskatsauksesta.
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:
| Ominaisuus | Kuvaus |
|---|
| Johdonmukainen CSV-rakenne | 18 saraketta, sama järjestys joka kerta, riippumatta siitä, mitä konteksteja lokissa esiintyy |
| Moniriviset merkinnät | PACKET-yksityiskohtablokit ja tapahtumatekstit pysyvät kiinni omassa merkinnässään |
| DNS Server -versiot | 2012 R2:sta vuoteen 2025 lokimuodot |
| PowerShell-versiot | Windows PowerShell 5.1+ ja PowerShell 7.x |
| Tiedostokoko | Testattu yli 100 Mt lokit; yksinkertainen suoratoisto |
| Otsikon validointi | Hylkää tiedostot, jotka eivät ole DNS-debug-lokeja (voi kytkeä pois) |
| Tilastot | Valinnaiset päivittäiset yhteenvedot, kontekstin ja asiakkaan/protokollan/tyypin mukaan |
| Putkituen | Get-ChildItem *.log | Convert-DNSDebugLogFile |
| Pakkaus | Valinnainen ZIP-tulos, tyypillisesti yli 90 % pienempi |
| Lähteen siivous | Valinnainen lokitiedoston poisto onnistuneen ajon jälkeen |
| Kansainväliset lokit | Jäsentää ja kirjoittaa päivämääriä kulttuurin mukaan, joten de-DE-loki voidaan lukea en-US-työasemalla |
| Verkkopolut | Lukee lähteitä SMB/UNC-polkujen kautta |
| Lukitut tiedostot | Lukee lokeja, joita DNS Server (tai joku muu) on parhaillaan avannut |
Aktiivinen loki vs. kierrätetty loki
Lue aktiivisia lokitiedostoja varoen
Moduuli voi lukea lokitiedoston, johon DNS Server kirjoittaa juuri nyt. Tämä on kätevää nopeaan katsaukseen, mutta tiedosto muuttuu koko muunnoksen ajan. Tuloksesta voi puuttua uusimmat merkinnät tai se voi päättyä katkenneeseen merkintään.
Kaikessa aikataulutetussa tai tuotantoon liittyvässä käytössä muunna sen sijaan kierrätetyt, suljetut lokitiedostot, äläkä koskaan yhdistä aktiivista lokia -RemoveSourceFile-parametrin kanssa.
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:
| Tiedosto | Sisältää | Luodaan kun |
|---|
<name>.csv | Yksi rivi jäsentynyttä lokimerkintää kohden | -OutputType CSV tai Both |
<name>_Statistic.csv | Päivittäinen merkintämäärä kontekstin mukaan | -OutputType Statistic tai Both |
<name>_PacketStatistic.csv | Pä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:
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ä:
| # | Sarake | Merkitys | Tyypillinen käyttö |
|---|
| 1 | DateTime | Merkinnän aikaleima | Aikasuodatus, yhdistäminen muihin lokitiedostoihin |
| 2 | ThreadId | DNS-palvelimen työsäie | Harvoin tarpeen; hyödyllinen palvelimen sisäisten ongelmien yhdistämisessä |
| 3 | Context | Merkinnän tyyppi: Packet, Event, Note, DSPoll, Init, Lookup, Recurse, Remote, Tombstone | Ensimmäinen suodatin — Packet on varsinainen DNS-liikenne |
| 4 | PacketId | Sisäinen pakettitunniste | Kyselyn ja vastauksen parittaminen |
| 5 | Protocol | UDP tai TCP | TCP-piikit voivat viitata suuriin vastauksiin tai vyöhyke-siirtoihin |
| 6 | Direction | Rcv (kysely saapui) tai Snd (palvelin vastasi) | Erottele pyyntö- ja vastausmäärät |
| 7 | ClientIP | Kyselyn tehneen isännän osoite | Suosituimpien käyttäjien analyysi, tapahtuman laajuuden arviointi |
| 8 | Xid | DNS-tapahtumatunnus (heksadesimaali) | Pyynnön ja vastauksen yhdistäminen |
| 9 | Type | Query tai Response | |
| 10 | Opcode | Standard, Notify, Update, Unknown | Erottele dynaamiset päivitykset ja vyöhykeilmoitukset tavallisista hauista |
| 11 | FlagsHex | Raakatason otsikkoliput (heksadesimaali) | Syvälliseen protokollan analyysiin |
| 12 | FlagsChar | Puretut liput: Authoritative, Truncated, RecursionDesired, RecursionAvailable | Luettava versio ylläolevasta |
| 13 | ResponseCode | NOERROR, NXDOMAIN, SERVFAIL, … | Virheraportointi, ratkaisun epäonnistumisen etsintä |
| 14 | QuestionType | Merkintätyyppi: A, AAAA, MX, PTR, TXT, … | TXT-määrä on klassinen tunneloitumisen indikaattori |
| 15 | QuestionName | Kysytty nimi normaalina FQDN:nä | Uhka-analyysi, suosituimmat domain-raportit |
| 16 | Information | Vapaa teksti Event / Note -merkinnöille; Packet-yksityiskohtien TCP/UDP-otsikkorivi | Palvelinviestien lukeminen |
| 17 | Details | Packet-yksityiskohtablokin JSON-esitys; muuten tyhjä | Täydellinen pakettitarkastus ilman paluuta raakalukuihin |
| 18 | ComputerName | Lähdepalvelin, -ComputerName-parametrin arvo | Monipalvelindatan 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
| Sarake | Merkitys |
|---|
Date | Päivä, aina muodossa yyyy-MM-dd |
Context | Kontekstin nimi (Packet, Event, Note, …) |
Count | Kyseisen kontekstin merkintöjen määrä kyseisenä päivänä |
ComputerName | Lä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
| Sarake | Merkitys |
|---|
Date | Päivä, aina muodossa yyyy-MM-dd |
ClientIP | Kyselyn tehnyt isäntä |
Protocol | UDP tai TCP |
Direction | Rcv tai Snd |
QuestionType | DNS-merkintätyyppi |
Count | Kyseisen päivän vastaavien pakettien määrä |
ComputerName | Lähdepalvelin |
Esimerkkitiedostot: en-US WithComputerName, en-US NoComputerName, de-DE WithComputerName, de-DE NoComputerName
Määrät ovat kokonaislukuja, eivät uniikkeja arvoja
Count on kyseisen päivittäisen ryhmän merkintöjen kokonaismäärä. Asiakas, joka kysyi samaa nimeä 500 kertaa, lisää määrää 500:lla, ei yhdellä. Jos luku näyttää liian suurelta, tämä on yleensä syy.
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öä.
| 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
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.
Tämän on oltava tiedostopolku, ei kansio
-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.
-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
Tämä ei ole etäkäyttöparametri
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.
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 datatiedostoStatistic — vain kaksi yhteenvedotiedostoa, ei rivikohtaista dataaBoth — 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
| 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.
Kerro jäsentäjälle, mitä alueasetusta lähdeloki käyttää:
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:
# 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
Poisto on pysyvä
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.
Turvaverkot
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.
Ei ajastettuihin tai tuotantokäyttöihin
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:
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
Sort-Object LastWriteTime -Descending |
Select-Object -Skip 1 |
Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
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.
| Tekniikka | Huomattava vaikutus |
|---|
StreamReader / StreamWriter 64 kt puskureilla | Tiedosto luetaan ja kirjoitetaan paloissa yhden suuren Get-Content-kutsun sijaan |
| Virtaava, yksinkertainen läpikäynti | Muistin käyttö pysyy suunnilleen samana riippumatta lokin koosta |
Merkkijono-operaatiot (.Substring(), .IndexOf()) säännöllisten lausekkeiden sijaan | Huomattavasti vähemmän CPU-käyttöä per rivi, ja rivejä on miljoonia |
CSV kirjoitetaan käsin Export-Csv-komennon sijaan | Ei objektiputken ylikuormitusta per tietue |
| Tilastojen kokoaminen hashtablen avulla | Yhteenvedot 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ä:
- Levy, ei CPU. Muunnos on I/O-raskas. Lokitiedosto vilkkaalla asemalla tai hidas linkki hallitsee suoritusaikaa.
- Yksityiskohtaiset lohkot. Jos lokissa on täydelliset pakettitiedot etkä käyttänyt
-NoDetailsParsing-valitsinta, aika kuluu niihin. - Tiedoston koko. Yksi monigigatavun loki kestää kauan joka tapauksessa. Korjaa tämä kierrätyksellä, älä parametreilla.
- Virustorjunta. Sekä lähdelokin että tuotetun CSV:n reaaliaikainen tarkistus voi kaksinkertaistaa I/O-kustannukset. Poissulku lokihakemistolle on yleinen ja järkevä toimenpide.
- 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
Älä koskaan yhdistä aktiivista lokia ja -RemoveSourceFile -valitsinta
Tiedoston poistaminen, johon DNS-palvelin vielä kirjoittaa, ei ole asia, jonka haluat huomata jälkikäteen. Rajoita -RemoveSourceFile kiertäviin, suljettuihin lokitiedostoihin.
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:
Avaa tiedosto. DNS-vianmääritysloki alkaa otsikkorivillä, kuten Message logging started at …, ja jatkuu aikaleimatuilla kyselymerkinnöillä.
Varmista, että DNS-vianmäärityslokin kirjaus on todella käytössä ja kirjoittaa odottamaasi polkuun:
Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize
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
- Tarkista ensin levy — muunnos on I/O-sidonnainen. Kuormittunut levy tai hidas verkkopolku hallitsee suoritusaikaa.
- Käytä
-NoDetailsParsing, jos et tarvitse pakettitason JSON-tietoja; yksityiskohtaisissa lokeissa tämä säästää 30–50 %. - Käytä
-ContextFilter Packet kirjoittamaan vähemmän. - Pilko valtavat lokit DNS-palvelimen lokin kierrätyksellä sen sijaan, että muunnat yhtä jättimäistä tiedostoa.
- 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:
Päivitä moduuli uusimpaan versioon ja kokeile uudelleen.
Etsi samaa oiretta GitHub-ongelmilistalta.
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.
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: ''
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: ''
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: ''
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
- Jokainen DC kirjoittaa DNS-vianmäärityslokit levylle rollover-ominaisuus päällä.
- Jokainen DC muuntaa kiertävät
*.log-tiedostot data-CSV:ksi ja tilastotiedostoiksi, ja pakkaa tulokset *.zip-muotoon ajastetusti (Task Scheduler). - Tulosteet kirjoitetaan lokitiedostojen viereen, jotta putki pysyy yksinkertaisena.
- 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\ScriptsC:\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.DebugLogParserSqlServer
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:
- tuo tarvittavat moduulit
- muuntaa DNS-vianmäärityslokin CSV-muotoon
- lataa luodun CSV:n
- 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.