# Risoluzione dei problemi

> Sintomi che potresti incontrare durante la conversione dei log di debug DNS, cosa li causa e come risolverli.

---

LLMS index: [llms.txt](/llms.txt)

---

## "Il file non è un file di log di debug DNS valido"

Il controllo dell'intestazione ha rifiutato l'input. Di solito il percorso è semplicemente errato — un file `.log` nella stessa cartella che non è il log di debug DNS, o un file che contiene solo un'intestazione ruotata.

Segui questi passaggi:

1. Apri il file. Un log di debug DNS inizia con una riga di intestazione come `Message logging started at …` e continua con voci di query con timestamp.
2. Conferma che il logging di debug DNS sia effettivamente abilitato e stia scrivendo nel percorso che ti aspetti:

   ```powershell
   Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize
   ```

3. Se il file è davvero un log DNS ma l'intestazione è insolita — modificata a mano, pre-filtrata, esportazione personalizzata — bypassa il controllo:

   ```powershell
   Convert-DNSDebugLogFile -InputFile "C:\Logs\odd.log" -SkipHeaderValidation
   ```

Mantieni la validazione abilitata ovunque altrove. Nota che `-SkipHeaderValidation` non può essere combinato con `-RemoveSourceFile`, quindi un file non verificato non può mai essere cancellato dalla conversione.

## Il file di output è vuoto o ha molte meno righe del previsto

Controlla, in questo ordine:

- **Il log contiene voci di query?** Un log appena ruotato può contenere solo un'intestazione se non sono ancora avvenute query.
- **È in uso un `-ContextFilter`?** `-ContextFilter Packet` rimuove per design le voci `Event` e `Note`. Se hai filtrato su `Event` o `Note`, la maggior parte delle colonne sarà vuota — quei tipi di voci contengono solo `DateTime`, `ThreadId`, `Context` e `Information`.
- **Il log di origine era attivo?** Un file su cui DNS Server sta ancora scrivendo può cambiare durante la conversione; le voci più recenti potrebbero mancare e l'ultima riga potrebbe essere troncata. Converti un log ruotato e chiuso quando ti serve un output completo.
- **Il file è corrotto o troncato?** Controlla la fine del log per una riga scritta a metà.

## Le date sono sbagliate, spostate o giorno e mese sono invertiti

Il log è stato scritto da un server con una locale Windows diversa dalla sessione che esegue la conversione. `20.01.2026` e `01/20/2026` descrivono lo stesso momento, ma solo se entrambe le parti concordano sul formato.

```powershell
# il log proviene da un server tedesco
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

Imposta `-InputCulture` esplicitamente nei lavori schedulati invece di affidarti alla cultura dell'account che li esegue. Se l'output deve essere leggibile dalla macchina, aggiungi `-OutputCulture 'sv-SE'`. Dettagli in [Parametri e Opzioni](../03-parameters-and-options/).

## Tutto finisce in una colonna dopo l'importazione

Disallineamento del delimitatore. Il modulo scrive `;` per default; il tuo consumatore si aspettava `,` (o viceversa).

Riesegui la conversione con il delimitatore che vuole il consumatore:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter ","
```

…oppure indica all'importatore quale delimitatore usa il file — in Excel tramite **Dati → Da testo/CSV**, in PowerShell tramite `Import-Csv -Delimiter ';'`.

## "Accesso negato"

- La cartella del log DNS di solito richiede diritti amministrativi. Avvia PowerShell elevato, o esegui il task schedulato con un account che ha accesso.
- Controlla anche i permessi di scrittura sulla cartella di output, non solo quelli di lettura sul log.
- Per percorsi SMB/UNC: un task in esecuzione come `SYSTEM` si autentica in rete come **account computer**. Concedi i diritti di condivisione e NTFS a quell'account computer (o al gruppo `Domain Controllers`), oppure usa un account di servizio dedicato.
- Se `-RemoveSourceFile` fallisce alla fine di una esecuzione altrimenti riuscita, l'account può leggere il log ma non cancellarlo.

## L'elaborazione è molto lenta

1. Prima il disco — la conversione è limitata dall'I/O. Un volume occupato o un percorso di rete lento dominano i tempi di esecuzione.
2. Usa `-NoDetailsParsing` se non ti serve il JSON dei dettagli pacchetto; su log con molti dettagli questo fa risparmiare il 30–50%.
3. Usa `-ContextFilter Packet` per scrivere meno.
4. Suddividi log enormi con la rotazione del log di DNS Server invece di convertire un unico file gigantesco.
5. Considera un'esclusione antivirus per la cartella dei log.

Di più in [Prestazioni](../04-performance/).

## L'output compresso è più grande del previsto

I log con contenuti molto diversi — molti domini unici, molti client distinti — si comprimono meno di quelli ripetitivi. È normale. ZIP comunque di solito ottiene una riduzione sostanziale; se non succede, verifica se la colonna `Details` sta gonfiando il file e se ti serve davvero.

## Le statistiche non corrispondono a quanto mi aspettavo

- Conferma di aver usato `-OutputType Both` o `-OutputType Statistic`. Con `-OutputType CSV` non viene scritto alcun file di statistiche.
- `Count` è un totale, non un conteggio distinto. Un client che chiede lo stesso nome 500 volte contribuisce con 500. Questa è la causa più frequente di "quel numero non può essere giusto".
- Le statistiche sono raggruppate per giorno. Un log che copre due giorni produce righe per entrambi.
- Se `ComputerName` è vuoto nei file di statistiche, `-ComputerName` non è stato impostato durante la conversione.

## Il task schedulato funziona interattivamente ma non come task

Quasi sempre uno di questi tre casi:

- **Modulo non trovato.** `SYSTEM` con `-NoProfile` vede solo i percorsi dei moduli a livello macchina. Installa il modulo a livello macchina o aggiungi un `Import-Module DNSServer.DebugLogParser` esplicito all'azione del task.
- **Cultura sbagliata.** La locale dell'account del task è diversa dalla tua. Imposta `-InputCulture` e `-OutputCulture` esplicitamente.
- **Politica di esecuzione o script non firmato.** Allinea il `-ExecutionPolicy` del task alla tua politica di firma, e sblocca i file copiati da altre fonti.

Esegui manualmente la stessa riga di comando del task nello stesso contesto (per esempio con PsExec come `SYSTEM`) per riprodurlo.

## Segnalare un problema

Se nulla di tutto questo aiuta:

1. Aggiorna all'ultima versione del modulo e riprova.
2. Cerca nei [GitHub issues](https://github.com/AndiBellstedt/DNSServer.DebugLogParser/issues) lo stesso sintomo.
3. Raccogli le diagnostiche:

   ```powershell
   $PSVersionTable
   Get-Module DNSServer.DebugLogParser -ListAvailable | Select-Object Name, Version, Path
   Get-Culture
   ```

   più il comando esatto che hai eseguito, il messaggio di errore completo incluso lo stack trace, e — se puoi condividerlo — un piccolo estratto anonimizzato del log che riproduce il problema.
4. Apri una nuova issue con queste informazioni.
