Questa è la versione stampabile multipagina di questa sezione. Clicca qui per stampare.

Torna alla visualizzazione normale di questa pagina.

Informazioni su questa documentazione

Questo è il sito ufficiale della documentazione per DNSServer.DebugLogParser, un modulo PowerShell che trasforma i file di log di debug del server DNS di Windows in dati CSV strutturati e analizzabili.

Informazioni sul modulo

DNSServer.DebugLogParser nasce da una necessità reale: i log di debug del server DNS di Windows sono testi leggibili dall’uomo, ma non adatti per analisi o reportistica. Questo modulo colma questa lacuna convertendo i file di log grezzi in un formato CSV strutturato che si integra con strumenti comuni come Excel, Power BI, database SQL e sistemi SIEM.

Principi chiave di progettazione:

  • Performance prima di tutto — ottimizzato per file da oltre 100MB usando I/O in streaming e operazioni su stringhe
  • Compatibilità cross-edizione — supporta PowerShell Desktop (5.1+) e Core (7.x)
  • Pronto per la produzione — include validazione dell’intestazione, gestione degli errori e compressione opzionale
  • Pipeline-friendly — si integra naturalmente con l’architettura a pipeline di PowerShell

Risorse

Contribuire

I contributi sono benvenuti. Se trovi problemi, errori o hai suggerimenti per miglioramenti, apri una issue o una pull request sul repository GitHub.

1 - Panoramica

DNSServer.DebugLogParser è un modulo PowerShell che trasforma i file di log di debug del server DNS di Windows in dati CSV strutturati e analizzabili per analisi di sicurezza, monitoraggio delle prestazioni, risoluzione dei problemi e reportistica di conformità.

Cos’è un log di debug DNS?

Il logging di debug DNS è una funzionalità del server DNS di Windows che registra informazioni dettagliate sulle operazioni DNS. Quando abilitato, il server DNS scrive voci di log in un file di testo (tipicamente dns.log) nella directory del server DNS.

Ogni voce di log contiene fino a 16 campi tra cui:

  • Data e ora della query
  • Protocollo usato (UDP o TCP)
  • Direzione (Invio o Ricezione)
  • Indirizzo IP del client
  • Tipo di query (A, AAAA, MX, PTR, ecc.)
  • Nome di dominio interrogato
  • Codice di risposta (NOERROR, NXDOMAIN, ecc.)
  • Flag e opzioni della query
  • Indirizzo IP nella risposta (per query riuscite)
  • Numeri di porta e ulteriori dettagli tecnici

Perché analizzare i log di debug DNS?

I log DNS sono fondamentali per:

Risoluzione dei problemi

  • Diagnosticare errori di risoluzione dei nomi
  • Identificare client o applicazioni mal configurati
  • Individuare la fonte di query problematiche
  • Verificare la corretta configurazione DNS e i trasferimenti di zona

Monitoraggio delle prestazioni

  • Identificare le fonti di query ad alto volume
  • Analizzare tipi e modelli di query per ottimizzare l’infrastruttura DNS
  • Rilevare problemi di configurazione che causano query eccessive
  • Monitorare tempi di risposta e tassi di successo
  • Controllare carico e capacità del server DNS

Analisi di sicurezza

  • Rilevare tentativi di tunneling DNS e esfiltrazione dati
  • Identificare domini associati a malware e server di comando e controllo
  • Monitorare modelli di query sospetti che possono indicare sistemi compromessi
  • Sorvegliare attacchi di amplificazione DNS
  • Indagare incidenti di sicurezza e tracciare attività degli attaccanti

Conformità e auditing

  • Soddisfare requisiti normativi per logging e conservazione
  • Documentare l’attività di rete per audit
  • Generare report per management e responsabili della conformità
  • Dimostrare diligenza nella sorveglianza della sicurezza

Come funziona il modulo (a grandi linee)

Il modulo è ottimizzato per file di grandi dimensioni e trasforma i log di debug DNS in output CSV strutturati. Supporta record multilinea (ad esempio blocchi di dettaglio PACKET e linee di continuazione indentate) in modo che messaggi di evento/diagnostica e dettagli dei pacchetti rimangano associati al record corretto.

Caratteristiche principali:

  • Analizza i campi nativi del log di debug DNS e produce un layout CSV coerente
  • Gestisce più versioni del server DNS (dal 2012 R2 al 2025)
  • Supporta sia PowerShell Desktop (5.1+) che Core (7.x)
  • Elabora file di qualsiasi dimensione (testato con file oltre 100MB)
  • Valida le intestazioni dei file di log per garantire l’integrità dei dati
  • Genera riepiloghi statistici opzionali
  • Supporta l’elaborazione batch tramite pipeline PowerShell
  • Comprimi opzionalmente i file di output per risparmiare spazio su disco
  • Può rimuovere automaticamente i file sorgente dopo l’elaborazione riuscita
  • Parsing delle date sensibile alla cultura per log DNS internazionali
  • Formattazione delle date sensibile alla cultura per requisiti di output internazionali

Licenza e supporto

Il modulo è rilasciato sotto licenza MIT. Il supporto della community è disponibile tramite GitHub Issues.

2 - Formati di Output

DNSServer.DebugLogParser può generare due tipi di output:

  • Un file di dati CSV contenente tutte le voci analizzate
  • File di statistiche opzionali per aggregazione giornaliera

Per vedere esempi reali di ciascun tipo di output, dai un’occhiata al campione in questo articolo.

File di dati CSV

Esempi di file di output:

Il file di dati CSV contiene tutte le voci di log analizzate con le seguenti colonne:

  • DateTime: Data e ora della query/risposta DNS
  • ThreadId: Identificatore interno del thread del server DNS
  • Context: Contesto dell’operazione (per esempio Packet, Event, Note, DSPoll, Init, Lookup, Recurse, Remote, Tombstone)
  • PacketId: Identificatore del pacchetto DNS
  • Protocol: UDP o TCP
  • Direction: Rcv (ricevuto/query) o Snd (inviato/risposta)
  • ClientIP: Indirizzo IP del client
  • Xid: ID transazione (esadecimale)
  • Type: Query o Response
  • Opcode: Standard, Notify, Update o Unknown
  • FlagsHex: Flag query/response (esadecimale)
  • FlagsChar: Flag decodificati (Authoritative, Truncated, RecursionDesired, RecursionAvailable)
  • ResponseCode: NOERROR, NXDOMAIN, SERVFAIL, ecc.
  • QuestionType: Tipo di record DNS (A, AAAA, MX, PTR, ecc.)
  • QuestionName: Nome di dominio interrogato
  • Information: Informazioni aggiuntive (per Event/Note/etc.; per i blocchi di dettaglio Packet, contiene la riga di intestazione dettaglio TCP/UDP)
  • Details: Dati JSON per le voci Packet che includono blocchi di dettaglio (vuoto altrimenti)
  • ComputerName: Nome del server sorgente (sempre presente; vuoto se non specificato)

Nota: La colonna ComputerName è sempre inclusa alla fine di ogni record per garantire una struttura di output coerente. Questo facilita scenari di consolidamento di log da più server.

File di statistiche (opzionali)

Esempi di file di output:

Quando vengono generate le statistiche, vengono creati due file separati:

1) Statistiche per contesto (*_Statistic.csv)

Colonne:

  • Date: Data (yyyy-MM-dd)
  • Context: Nome del contesto (per esempio Packet, Event, Note)
  • Count: Numero di record
  • ComputerName: Nome del server sorgente

2) Statistiche per pacchetto (*_PacketStatistic.csv)

Colonne:

  • Date: Data (yyyy-MM-dd)
  • ClientIP: Indirizzo IP del client
  • Protocol: UDP o TCP
  • Direction: Rcv o Snd
  • QuestionType: Tipo di record DNS
  • Count: Numero di record
  • ComputerName: Nome del server sorgente

3 - Best Practice Operative

Quando usi DNSServer.DebugLogParser in produzione:

  1. Pianifica elaborazioni regolari

    • Usa Utilità di Pianificazione per convertire automaticamente i nuovi file di log ogni giorno o settimana.
  2. Ruota i log in modo appropriato

    • I log di debug DNS possono crescere rapidamente; configura la rotazione a una dimensione gestibile (ad esempio 100MB).
  3. Verifica l’output

    • Controlla i primi file convertiti prima di automatizzare completamente.
  4. Pianifica i requisiti di archiviazione

    • Anche con la compressione, pianifica lo spazio in base al volume DNS e alla conservazione.
  5. Proteggi i dati sensibili

    • I log DNS possono contenere dati sensibili; proteggi gli output con controlli di accesso adeguati.
  6. Documenta il flusso di lavoro

    • Documenta i programmi di elaborazione, le posizioni di archiviazione e l’uso per l’analisi.
  7. Testa con file di esempio

    • Verifica i parametri e il formato di output prima di elaborare log critici.
  8. Monitora gli errori

    • Controlla log corrotti, problemi di accesso o spazio disco insufficiente.

4 - Risoluzione dei problemi

Problemi comuni e soluzioni

“Il file non è un file di log di debug DNS valido”

  • Assicurati di convertire un vero file di log di debug del server DNS.
  • Il file dovrebbe iniziare con Message logging started at o contenere voci di query DNS.
  • Se sei sicuro che il file sia valido ma l’intestazione è diversa, usa -SkipHeaderValidation.

Il file di output è vuoto o incompleto

  • Verifica che il file di input contenga voci di log valide.
  • Alcuni log possono contenere solo informazioni di intestazione se non sono state effettuate query.
  • Controlla che il file di log non sia corrotto e contenga dati di query effettivi.

L’elaborazione è molto lenta

  • Assicurati di avere memoria sufficiente e che il disco non sia sovraccarico.
  • Considera di elaborare file di log più piccoli.
  • Valuta l’uso di -CompressOutput con elaborazioni programmate per gestire batch più piccoli.

Errori “Accesso negato”

  • Esegui PowerShell con i permessi appropriati per leggere i file di log sorgente e scrivere nella directory di destinazione.
  • I file di log DNS potrebbero richiedere accesso da amministratore.

L’output compresso è più grande del previsto

  • I log con molti valori unici si comprimono meno efficacemente; questo può essere normale.
  • La compressione ZIP comunque di solito ottiene una riduzione sostanziale.

Il file delle statistiche non corrisponde alle aspettative

  • Verifica di usare -OutputType Both o -OutputType Statistic.
  • Le statistiche sono conteggi aggregati (raggruppamenti giornalieri), quindi i valori rappresentano totali.

Segnalazione dei problemi

Se incontri problemi non coperti qui:

  1. Verifica di usare l’ultima versione del modulo.
  2. Controlla le Issues su GitHub per problemi simili.
  3. Raccogli informazioni diagnostiche:
    • Versione di PowerShell ($PSVersionTable)
    • Versione del modulo (Get-Module DNSServer.DebugLogParser)
    • File di log di esempio (se possibile)
    • Messaggio di errore completo e traccia dello stack
  4. Apri una nuova issue su GitHub con i dettagli.

5 - Riferimento ai comandi del modulo

Qui puoi trovare un riferimento per tutti i comandi del modulo. Questo riferimento è pensato per aiutarti a trovare rapidamente il comando di cui hai bisogno e a capire come usarlo efficacemente.

Cliccando su un comando, verrai portato a una pagina dettagliata che fornisce informazioni complete sul comando, inclusi sintassi, parametri, esempi e eventuali note o suggerimenti aggiuntivi per l’uso.

5.1 - Convert-DNSDebugLogFile

SYNOPSIS

Trasforma i log di debug del server DNS di Windows in un formato CSV strutturato per analisi e reportistica.

SYNTAX

__AllParameterSets

Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
 [[-ComputerName] <string>] [[-OutputType] <string>] [[-ContextFilter] <string[]>]
 [[-InputCulture] <cultureinfo>] [[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation]
 [-RemoveSourceFile] [-CompressOutput] [-NoDetailsParsing] [-WhatIf] [-Confirm] [<CommonParameters>]

ALIASES

Questo cmdlet ha i seguenti alias,

DESCRIPTION

Converte i file di log di debug del server DNS di Windows in dati CSV strutturati che possono essere analizzati in Excel, Power BI, database SQL o strumenti SIEM. Progettato per analisi di sicurezza, monitoraggio delle prestazioni, risoluzione dei problemi e reportistica di conformità.

Il cmdlet analizza i log di debug DNS e scrive un output CSV coerente per l’analisi. L’output CSV contiene 18 colonne, inclusa una colonna Information per testo di eventi/diagnostica, una colonna JSON opzionale Details per i blocchi di dettaglio del pacchetto, e una colonna ComputerName sempre presente (vuota se non specificata).

CARATTERISTICHE PRINCIPALI:

  • Elaborazione in streaming per evitare il caricamento completo del file in memoria (adatto a log molto grandi)
  • Parsing ad alte prestazioni ottimizzato per file di grandi dimensioni (oltre 100MB)
  • Delimitatore CSV personalizzabile (default: punto e virgola)
  • Sommari statistici opzionali con metriche aggregate
  • Filtraggio per contesto (Packet, Event, Note e altri) per focalizzarsi su tipi specifici di voci di log
  • Parsing e formattazione delle date sensibili alla cultura per server internazionali
  • Supporto pipeline per elaborazione batch di più file
  • Compressione opzionale dei file di output (formato ZIP)
  • Rimozione automatica opzionale dei file sorgente dopo l’elaborazione
  • Validazione dell’intestazione per garantire l’integrità dei dati

FORMATO OUTPUT: La colonna ComputerName è sempre inclusa alla fine di ogni record. Se il parametro -ComputerName non è specificato, la colonna sarà vuota. Questo garantisce una struttura di output coerente per scenari di consolidamento multi-server.

PRESTAZIONI: Ottimizzato usando StreamReader/StreamWriter con buffer da 64KB, elaborazione in streaming per gestione efficiente in memoria di file grandi, operazioni su stringhe invece di regex, generazione manuale CSV, e raccolta efficiente di statistiche basate su hashtable.

COMPATIBILITÀ:

  • PowerShell 5.1+ (edizioni Desktop e Core)
  • Windows Server 2016+
  • Formati log DNS Server da 2012 R2 fino al 2025

EXAMPLES

ESEMPIO 1

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

Converte il log di debug DNS usando le impostazioni predefinite (file dati e statistiche con delimitatore punto e virgola). Output:

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

ESEMPIO 2

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

Genera solo il file dati senza statistiche. Output: C:\Logs\dns.csv

ESEMPIO 3

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

Genera solo i file di statistiche con metriche aggregate. Output:

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

ESEMPIO 4

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

Converte il log in una posizione di output personalizzata. Output: C:\Output\parsed.csv

ESEMPIO 5

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

Converte con delimitatore virgola e aggiunge la colonna ComputerName con valore “DNS01”. Output:

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

ESEMPIO 6

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

Elabora in batch più file di log di debug DNS tramite pipeline. Output: Per ogni file .log genera file .csv e _statistic.csv

ESEMPIO 7

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

Converte e comprime l’output in un archivio ZIP. Output: C:\Logs\dns.zip (contenente dns.csv + file di statistiche)

ESEMPIO 8

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

Converte il log e rimuove il file sorgente dopo l’elaborazione riuscita. L’output verbose conferma la rimozione del file.

ESEMPIO 9

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

Analizza il formato data tedesco (GG.MM.AAAA) e produce output in formato USA (MM/GG/AAAA). Usa quando si elaborano log da server con impostazioni regionali diverse.

ESEMPIO 10

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

Converte solo le voci di pacchetti query/response DNS, escludendo EVENT e Note. Usa per focalizzare l’analisi sul traffico DNS reale.

ESEMPIO 11

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

Converte sia pacchetti query/response DNS che eventi del server, escludendo Note e altre voci. Usa per analizzare il traffico DNS insieme al contesto degli eventi server.

ESEMPIO 12

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

Archiviazione automatica dei log: elabora tutti i log, comprime l’output e rimuove i file sorgente. Ideale per pipeline di elaborazione log pianificate.

ESEMPIO 13

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

Elabora un file di log grande con parsing dei dettagli disabilitato per massimizzare le prestazioni. I blocchi di dettaglio PACKET sono saltati, mantenendo vuota la colonna Details. Usa quando si elaborano file molto grandi e non è necessaria l’analisi dettagliata della struttura del pacchetto.

PARAMETERS

-CompressOutput

Comprimi i file CSV di output in un archivio ZIP dopo la creazione.

Crea un file .zip contenente il/i file CSV generati, quindi rimuove i CSV non compressi. Il file ZIP viene creato nella stessa directory del CSV di output con lo stesso nome base.

Vantaggi:

  • Riduce significativamente lo spazio su disco (i file CSV si comprimono tipicamente oltre il 90%)
  • Semplifica la gestione e l’archiviazione dei file
  • Adatto per l’archiviazione a lungo termine

Esempio: l’input ‘dns.log’ genera ‘dns.csv’ compresso in ‘dns.zip’, quindi ‘dns.csv’ viene rimosso.

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

Specifica il valore per la colonna ComputerName nell’output CSV. La colonna ComputerName è sempre presente nell’output - se questo parametro non è specificato, la colonna sarà vuota.

Usalo quando si consolidano log da più server DNS per identificare il server di origine nei dataset combinati.

Nota: NON è un parametro di remoting. Etichetta solo l’output. Se si punta -InputFile a un percorso UNC, il file viene letto da quel percorso (non viene eseguito WinRM/esecuzione remota).

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

Richiede conferma prima di eseguire il cmdlet.

Se specificato, richiede conferma prima di:

  • Elaborare ogni file di log di debug DNS
  • Rimuovere i file sorgente (quando è specificato -RemoveSourceFile)
  • Sovrascrivere file di output esistenti

Utile per elaborazione interattiva quando vuoi controllare quali file vengono processati.

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

Filtra quali tipi di voci di log includere nell’output. Accetta valori singoli o multipli.

I log di debug DNS contengono diversi tipi di contesto:

  • PACKET: informazioni sui pacchetti di query e risposta DNS (dati primari)
  • EVENT: eventi del server DNS (es. “Il server DNS è stato avviato.”)
  • Note: note diagnostiche e avvisi (es. errori di socket, stati interni)
  • DSPoll, Init, Lookup, Recurse, Remote, Tombstone: altri tipi di contesto

Valori validi:

  • ‘All’: include tutti i tipi di contesto (default)
  • ‘Packet’: include solo voci PACKET (query/risposte DNS)
  • ‘Event’: include solo voci EVENT (eventi server)
  • ‘Note’: include solo voci Note (informazioni diagnostiche)
  • Qualsiasi combinazione: specifica più valori per includere tipi di contesto specifici

Default: All

Esempi:

  • ‘Packet’ filtra solo il traffico DNS
  • ‘Packet’,‘Event’ include sia traffico DNS che eventi server
  • ‘Note’,‘Event’ include note diagnostiche ed eventi server

Nota: filtrando su ‘Event’ o ‘Note’, solo le colonne DateTime, ThreadId, Context e Information conterranno dati. Le altre colonne (Protocol, ClientIP, ecc.) saranno vuote.

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

Specifica il carattere delimitatore per l’output CSV.

Default: Punto e virgola (;)

Alternative comuni: Virgola (,), Tab (`t), Pipe (|)

Usa il punto e virgola nelle regioni dove la virgola è il separatore decimale (Europa). Usa la virgola per strumenti CSV standard e database che si aspettano valori separati da virgola.

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

-InputCulture

Specifica la cultura/locale da usare per il parsing dei valori data/ora nel log di debug DNS.

I log di debug del server DNS usano il formato data della locale Windows sul server dove il log è stato generato. Usa questo parametro quando elabori log da server con impostazioni regionali diverse.

Default: Cultura corrente

Esempi comuni:

  • ‘de-DE’ o ‘de-AT’: formato tedesco (GG.MM.AAAA o GG/MM/AAAA)
  • ’en-US’: formato USA (MM/GG/AAAA con AM/PM)
  • ’en-GB’: formato UK (GG/MM/AAAA con orario 24h)
  • ‘sv-SE’: formato svedese/ISO (AAAA-MM-GG)
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

Specifica il percorso del file di log di debug DNS da analizzare. Supporta array per elaborare più file.

Accetta input da pipeline da Get-ChildItem o altri cmdlet che producono file.

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

Salta il parsing dei blocchi di dettaglio PACKET in formato JSON strutturato.

Se specificato, i record PACKET con blocchi di dettaglio avranno la linea info TCP/UDP nella colonna Information, ma la colonna Details rimarrà vuota. Questo migliora significativamente le prestazioni di elaborazione per file di log grandi quando non è necessaria l’analisi dettagliata della struttura del pacchetto.

Usa questo switch quando:

  • Elabori file di log molto grandi (oltre 100MB) e ti servono solo informazioni base sulle query
  • La struttura dettagliata (flag messaggi, sezioni DNS) non è richiesta per l’analisi
  • Vuoi massimizzare la velocità di parsing a scapito della completezza dei dati

Impatto sulle prestazioni: può migliorare la velocità di elaborazione del 30-50% per log con molti blocchi di dettaglio PACKET.

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

Specifica la cultura/locale da usare per formattare i valori data/ora nei file CSV di output.

Controlla come i valori DateTime sono scritti nel CSV. Usa questo parametro quando i file CSV saranno consumati da applicazioni o sistemi con impostazioni regionali specifiche.

Default: Cultura corrente

Esempi comuni:

  • ’en-US’: formato USA (MM/GG/AAAA)
  • ‘de-DE’: formato tedesco (GG.MM.AAAA)
  • ‘sv-SE’ o InvariantCulture: formato ISO (AAAA-MM-GG) per massima compatibilità
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

Specifica il percorso per il file CSV di output. Se non specificato, usa il nome del file di input con estensione .csv nella stessa directory del file di input.

Importante: deve essere un percorso file, non una directory. Se vuoi usare la directory del file di input con un nome personalizzato, specifica il percorso completo incluso il nome file.

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

Specifica il tipo di output da generare.

Valori validi:

  • ‘CSV’: genera solo il file dati con tutte le voci di log analizzate
  • ‘Statistic’: genera solo i file di statistiche con metriche aggregate
  • ‘Both’: genera sia file dati che statistiche (default)

Default: Both

Quando si generano statistiche, vengono creati due file separati:

  • ‘_Statistic.csv’: conteggi riepilogativi per tipo di contesto per giorno (Data, Contesto, Conteggio, ComputerName)
  • ‘_PacketStatistic.csv’: conteggi dettagliati PACKET per giorno per IP client, protocollo, direzione, e tipo di query (Data, ClientIP, Protocollo, Direzione, QuestionType, Conteggio, 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

Rimuove il file di log di debug DNS sorgente dopo l’elaborazione riuscita.

Usa questo per pipeline di elaborazione log automatizzate o gestione dello spazio disco. Il file sorgente viene rimosso solo se l’elaborazione si completa con successo e tutti i file di output sono creati.

Sicurezza: non può essere usato con -SkipHeaderValidation per evitare la cancellazione accidentale di file non validi.

Avviso: i file sorgente sono eliminati in modo permanente. Assicurati che i file di output siano validi prima di usare questa opzione.

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

Ignora il controllo di validazione dell’intestazione del log di debug DNS.

Di default, il cmdlet verifica che i file di input abbiano un’intestazione valida di log di debug DNS Server. Usa questo switch per elaborare file senza validazione, utile per:

  • Formati di log modificati o personalizzati
  • Risoluzione di problemi di validazione
  • Log non standard o pre-elaborati

Avviso: può causare errori di elaborazione se il file non è un log DNS valido.

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

Mostra cosa succederebbe se il cmdlet venisse eseguito. Il cmdlet non viene eseguito.

Se specificato, mostra informazioni dettagliate sulle operazioni che verrebbero eseguite senza eseguirle realmente. Utile per:

  • Anteprima dei file che verrebbero processati
  • Verifica dei percorsi dei file di output prima dell’elaborazione
  • Test di script prima dell’esecuzione in produzione
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

Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, e -WarningVariable. Per maggiori informazioni, vedi about_CommonParameters.

INPUTS

System.String[]

NOTES

Versione : 1.7.1.1 Autore : Andi Bellstedt, Copilot Data : 2026-01-26 Parole chiave : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser

6 - Esempi di utilizzo

Qui puoi trovare esempi pratici di come utilizzare il modulo in scenari reali. Questi esempi sono pensati per aiutarti a capire come applicare le funzionalità del modulo.

Questi sono esempi con un po’ più di profondità e contesto. Se vuoi solo l’uso dei comandi del modulo, dai un’occhiata al riferimento comandi.

6.1 - Flusso di lavoro per l'analisi della sicurezza con SQL Server

Converti i log di debug DNS in CSV con DNSServer.DebugLogParser, importa il risultato in SQL Server ed esegui una semplice query di rilevamento per attività sospette sui record TXT.

Questo esempio mostra un flusso di lavoro pratico per l’analisi della sicurezza: analizza un log di debug DNS con Convert-DNSDebugLogFile, importa il CSV generato in SQL Server ed esegui una query che evidenzia volumi insolitamente alti di interrogazioni a record TXT.

Per la migliore interoperabilità, questo esempio scrive i timestamp in un formato simile all’ISO usando -OutputCulture 'sv-SE'.

Moduli richiesti

Questo esempio utilizza i seguenti moduli PowerShell:

  • DNSServer.DebugLogParser
  • SqlServer

Installali se necessario:

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

Scenario

Usa questo flusso di lavoro quando vuoi spostare i dati del log di debug DNS analizzati in SQL Server per poter:

  • cercare grandi dataset in modo efficiente
  • costruire query di rilevamento ripetibili
  • correlare attività tra più server DNS
  • conservare dati normalizzati per indagini successive

Output del passaggio di conversione

Convert-DNSDebugLogFile non scrive direttamente in SQL Server. Prima crea un file CSV. Quel file CSV è il dataset importato nel database.

In questo esempio:

  • log di input: C:\Administration\Logs\DNS\dns.log
  • CSV generato: C:\Administration\Logs\DNS\dns.csv
  • tabella di destinazione: dbo.DNSQueries

Creare la tabella di destinazione

Esegui la seguente istruzione una volta in SQL Server per creare la tabella di destinazione.

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;

Convertire il log e importare il CSV

Il seguente esempio PowerShell esegue l’intero flusso di lavoro:

  1. importa i moduli richiesti
  2. converte il log di debug DNS in CSV
  3. carica il CSV generato
  4. importa in blocco le righe in SQL Server
# 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 "Il file CSV generato '$csvPath' non contiene righe."
}

$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()
}

Query per attività sospette sui record TXT

Una volta che i dati sono in SQL Server, puoi cercare i client che effettuano un numero insolitamente alto di query ai record TXT.

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;

Se preferisci eseguire la query da PowerShell, usa Invoke-Sqlcmd dal modulo SqlServer:

$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

Perché le query TXT sono interessanti

Volumi elevati di interrogazioni ai record TXT possono valere la pena di essere esaminati perché potrebbero indicare:

  • tunneling DNS
  • esfiltrazione di dati tramite DNS
  • abuso dei record TXT da parte di malware o strumenti
  • client insolitamente rumorosi o mal configurati

Questa query è solo un punto di partenza. In produzione, dovresti regolare la soglia e aggiungere filtri che si adattino al tuo ambiente.

Note operative

  • Import-Csv carica l’intero file in memoria. Per esportazioni di log molto grandi, considera un approccio in streaming invece di costruire un intero DataTable.
  • Mantieni -ComputerName nel passaggio di conversione così i record rimangono attribuibili dopo l’ingestione centralizzata.
  • Usa un delimitatore e una cultura coerenti durante esportazione e importazione.
  • Valida la conservazione, l’indicizzazione e il controllo degli accessi in SQL Server prima di usare questo flusso di lavoro per l’archiviazione a lungo termine.

6.2 - Esempio di Attività Pianificata

Questo esempio mostra come creare un’attività pianificata di Windows che esegue uno script PowerShell per elaborare quotidianamente i log di debug DNS.

Questo script crea un’attività pianificata di Windows che viene eseguita ogni giorno alle 2:00 AM. Importa il modulo ed elabora tutti i file di log nella cartella in cui viene eseguito lo script (in questo esempio “C:\Administration\Logs\DNS”). Il processo comprime l’output in file ZIP e rimuove l’originale per mantenere l’ordine.

$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"

6.3 - Utilizzo pratico in un ambiente di dominio (raccolta e conversione guidate da GPO)

Questo esempio dimostra come implementare un flusso di lavoro guidato da GPO per la raccolta e la conversione dei log di debug DNS sui controller di dominio.

Questo documento descrive un esempio pratico e completo di esecuzione di DNSServer.DebugLogParser in un ambiente di dominio Active Directory, focalizzato sulla conversione dei log di debug del server DNS di Windows sui controller di dominio.

Questo esempio è accompagnato da un archivio ZIP, che fornisce gli artefatti della policy utilizzati per implementare il flusso di lavoro descritto qui.
Gli artefatti più rilevanti sono il manifest di backup, il report GPO, Files.xml, Set-DNSServerDebugLogging.ps1 e ScheduledTasks.xml.

Scenario

  • Diversi controller di dominio (DC) ospitano il ruolo DNS Server.
  • Il debug logging DNS è abilitato e configurato in modo coerente su ogni DC tramite un’attività pianificata (scrivendo i file di log in C:\Administration\Logs\DNSServer).
  • Un processo gestito centralmente converte i log in CSV per:
    • analisi di sicurezza
    • report operativi
    • risoluzione dei problemi
    • conformità/retention

Risultati attesi

  • Impostazioni di conversione coerenti su tutti i DC
  • Posizione e denominazione dell’output prevedibili
  • Compressione opzionale per ridurre lo spazio di archiviazione
  • Output statistici opzionali per riepiloghi giornalieri rapidi
  • Rischio minimo lato host, con considerazioni esplicite su riesecuzione e pulizia

Architettura suggerita

Modello di raccolta: conversione locale + raccolta centrale

  1. Ogni DC scrive i log di debug DNS su disco con rollover abilitato.
  2. Ogni DC converte i file *.log ruotati in un CSV dati e CSV statistici, quindi comprime gli output in *.zip secondo una pianificazione (Utilità di pianificazione).
  3. Gli output sono scritti accanto ai file di log per mantenere semplice la pipeline.
  4. Un server centrale raccoglie gli output *.zip, ad esempio tramite ingestione da condivisione file, copia pianificata, forwarder SIEM o un collector basato su agent.

Questo modello minimizza le letture di rete di grandi file di log grezzi e mantiene il parsing vicino ai dati.

Flusso di lavoro GPO

Il flusso di lavoro è implementato tramite Group Policy (configurazione computer) per garantire impostazioni coerenti su tutti i controller di dominio.

Implementazione di riferimento inclusa in questo repository (report GPO):

  • Nome archivio/report: T0-C-Analytics-DNSDebugLogging
  • ID backup: {2B6F16BC-0E7C-4787-83D7-2854FED882EE}
  • Target link GPO: corp.company.com/Domain Controllers
  • Filtro elementi (usato sia per il deployment file che per le attività pianificate): si applica solo se esiste C:\Windows\System32\dns.exe

1) Prerequisiti (cartelle + modulo)

Il backup fornito assume che queste cartelle esistano già. Aggiungi elementi GPP separati se vuoi che il deployment le crei automaticamente:

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

Il backup fornito assume anche che Convert-DNSDebugLogFile sia già disponibile sui DC. L’attività di conversione avvia Windows PowerShell 5.1 con -NoProfile e non importa esplicitamente il modulo, quindi il modulo deve essere installato in un percorso modulo PowerShell a livello macchina visibile a LocalSystem. Approcci consigliati:

  • Installa DNSServer.DebugLogParser sui DC. Ad esempio, da PowerShell Gallery (se la policy lo consente).
  • Distribuisci il modulo tramite repo interno / condivisione file in modo che sia rilevabile in $env:PSModulePath
  • Aggiungi un esplicito Import-Module all’azione dell’attività se vuoi un caricamento deterministico

2) Distribuire lo script di configurazione del debug logging (GPP Files)

La GPO distribuisce lo script:

  • Sorgente (in SYSVOL tramite GPP): %GptPath%\Preferences\Files\Set-DNSServerDebugLogging.ps1
  • Destinazione (su ogni DC): C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1

Questo è implementato nell’elemento preferenze GPP Files in Files.xml.

3) Attività pianificata: configurare il debug logging DNS

La GPO crea un’attività pianificata chiamata Set-DNSServerDebugLogging.

  • Contesto di sicurezza nel backup fornito: SYSTEM con tipo di accesso S4U
  • Trigger nel backup fornito: giornaliero (inizio 2025-03-01T00:00:01)
  • Azione in ScheduledTasks.xml:
    • powershell.exe -ExecutionPolicy RemoteSigned -command " & { C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1 }"
    • Directory di lavoro: C:\Administration\Scripts

Lo script Set-DNSServerDebugLogging.ps1 configura il debug logging DNS tramite Get-DnsServerDiagnostics / Set-DnsServerDiagnostics e (in particolare):

  • Abilita il logging su file + rollover
  • Scrive in: C:\Administration\Logs\DNSServer\DnsDebugLog_<COMPUTERNAME>.<Domain>_.log
  • Usa una dimensione di rollover di 10 MB per file
  • Cattura principalmente attività correlate a query (query + notifiche + aggiornamenti + transazioni di domanda) ed esclude il logging completo dei pacchetti

4) Attività pianificata: convertire i log di debug ruotati in CSV compressi

La GPO crea un’attività pianificata chiamata Convert-DNSDebugLogs.

  • Contesto di sicurezza nel backup fornito: SYSTEM con tipo di accesso InteractiveToken
  • Trigger nel backup fornito: giornaliero (inizio 2026-01-01T00:30:00)
  • Directory di lavoro: C:\Administration\Logs\DNSServer
  • Azione in ScheduledTasks.xml (formattata per leggibilità):
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

Note di progettazione:

  • Select-Object -Skip 1 evita intenzionalmente di processare il file di log più recente (attivo).
  • Ciò significa che i dati correnti vengono esportati solo dopo il rollover; su DC a basso volume, il log attivo può rimanere non processato per più di un giorno.
  • Poiché Convert-DNSDebugLogFile imposta di default -OutputFile su “stessa cartella, stesso nome, .csv”, gli output vengono creati accanto agli input *.log.
  • Con -CompressOutput, ogni log processato produce un *.zip e i CSV intermedi vengono rimossi.
  • A meno che non si archivino o eliminino i file *.log processati, le esecuzioni successive rielaboreranno ogni log non attivo.
  • L’attività genera un errore se $Error.Count -gt 0 per segnalare un’esecuzione fallita.

5) Ingestione centrale

Opzioni (scegli una):

  • Ingestione da condivisione file: il DC scrive (o copia) C:\Administration\Logs\DNSServer\*.zip in \\fileserver\share\dns\$env:COMPUTERNAME\... (concedi diritti di condivisione e NTFS agli account computer DC o al gruppo Domain Controllers se l’attività gira come SYSTEM)
  • Modello pull: un job centrale legge \\dc\C$\Administration\Logs\DNSServer\*.zip (meno preferito; richiede condivisioni amministrative)
  • Forwarder agent: SIEM / pipeline di log che spedisce gli output *.zip

Considerazioni operative

  • Minimo privilegio: le attività girano come SYSTEM; assicurati che le cartelle locali siano scrivibili e che eventuali destinazioni UNC concedano accesso all’account computer se usate.
  • Policy di firma: entrambe le attività usano -ExecutionPolicy RemoteSigned; firma o sblocca lo script e il modulo distribuiti secondo la tua policy.
  • Utilizzo disco: -CompressOutput aiuta significativamente, ma questo flusso di lavoro non rimuove i log sorgente; pianifica retention e pulizia.
  • Comportamento di rielaborazione: a meno che non si archivino o eliminino i log processati, l’attività di conversione processerà ogni file *.log non attivo di nuovo nelle esecuzioni successive. È semplice e robusto, ma può sovrascrivere output e creare duplicati a valle se il collector non fa deduplicazione.
  • Consolidamento multi-DC: -ComputerName $env:COMPUTERNAME è incluso per mantenere tracciabilità nei dataset consolidati.
  • Validazione: la validazione dell’intestazione rimane abilitata perché l’attività non usa -SkipHeaderValidation (consigliato).

Validare e adattare (usando lo ZIP)

Usa l’archivio ZIP come implementazione di riferimento, quindi allinea i seguenti aspetti al tuo ambiente:

  • Ambito target: quali DC / OU ricevono la policy
  • Identità di esecuzione: conferma che entrambe le attività pianificate usino il tipo di accesso previsto (S4U vs InteractiveToken) o normalizzali al tuo standard
  • Creazione cartelle: decidi se C:\Administration\Scripts e C:\Administration\Logs\DNSServer sono pre-creati altrove o devono essere creati da ulteriori elementi GPP
  • Percorsi: conferma che C:\Administration\Scripts e C:\Administration\Logs\DNSServer corrispondano ai tuoi standard
  • Retention: decidi se mantenere i log grezzi e per quanto tempo (specialmente se abiliti opzioni di pulizia)
  • Ingestione: conferma dove vengono scritti gli output CSV/ZIP e come vengono raccolti centralmente

Se vuoi validare la configurazione GPO esatta senza importarla, le fonti autorevoli in questo repo sono: