# Convert-DNSDebugLogFile

LLMS index: [llms.txt](/v1.0.0.0/llms.txt)

---

## SYNOPSIS

Convertit les fichiers journaux de débogage du serveur DNS Windows au format CSV.

## SYNTAXE

### __AllParameterSets

```
Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
 [[-ComputerName] <string>] [[-OutputType] <string>] [[-InputCulture] <cultureinfo>]
 [[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation] [-RemoveSourceFile] [-CompressOutput]
 [-WhatIf] [-Confirm] [<CommonParameters>]
```

## ALIAS

Cette cmdlet possède les alias suivants,

## DESCRIPTION

Analyseur haute performance pour les fichiers journaux de débogage du serveur DNS Windows, conçu pour rendre l'activité du serveur DNS transparente, analysable et exploitable dans les outils de reporting et d'analyse.

Les journaux de débogage du serveur DNS contiennent des informations détaillées sur les requêtes/réponses mais sont difficiles à analyser dans leur format texte brut.  
Ce script transforme ces journaux en fichiers CSV structurés pouvant être importés dans Excel, Power BI, bases de données SQL ou autres plateformes d'analyse de données.

CAPACITÉS PRINCIPALES :  
- Analyse les 16 champs des journaux de débogage DNS (date, heure, protocole, IP client, type de requête, etc.)  
- Génère une sortie CSV structurée avec délimiteurs personnalisables  
- Crée des résumés statistiques optionnels agrégés par client, protocole et type de requête  
- Traite des fichiers uniques ou des lots via pipeline  
- Supporte les formats standard et détaillé des journaux de débogage DNS  
- Compression automatique optionnelle des fichiers de sortie pour économiser de l’espace disque  
- Suppression optionnelle des fichiers sources après traitement réussi  
- Validation des en-têtes des fichiers journaux pour garantir l’intégrité des données  

CAS D’UTILISATION :  
- Analyse de sécurité : identifier les schémas suspects de requêtes DNS  
- Surveillance de performance : suivre les volumes de requêtes et temps de réponse  
- Planification de capacité : analyser la charge du serveur DNS et la répartition des clients  
- Reporting de conformité : documenter l’activité DNS pour les audits  
- Dépannage : investiguer les problèmes de résolution DNS  

PERFORMANCE :  
Optimisé pour les gros fichiers (100 Mo+) grâce à :  
- Opérations sur chaînes plutôt que regex pour le parsing  
- StreamReader/StreamWriter avec tampons de 64 Ko  
- Génération manuelle du CSV pour éviter la surcharge d’Export-Csv  
- Collecte efficace des statistiques via dictionnaire  

COMPATIBILITÉ :  
- PowerShell 5.1+ sur Windows  
- PowerShell 7+ sur Windows  
- Windows Server 2016 et versions ultérieures  
- Supporte les formats de journaux DNS Server 2012 R2 à 2025  

## EXEMPLES

### EXEMPLE 1

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log"
```

Convertit le journal de débogage DNS en format CSV avec les paramètres par défaut.  
Sortie : C:\Logs\dns.csv (fichier de données uniquement, délimiteur point-virgule).

### EXEMPLE 2

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Both
```

Convertit le journal DNS et génère les deux fichiers de sortie.  
Sorties : C:\Logs\dns.csv (données) et C:\Logs\dns_statistic.csv (statistiques agrégées).

### EXEMPLE 3

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Statistic
```

Génère uniquement le fichier de statistiques sans créer le fichier CSV complet.  
Sortie : C:\Logs\dns_statistic.csv (statistiques uniquement).

### EXEMPLE 4

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"
```

Convertit le journal DNS vers un emplacement de sortie personnalisé.  
Sortie : C:\Output\parsed.csv.

### EXEMPLE 5

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both
```

Convertit le journal en utilisant la virgule comme délimiteur avec une colonne ComputerName.  
Sorties : C:\Logs\dns.csv et C:\Logs\dns_statistic.csv, tous deux avec "DNS01" dans la colonne ComputerName.

### EXEMPLE 6

```powershell
PS C:\> Get-ChildItem "C:\Logs\*.log" | .\Convert-DnsDebugLogFile.ps1 -OutputType Both
```

Traite plusieurs fichiers journaux DNS via pipeline.  
Sorties : pour chaque fichier .log, génère les fichiers .csv (données) et _statistic.csv (statistiques).

### EXEMPLE 7

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -CompressOutput
```

Convertit le journal DNS et compresse la sortie dans une archive ZIP.  
Sortie : C:\Logs\dns.zip contenant dns.csv. Le fichier csv non compressé est supprimé après compression.

### EXEMPLE 8

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Both -CompressOutput
```

Convertit le journal avec statistiques et compresse les deux fichiers de sortie.  
Sortie : C:\Logs\dns.zip contenant dns.csv et dns_statistic.csv.

### EXEMPLE 9

```powershell
PS C:\> Get-ChildItem "C:\Logs\*.log" | .\Convert-DnsDebugLogFile.ps1 -RemoveSourceFile -CompressOutput
```

Traite plusieurs fichiers journaux, compresse la sortie et supprime les fichiers sources.  
Chaque fichier .log est converti en .zip compressé, puis le fichier source .log est supprimé.  
Idéal pour les pipelines automatisés d’archivage de journaux.

### EXEMPLE 10

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\old_dns.log" -RemoveSourceFile -Verbose
```

Convertit le fichier journal et supprime la source après traitement réussi.  
La sortie détaillée confirme la suppression du fichier. À utiliser avec précaution car les fichiers sources sont supprimés définitivement.

### EXEMPLE 11

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE'
```

Convertit un journal DNS provenant d’un serveur Windows allemand.  
À utiliser lorsque le fichier journal provient d’un serveur avec des paramètres régionaux différents.

### EXEMPLE 12

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture ([System.Globalization.CultureInfo]::GetCultureInfo('sv-SE'))
```

Convertit un journal DNS d’un serveur Windows suédois utilisant le format de date ISO (YYYY-MM-DD).  
Utile pour traiter des journaux de serveurs avec des paramètres régionaux différents.

### EXEMPLE 13

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'
```

Convertit un journal DNS d’un serveur allemand et formate les dates de sortie pour les systèmes américains.  
Utile pour traiter des journaux de serveurs internationaux destinés à des systèmes basés aux États-Unis.

### EXEMPLE 14

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
```

Convertit un journal DNS et formate les dates de sortie au format ISO 8601 (YYYY-MM-DD).  
Idéal pour la compatibilité multiplateforme ou les scénarios d’échange de données.

### EXEMPLE 15

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -WhatIf
```

Montre ce qui se passerait si la commande était exécutée sans créer de fichiers.  
Utile pour tester les paramètres avant de traiter les données réelles.

### EXEMPLE 16

```powershell
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -RemoveSourceFile -CompressOutput -WhatIf
```

Prévisualise le flux complet incluant compression et suppression des fichiers sources.  
Aucun fichier n’est créé, compressé ou supprimé — montre uniquement ce qui se passerait.

## PARAMÈTRES

### -CompressOutput

Compresse les fichiers CSV de sortie dans une archive ZIP après leur création.

Crée un fichier .zip contenant le(s) fichier(s) CSV généré(s), puis supprime les CSV non compressés.  
Le fichier ZIP est créé dans le même répertoire que le CSV de sortie avec le même nom de base.  
La compression se fait immédiatement après le traitement de chaque fichier pour gérer efficacement l’espace disque.

Avantages :  
- Réduit significativement l’espace disque utilisé (les fichiers CSV compressent très bien)  
- Simplifie la gestion et l’archivage des fichiers  
- Adapté au stockage à long terme des journaux traités

Exemple : le fichier 'dns.log' génère 'dns.csv' qui est compressé en 'dns.zip', puis 'dns.csv' est supprimé.

Compatible avec PowerShell 5.1+ et Windows Server 2016+.

```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

Optionnel.  
Si spécifié, ajoute une colonne ComputerName dans la sortie CSV avec la valeur indiquée.  
Utile pour consolider des journaux provenant de plusieurs serveurs DNS.

Important : ce n’est PAS une fonctionnalité de remoting.  
Le script traite uniquement des fichiers locaux.

```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

Demande une confirmation avant d’exécuter la cmdlet.

Si spécifié, demande confirmation avant :  
- Le traitement de chaque fichier journal DNS  
- La suppression des fichiers sources (lorsque -RemoveSourceFile est utilisé)  
- L’écrasement des fichiers de sortie existants

Utile pour un traitement interactif lorsque tu souhaites contrôler les fichiers traités.

```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: ''
```

### -Delimiter

Caractère délimiteur pour la sortie CSV.

Par défaut, point-virgule ';'

```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

Spécifie la culture utilisée pour analyser les valeurs date/heure dans le journal DNS.

Les journaux de débogage DNS utilisent le format de date de la locale Windows du serveur où le journal a été généré.  
Ce paramètre permet d’analyser des journaux provenant de serveurs avec des paramètres régionaux différents.

Par défaut, la culture courante ([System.Globalization.CultureInfo]::CurrentCulture).

Valeurs culture courantes :  
- 'de-DE' ou 'de-AT' : format allemand (JJ.MM.AAAA ou JJ/MM/AAAA)  
- 'en-US' : format américain (MM/JJ/AAAA)  
- 'en-GB' : format britannique (JJ/MM/AAAA)  
- 'sv-SE' : format suédois/ISO (AAAA-MM-JJ)

Exemple : -InputCulture 'de-DE' pour des journaux d’un serveur Windows allemand.  
Exemple : -InputCulture ([System.Globalization.CultureInfo]::GetCultureInfo('sv-SE')) pour des journaux suédois.

```yaml
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 5
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -InputFile

Chemin vers le fichier journal DNS à analyser.  
Supporte les tableaux pour traiter plusieurs fichiers.

```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: ''
```

### -OutputCulture

Spécifie la culture utilisée pour formater les valeurs date/heure dans les fichiers CSV de sortie.

Ce paramètre contrôle la façon dont les valeurs DateTime sont écrites dans la sortie CSV.  
Utile lorsque les fichiers CSV seront utilisés par des applications ou systèmes avec des paramètres régionaux spécifiques.

Par défaut, la culture courante ([System.Globalization.CultureInfo]::CurrentCulture).

Valeurs culture courantes :  
- 'en-US' : format américain (MM/JJ/AAAA)  
- 'de-DE' : format allemand (JJ.MM.AAAA)  
- 'en-GB' : format britannique (JJ/MM/AAAA)  
- 'sv-SE' : format suédois/ISO (AAAA-MM-JJ)

Exemple : -OutputCulture 'en-US' pour formater les dates pour les systèmes américains.  
Exemple : -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture) pour le format ISO.

```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: ''
```

### -OutputFile

Optionnel.  
Chemin du fichier CSV de sortie.  
Si non spécifié, utilise le nom du fichier d’entrée avec extension .csv.

Doit être un chemin de fichier, pas un répertoire.  
Si tu souhaites spécifier uniquement le répertoire de sortie, omets ce paramètre et le script utilisera le même répertoire que le fichier d’entrée.

```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

Spécifie le type de sortie à générer.

Valeurs valides :  
- 'CSV' : génère uniquement le fichier CSV avec les données analysées (par défaut)  
- 'Statistic' : génère uniquement le fichier de statistiques avec les données agrégées  
- 'Both' : génère à la fois les fichiers CSV et statistiques

Par défaut : 'Both'.

```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

Supprime le fichier journal DNS source après un traitement réussi.

Utilise ce commutateur pour supprimer automatiquement les fichiers d’entrée après qu’ils ont été analysés avec succès et que les fichiers de sortie ont été créés.  
Utile pour :  
- Pipelines automatisés de traitement de journaux  
- Gestion de l’espace disque dans les scénarios de collecte de journaux  
- Éviter le retraitement des fichiers déjà convertis

Fonctions de sécurité :  
- Supprime uniquement les fichiers après un traitement réussi et la création des fichiers de sortie  
- Ignore la suppression si le traitement échoue ou est interrompu  
- Ne peut pas être utilisé avec SkipHeaderValidation pour des raisons de sécurité

Attention : les fichiers sources sont supprimés définitivement.  
Assure-toi que les fichiers de sortie sont valides avant d’utiliser cette option.

```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

Ignore la validation de l’en-tête du journal DNS.

Par défaut, le script vérifie que les fichiers d’entrée ont une structure d’en-tête valide pour les journaux de débogage DNS.  
Utilise ce commutateur pour traiter les fichiers sans validation d’en-tête, ce qui peut être utile pour :  
- Traiter des formats de journaux modifiés ou personnalisés  
- Dépanner des problèmes de validation  
- Traiter des journaux avec des en-têtes non standards

Attention : l’utilisation de ce paramètre peut entraîner des erreurs de traitement si le fichier n’est pas un journal DNS valide.

```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

Montre ce qui se passerait si la cmdlet était exécutée.  
La cmdlet n’est pas réellement exécutée.

Si spécifié, affiche des informations détaillées sur les opérations qui seraient effectuées sans les exécuter.  
Utile pour :  
- Prévisualiser les fichiers qui seraient traités  
- Vérifier les chemins des fichiers de sortie avant traitement  
- Tester les scripts avant exécution en production

```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

Cette cmdlet supporte les paramètres communs : -Debug, -ErrorAction, -ErrorVariable,  
-InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable,  
-ProgressAction, -Verbose, -WarningAction, et -WarningVariable. Pour plus d’informations, voir  
[about_CommonParameters](https://go.microsoft.com/fwlink/?LinkID=113216).

## ENTRÉES

### System.String[]

## NOTES

Version :    1.2.0.0  
Auteur :     Andreas Bellstedt, Copilot  
Date :       2026-01-23  
Mots-clés :  Microsoft, Windows Server, DNSServer, DNS, DebugLog, LogParser

## LIENS CONNEXES

- [github.com/AndiBellstedt/DNSServer.DebugLogParser](https://github.com/AndiBellstedt/DNSServer.DebugLogParser)
