# Convert-DNSDebugLogFile

LLMS index: [llms.txt](/v1.2.1.0/llms.txt)

---

## 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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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.

```yaml
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).

```yaml
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.

```yaml
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.

```yaml
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.

```yaml
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)

```yaml
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.

```yaml
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.

```yaml
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à

```yaml
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.

```yaml
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)

```yaml
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.

```yaml
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.

```yaml
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

```yaml
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](https://go.microsoft.com/fwlink/?LinkID=113216).

## 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

## RELATED LINKS

- [github.com/AndiBellstedt/DNSServer.DebugLogParser](https://github.com/AndiBellstedt/DNSServer.DebugLogParser)
