# Parametri e Opzioni

> Cosa cambia effettivamente ogni opzione di Convert-DNSDebugLogFile, quando serve, e le trappole in cui è facile cadere.

---

LLMS index: [llms.txt](/llms.txt)

---

Questa pagina spiega le opzioni in modo semplice e nell'ordine in cui tipicamente ti serviranno. È una guida, non una specifica — la lista autorevole e sempre aggiornata dei parametri si trova nel [riferimento comandi](../commands/convert-dnsdebuglogfile/) e in:

```powershell
Get-Help Convert-DNSDebugLogFile -Full
```

## La versione breve

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
```

Questa singola riga ti dà già un comportamento sensato: sia i file dati che quelli statistici, delimitatore punto e virgola, formato data della tua macchina, validazione dell'intestazione attiva, log sorgente intatto. Tutto il resto è fine-tuning.

| Opzione | Default | Cambiala quando |
|---|---|---|
| `-InputFile` | *(obbligatorio)* | sempre |
| `-OutputFile` | percorso input con `.csv` | vuoi l'output da un'altra parte |
| `-Delimiter` | `;` | il tuo consumatore si aspetta virgola, tab o pipe |
| `-ComputerName` | vuoto | unisci log da più server |
| `-OutputType` | `Both` | vuoi solo dati o solo riepiloghi |
| `-ContextFilter` | `All` | ti interessa solo il traffico DNS reale |
| `-InputCulture` | cultura corrente | il log proviene da un server con altra localizzazione |
| `-OutputCulture` | cultura corrente | una macchina leggerà il CSV |
| `-NoDetailsParsing` | spento | conta più la velocità che i dettagli dei pacchetti |
| `-CompressOutput` | spento | archivi o trasferisci i risultati |
| `-RemoveSourceFile` | spento | pulizia programmata, e ti fidi dell'output |
| `-SkipHeaderValidation` | spento | il file è valido ma l'intestazione è insolita |

## Input e output

### -InputFile

Percorso del log da convertire. Accetta un array e input da pipeline — ecco perché funziona così:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" | Convert-DNSDebugLogFile
```

`Get-ChildItem` emette oggetti con la proprietà `FullName`, e `-InputFile` la accetta per nome proprietà (gli alias includono `FullName`, `Path`, `FilePath`). Non serve `ForEach-Object`.

Funzionano sia percorsi locali che SMB/UNC:

```powershell
Convert-DNSDebugLogFile -InputFile "\\dc01\C$\Administration\Logs\DNSServer\dns.log"
```

Il comando può anche aprire un log che il DNS Server ha attualmente aperto. Vedi [log attivi](#log-attivi) più avanti prima di affidarti a questo.

### -OutputFile

Se non lo specifichi, il CSV viene creato accanto al file di input, stesso nome base, estensione `.csv`. Se lo usi, controlli la destinazione.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Deve essere un percorso file, non una cartella</div>


`-OutputFile "D:\Processed\"` non significa "scrivi in questa cartella". Dai il percorso completo incluso il nome file: `-OutputFile "D:\Processed\dns_data.csv"`.

Questo significa anche che `-OutputFile` non ha senso se passi molti file in pipeline — ogni conversione scriverebbe nello stesso file. Per esecuzioni batch, lascialo spento e lascia che ogni log produca il suo CSV.
</div>


### -Delimiter

Il default è punto e virgola, perché nelle localizzazioni dove la virgola è il separatore decimale è quello che Excel si aspetta. Usa `-Delimiter ","` per strumenti e database che assumono valori separati da virgola classici, o `` -Delimiter "`t" `` per tabulazione.

Qualunque valore scegli, usa lo *stesso* lato importazione. Un disallineamento è la causa numero uno di "tutto finito in una colonna".

## Etichettatura e filtraggio

### -ComputerName

Compila la colonna `ComputerName`. La colonna esiste comunque; questa opzione le assegna un valore.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ComputerName $env:COMPUTERNAME
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Non è un parametro di remoting</div>


Nonostante il nome (e gli alias `-Server` / `-DNSServer` / `-HostName`), `-ComputerName` **non** si connette a nulla. Non c'è WinRM, né esecuzione remota. Scrive solo un'etichetta nell'output. Per leggere un log remoto, punta `-InputFile` a un percorso UNC.
</div>


Impostalo sempre quando più server alimentano un dataset — altrimenti non potrai sapere da quale DC proviene una riga.

### -OutputType

- `CSV` — solo file dati
- `Statistic` — solo i due file aggregati, niente dati a livello di riga
- `Both` — tutti e tre i file *(default)*

`Statistic` è l'opzione veloce e leggera quando ti servono solo tendenze giornaliere. `CSV` è giusto quando un sistema a valle fa la sua aggregazione.

### -ContextFilter

Un log di debug DNS mescola traffico query reale con chiacchiere interne al server. `-ContextFilter` decide cosa rimane nell'output.

```powershell
# solo traffico DNS reale
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet

# traffico più eventi server, ma niente note diagnostiche
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet, Event
```

| Valore | Contiene |
|---|---|
| `All` | tutto *(default)* |
| `Packet` | query e risposte DNS — i dati che la maggior parte delle analisi richiede |
| `Event` | eventi server, es. "Il server DNS è stato avviato" |
| `Note` | note diagnostiche e avvisi, es. errori di socket |

Altri tipi di contesto (`DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone`) appaiono sotto `All`.

Filtrare solo su `Event` o `Note` popola solo `DateTime`, `ThreadId`, `Context` e `Information` — le colonne protocollo restano vuote perché quelle voci non contengono quell'informazione.

`-ContextFilter Packet` è la scelta usuale per pipeline di sicurezza e reportistica: elimina il rumore e riduce sensibilmente l'output.

## Log internazionali

Il DNS Server scrive i timestamp nella localizzazione Windows della macchina su cui gira. Un DC tedesco scrive `20.01.2026 23:00:16`; un server USA scrive `1/20/2026 11:00:16 PM`. Se la localizzazione della tua workstation è diversa da quella del server, il parsing va storto — o peggio, scambia silenziosamente giorno e mese.

### -InputCulture

Dì al parser quale localizzazione usa il *log sorgente*:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

| Cultura | Formato timestamp log |
|---|---|
| `de-DE` | `DD.MM.YYYY HH:MM:SS` |
| `en-US` | `M/D/YYYY H:MM:SS AM/PM` |
| `en-GB` | `DD/MM/YYYY HH:MM:SS` |
| `sv-SE` | `YYYY-MM-DD HH:MM:SS` |

Il default è la cultura della sessione che esegue il comando. In un ambiente con localizzazioni miste, impostalo esplicitamente invece di affidarti al default — e ricorda che un'attività schedulata che gira come `SYSTEM` potrebbe non avere la cultura con cui hai testato interattivamente.

### -OutputCulture

Controlla come i timestamp vengono *scritti* nel CSV:

```powershell
# output in stile ISO che SQL Server, Power BI e pandas capiscono tutti
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'

# stesso effetto, cultura invariata esplicita
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" `
    -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
```

Regola pratica: se un umano apre il file in Excel, usa la cultura locale. Se lo legge una macchina, usa `sv-SE` o cultura invariata e non preoccuparti delle impostazioni regionali all'importazione.

I due parametri sono indipendenti — puoi leggere un log svedese e scrivere output formattato USA.

## Velocità e spazio

### -NoDetailsParsing

Se il DNS Server registra dettagli completi dei pacchetti, il parser trasforma ogni blocco di dettaglio in JSON nella colonna `Details`. È utile, ma è anche la parte più costosa e gonfia il CSV.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -NoDetailsParsing
```

La colonna resta presente ma vuota; la riga di intestazione dettaglio TCP/UDP è ancora disponibile in `Information`. Su log ricchi di blocchi dettaglio questo può ridurre il tempo di elaborazione del 30–50 %. Usalo quando bastano le informazioni a livello di query.

### -CompressOutput

Comprimi i file CSV generati e cancella quelli non compressi. `dns.log` produce `dns.zip` invece di `dns.csv`.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
```

CSV di questo tipo tipicamente si comprimono del 90% o più, quindi è un risparmio di spazio quasi gratuito per archivi e trasferimenti di file in rete.

### -RemoveSourceFile

Cancella il file `.log` sorgente dopo una conversione riuscita — il log viene rimosso solo se tutti i file di output sono stati creati.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput -RemoveSourceFile
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">La cancellazione è permanente</div>


Qui non c'è cestino. Verifica il tuo output su log reali prima di abilitare questa opzione in un lavoro schedulato, e non puntarla mai a un file log attivo.

Il comando rifiuta volutamente di combinare `-RemoveSourceFile` con `-SkipHeaderValidation`, così non puoi cancellare un file che non è mai stato confermato come log DNS.
</div>


## Reti di sicurezza

### -SkipHeaderValidation

Di default il comando verifica che il file sia davvero un log di debug DNS Server prima di analizzarlo. Questo evita l'errore classico di puntare il lavoro alla cartella sbagliata.

Disattivalo solo per casi davvero insoliti: log modificati a mano, estratti pre-filtrati, formati personalizzati. Lascialo attivo altrove — è economico e ti protegge da errori di battitura e da montagne di righe inutili.

### -WhatIf e -Confirm

Il comando supporta entrambi. `-WhatIf` è il modo giusto per vedere cosa toccherebbe un nuovo lavoro batch:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
```

`-Confirm` chiede conferma prima di processare ogni file, prima di cancellare un file sorgente e prima di sovrascrivere output esistenti.

## Log attivi

`Convert-DNSDebugLogFile` può leggere un file che il DNS Server ha aperto. Utile per uno sguardo ad hoc a cosa succede in questo momento.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Non per esecuzioni programmate o di produzione</div>


Un log attivo cambia mentre viene letto. L'output può mancare voci scritte durante la conversione e l'ultima riga può essere troncata. Ripetere l'esecuzione dà risultati diversi.

Per output riproducibili, abilita il rollover dei log sul server DNS e converti solo file chiusi e ruotati — per esempio saltando l'ultimo più recente:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```
</div>


## Metterlo insieme

Una tipica invocazione di produzione su un domain controller:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile `
        -ComputerName $env:COMPUTERNAME `
        -Delimiter ';' `
        -OutputType Both `
        -ContextFilter Packet `
        -OutputCulture 'sv-SE' `
        -CompressOutput
```

Si legge così: prendi ogni log ruotato tranne quello attivo, tieni solo il traffico DNS, etichetta ogni riga con il nome del server, scrivi timestamp leggibili da macchina, e lascia archivi compressi. La versione completa per attività schedulate e Group Policy è nell'[esempio di raccolta guidata da GPO](../examples/gpo-driven-collection/).
