À propos de cette documentation

Ceci est le site officiel de documentation pour DNSServer.DebugLogParser, un module PowerShell qui transforme les fichiers de journal de débogage du serveur DNS Windows en données CSV structurées et analysables.

À propos du module

DNSServer.DebugLogParser est né d’un besoin réel : les journaux de débogage du serveur DNS Windows sont lisibles par l’humain, mais pas adaptés à l’analyse ou au reporting. Ce module comble ce fossé en convertissant les fichiers journaux bruts en format CSV structuré, compatible avec des outils courants comme Excel, Power BI, bases de données SQL et systèmes SIEM.

Principes clés de conception :

  • Performance avant tout — optimisé pour des fichiers de plus de 100 Mo grâce à une entrée/sortie en streaming et des opérations sur chaînes
  • Compatibilité multi-édition — supporte PowerShell Desktop (5.1+) et Core (7.x)
  • Prêt pour la production — inclut validation des en-têtes, gestion des erreurs et compression optionnelle
  • Compatible pipeline — s’intègre naturellement à l’architecture pipeline de PowerShell

Ressources

Contribution

Les contributions sont les bienvenues. Si vous trouvez des problèmes, des erreurs ou avez des suggestions d’amélioration, veuillez ouvrir un ticket ou une pull request sur le dépôt GitHub.

1 - Aperçu

DNSServer.DebugLogParser est un module PowerShell qui transforme les fichiers de journal de débogage du serveur DNS Windows en données CSV structurées et analysables pour l’analyse de sécurité, la surveillance des performances, le dépannage et les rapports de conformité.

Qu’est-ce qu’un journal de débogage DNS ?

La journalisation de débogage DNS est une fonctionnalité du serveur DNS Windows qui enregistre des informations détaillées sur les opérations DNS. Lorsqu’elle est activée, le serveur DNS écrit des entrées de journal dans un fichier texte (généralement dns.log) dans le répertoire du serveur DNS.

Chaque entrée de journal contient jusqu’à 16 champs, notamment :

  • Date et heure de la requête
  • Protocole utilisé (UDP ou TCP)
  • Direction (Envoi ou Réception)
  • Adresse IP du client
  • Type de requête (A, AAAA, MX, PTR, etc.)
  • Nom de domaine interrogé
  • Code de réponse (NOERROR, NXDOMAIN, etc.)
  • Indicateurs et options de requête
  • Adresse IP en réponse (pour les requêtes réussies)
  • Numéros de port et autres détails techniques

Pourquoi analyser les journaux de débogage DNS ?

Les journaux DNS sont essentiels pour :

Dépannage

  • Diagnostiquer les échecs de résolution de noms
  • Identifier les clients ou applications mal configurés
  • Retracer la source des requêtes problématiques
  • Vérifier la bonne configuration DNS et les transferts de zone

Surveillance des performances

  • Identifier les sources de requêtes à fort volume
  • Analyser les types et motifs de requêtes pour optimiser l’infrastructure DNS
  • Détecter les problèmes de configuration générant un nombre excessif de requêtes
  • Suivre les temps de réponse et les taux de réussite
  • Surveiller la charge et la capacité du serveur DNS

Analyse de sécurité

  • Détecter les tentatives de tunneling DNS et d’exfiltration de données
  • Identifier les domaines associés aux malwares et serveurs de commande et contrôle
  • Suivre les motifs de requêtes suspects pouvant indiquer des systèmes compromis
  • Surveiller les attaques par amplification DNS
  • Enquêter sur les incidents de sécurité et tracer l’activité des attaquants

Conformité et audit

  • Répondre aux exigences réglementaires en matière de journalisation et de conservation
  • Documenter l’activité réseau pour les pistes d’audit
  • Générer des rapports pour la direction et les responsables conformité
  • Démontrer la diligence raisonnable dans la surveillance de la sécurité

Fonctionnement du module (vue d’ensemble)

Le module est optimisé pour les fichiers volumineux et transforme les journaux de débogage DNS en sortie CSV structurée. Il prend en charge les enregistrements multi-lignes (par exemple les blocs de détails PACKET et les lignes de continuation indentées) afin que les messages d’événements/diagnostics et les détails des paquets restent attachés au bon enregistrement.

Fonctionnalités clés :

  • Analyse les champs natifs des journaux de débogage DNS et produit une mise en forme CSV cohérente
  • Gère plusieurs versions du serveur DNS (2012 R2 à 2025)
  • Compatible avec PowerShell Desktop (5.1+) et Core (7.x)
  • Traite des fichiers de toute taille (testé avec des fichiers de plus de 100 Mo)
  • Valide les en-têtes des fichiers journaux pour garantir l’intégrité des données
  • Génère des résumés statistiques optionnels
  • Supporte le traitement par lots via le pipeline PowerShell
  • Compresse optionnellement les fichiers de sortie pour économiser de l’espace disque
  • Peut supprimer automatiquement les fichiers sources après traitement réussi
  • Analyse des dates sensible à la culture pour les journaux DNS internationaux
  • Formatage des dates sensible à la culture pour les exigences de sortie internationales

Licence et support

Le module est distribué sous licence MIT. Le support communautaire est disponible via les Issues GitHub.

2 - Formats de sortie

DNSServer.DebugLogParser peut générer deux types de sortie :

  • Un fichier de données CSV contenant toutes les entrées analysées
  • Des fichiers de statistiques optionnels pour une agrégation quotidienne

Pour voir des exemples concrets de chaque type de sortie, consulte l’exemple dans cet article.

Fichier de données CSV

Exemples de fichiers de sortie :

Le fichier de données CSV contient toutes les entrées de journal analysées avec les colonnes suivantes :

  • DateTime : Date et heure de la requête/réponse DNS
  • ThreadId : Identifiant interne du thread du serveur DNS
  • Context : Contexte de l’opération (par exemple Packet, Event, Note, DSPoll, Init, Lookup, Recurse, Remote, Tombstone)
  • PacketId : Identifiant du paquet DNS
  • Protocol : UDP ou TCP
  • Direction : Rcv (reçu/requête) ou Snd (envoyé/réponse)
  • ClientIP : Adresse IP du client
  • Xid : ID de transaction (hexadécimal)
  • Type : Requête ou Réponse
  • Opcode : Standard, Notify, Update, ou Inconnu
  • FlagsHex : Flags de la requête/réponse (hexadécimal)
  • FlagsChar : Flags décodés (Authoritative, Truncated, RecursionDesired, RecursionAvailable)
  • ResponseCode : NOERROR, NXDOMAIN, SERVFAIL, etc.
  • QuestionType : Type d’enregistrement DNS (A, AAAA, MX, PTR, etc.)
  • QuestionName : Nom de domaine interrogé
  • Information : Informations supplémentaires (pour Event/Note/etc. ; pour les blocs de détails Packet, contient la ligne d’en-tête détail TCP/UDP)
  • Details : Données JSON pour les entrées Packet incluant des blocs de détails (vide sinon)
  • ComputerName : Nom du serveur source (toujours présent ; vide si non spécifié)

Note : La colonne ComputerName est toujours incluse à la fin de chaque enregistrement pour garantir une structure de sortie cohérente. Cela facilite les scénarios de consolidation de journaux multi-serveurs.

Fichiers de statistiques (optionnels)

Exemples de fichiers de sortie :

Lorsque des statistiques sont générées, deux fichiers distincts sont créés :

1) Statistiques de contexte (*_Statistic.csv)

Colonnes :

  • Date : Date (yyyy-MM-dd)
  • Context : Nom du contexte (par exemple Packet, Event, Note)
  • Count : Nombre d’enregistrements
  • ComputerName : Nom du serveur source

2) Statistiques de paquet (*_PacketStatistic.csv)

Colonnes :

  • Date : Date (yyyy-MM-dd)
  • ClientIP : Adresse IP du client
  • Protocol : UDP ou TCP
  • Direction : Rcv ou Snd
  • QuestionType : Type d’enregistrement DNS
  • Count : Nombre d’enregistrements
  • ComputerName : Nom du serveur source

3 - Bonnes pratiques opérationnelles

Lors de l’utilisation de DNSServer.DebugLogParser en production :

  1. Planifie un traitement régulier

    • Utilise le Planificateur de tâches pour convertir automatiquement les nouveaux fichiers journaux quotidiennement ou hebdomadairement.
  2. Fais une rotation appropriée des journaux

    • Les journaux de débogage DNS peuvent rapidement grossir ; configure une rotation à une taille gérable (par exemple 100 Mo).
  3. Valide la sortie

    • Vérifie les premiers fichiers convertis avant d’automatiser complètement.
  4. Planifie les besoins en stockage

    • Même avec compression, prévois le stockage en fonction du volume DNS et de la durée de conservation.
  5. Sécurise les données sensibles

    • Les journaux DNS peuvent contenir des informations sensibles ; protège les sorties avec des contrôles d’accès appropriés.
  6. Documente ton flux de travail

    • Documente les plannings de traitement, les emplacements de stockage et l’utilisation pour l’analyse.
  7. Teste avec des fichiers d’exemple

    • Valide les paramètres et le format de sortie avant de traiter des journaux critiques.
  8. Surveille les erreurs

    • Sois vigilant face aux journaux corrompus, problèmes d’accès ou espace disque insuffisant.

4 - Dépannage

Problèmes courants et solutions

« Le fichier n’est pas un fichier journal de débogage DNS valide »

  • Assure-toi de convertir un vrai journal de débogage du serveur DNS.
  • Le fichier doit commencer par Message logging started at ou contenir des entrées de requêtes DNS.
  • Si tu es certain que le fichier est valide mais que l’en-tête diffère, utilise -SkipHeaderValidation.

Le fichier de sortie est vide ou incomplet

  • Vérifie que le fichier d’entrée contient des entrées de journal valides.
  • Certains journaux peuvent ne contenir que des informations d’en-tête s’il n’y a pas eu de requêtes.
  • Assure-toi que le fichier journal n’est pas corrompu et contient des données de requêtes réelles.

Le traitement est très lent

  • Vérifie que la mémoire est suffisante et que le disque n’est pas fortement sollicité.
  • Envisage de traiter des fichiers journaux plus petits.
  • Envisage d’utiliser -CompressOutput avec un traitement planifié pour gérer des lots plus petits.

Erreurs « Accès refusé »

  • Lance PowerShell avec les permissions appropriées pour lire les fichiers journaux source et écrire dans le répertoire de destination.
  • Les fichiers journaux DNS peuvent nécessiter un accès administrateur.

La sortie compressée est plus volumineuse que prévu

  • Les journaux avec beaucoup de valeurs uniques se compressent moins efficacement ; cela peut être normal.
  • La compression ZIP permet néanmoins généralement une réduction substantielle.

Le fichier de statistiques ne correspond pas aux attentes

  • Vérifie que tu utilises -OutputType Both ou -OutputType Statistic.
  • Les statistiques sont des totaux agrégés (groupements quotidiens), donc les valeurs représentent des totaux.

Signaler des problèmes

Si tu rencontres des problèmes non couverts ici :

  1. Vérifie que tu utilises la dernière version du module.
  2. Consulte les Issues GitHub pour des problèmes similaires.
  3. Rassemble les informations de diagnostic :
    • Version de PowerShell ($PSVersionTable)
    • Version du module (Get-Module DNSServer.DebugLogParser)
    • Fichier journal d’exemple (si possible)
    • Message d’erreur complet et trace de la pile
  4. Ouvre une nouvelle issue GitHub avec les détails.

5 - Référence des commandes du module

Ici, tu peux trouver une référence pour toutes les commandes du module. Cette référence est conçue pour t’aider à trouver rapidement la commande dont tu as besoin et comprendre comment l’utiliser efficacement.

En cliquant sur une commande, tu seras dirigé vers une page détaillée qui fournit des informations complètes sur la commande, y compris sa syntaxe, ses paramètres, des exemples, ainsi que des notes ou astuces supplémentaires pour son utilisation.

5.1 - Convert-DNSDebugLogFile

SYNOPSIS

Transforme les journaux de débogage DNS de Windows Server en un format CSV structuré pour analyse et rapports.

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

Cette cmdlet possède les alias suivants,

DESCRIPTION

Convertit les fichiers journaux de débogage DNS de Windows Server en données CSV structurées pouvant être analysées dans Excel, Power BI, bases de données SQL ou outils SIEM. Conçu pour l’analyse de sécurité, la surveillance des performances, le dépannage et les rapports de conformité.

La cmdlet analyse les journaux de débogage DNS et génère une sortie CSV cohérente pour l’analyse. La sortie CSV contient 18 colonnes, incluant une colonne Information pour le texte des événements/diagnostics, une colonne JSON optionnelle Details pour les blocs de détails des paquets, et une colonne ComputerName toujours présente (vide sauf si spécifiée).

FONCTIONNALITÉS CLÉS :

  • Traitement en streaming évitant le chargement complet en mémoire (adapté aux très gros journaux)
  • Analyse haute performance optimisée pour fichiers volumineux (100 Mo+)
  • Délimiteur CSV personnalisable (par défaut : point-virgule)
  • Résumés statistiques optionnels avec métriques agrégées
  • Filtrage contextuel (Packet, Event, Note et autres contextes) pour cibler certains types d’entrées
  • Analyse et formatage des dates sensibles à la culture pour serveurs internationaux
  • Support du pipeline pour traitement par lots de plusieurs fichiers
  • Compression optionnelle des fichiers de sortie (format ZIP)
  • Suppression automatique optionnelle des fichiers sources après traitement
  • Validation des en-têtes pour garantir l’intégrité des données

FORMAT DE SORTIE : La colonne ComputerName est toujours incluse à la fin de chaque enregistrement. Si le paramètre -ComputerName n’est pas spécifié, la colonne reste vide. Cela assure une structure de sortie cohérente pour les scénarios de consolidation multi-serveurs.

PERFORMANCE : Optimisé avec StreamReader/StreamWriter et buffers de 64 Ko, traitement en streaming pour une gestion mémoire efficace des gros fichiers, opérations sur chaînes plutôt que regex, génération CSV manuelle, et collecte efficace des statistiques via tables de hachage.

COMPATIBILITÉ :

  • PowerShell 5.1+ (versions Desktop et Core)
  • Windows Server 2016+
  • Formats de journaux DNS Server 2012 R2 à 2025

EXEMPLES

EXEMPLE 1

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

Convertit le journal DNS avec les paramètres par défaut (fichiers de données et statistiques avec délimiteur point-virgule).
Sortie :

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

EXEMPLE 2

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

Génère uniquement le fichier de données sans statistiques.
Sortie : C:\Logs\dns.csv

EXEMPLE 3

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

Génère uniquement les fichiers de statistiques avec métriques agrégées.
Sortie :

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

EXEMPLE 4

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

Convertit le journal vers un emplacement de sortie personnalisé.
Sortie : C:\Output\parsed.csv

EXEMPLE 5

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

Convertit avec délimiteur virgule et ajoute la colonne ComputerName avec la valeur “DNS01”.
Sortie :

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

EXEMPLE 6

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

Traitement par lots de plusieurs fichiers journaux DNS via pipeline.
Sortie : Pour chaque fichier .log, génère .csv et _statistic.csv

EXEMPLE 7

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

Convertit et compresse la sortie en archive ZIP.
Sortie : C:\Logs\dns.zip (contenant dns.csv + fichiers statistiques)

EXEMPLE 8

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

Convertit le journal et supprime le fichier source après traitement réussi.
Sortie détaillée confirme la suppression du fichier.

EXEMPLE 9

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

Analyse le format de date allemand (JJ.MM.AAAA) et produit en format US (MM/JJ/AAAA).
À utiliser pour traiter des journaux de serveurs avec paramètres régionaux différents.

EXEMPLE 10

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

Convertit uniquement les entrées de paquets DNS (requêtes/réponses), excluant les entrées EVENT et Note.
Utile pour se concentrer sur le trafic DNS réel.

EXEMPLE 11

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

Convertit à la fois les paquets DNS et les événements serveur, excluant Note et autres entrées.
Utile pour analyser le trafic DNS avec le contexte des événements serveur.

EXEMPLE 12

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

Archivage automatisé des journaux : traite tous les journaux, compresse la sortie et supprime les fichiers sources.
Idéal pour pipelines de traitement planifiés.

EXEMPLE 13

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

Traite un gros fichier journal avec analyse des détails désactivée pour maximiser la performance.
Les blocs de détails PACKET sont ignorés, la colonne Details reste vide.
À utiliser pour les très gros fichiers quand la structure détaillée des paquets n’est pas nécessaire.

PARAMÈTRES

-CompressOutput

Compresse les fichiers CSV de sortie dans une archive ZIP après création.

Crée un fichier .zip contenant les fichiers CSV générés, puis supprime les CSV non compressés.
Le fichier ZIP est créé dans le même dossier que le CSV de sortie avec le même nom de base.

Avantages :

  • Réduction significative de l’espace disque (les CSV compressent généralement à plus de 90%)
  • Simplifie la gestion et l’archivage des fichiers
  • Adapté au stockage longue durée

Exemple : Le fichier ‘dns.log’ génère ‘dns.csv’ compressé en ‘dns.zip’, puis ‘dns.csv’ est supprimé.

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

Spécifie la valeur de la colonne ComputerName dans la sortie CSV.
La colonne ComputerName est toujours présente dans la sortie – si ce paramètre n’est pas spécifié, la colonne sera vide.

Utilisez-le lors de la consolidation de journaux de plusieurs serveurs DNS pour identifier la source dans les ensembles de données combinés.

Note : Ce n’est PAS un paramètre de télécommande.
Il sert uniquement à étiqueter la sortie.
Si vous indiquez un chemin UNC à -InputFile, le fichier est lu depuis ce chemin (pas d’exécution distante WinRM).

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 afin de contrôler les fichiers traités.

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

Filtre les types d’entrées du journal à inclure dans la sortie.
Accepte une ou plusieurs valeurs.

Les journaux de débogage DNS contiennent différents types de contexte :

  • PACKET : informations sur les paquets de requêtes et réponses DNS (données principales)
  • EVENT : événements du serveur DNS (ex. : « Le serveur DNS a démarré. »)
  • Note : notes et avertissements diagnostics (ex. : erreurs de socket, états internes)
  • DSPoll, Init, Lookup, Recurse, Remote, Tombstone : autres types de contexte

Valeurs valides :

  • ‘All’ : inclut tous les types de contexte (par défaut)
  • ‘Packet’ : inclut uniquement les entrées PACKET (requêtes/réponses DNS)
  • ‘Event’ : inclut uniquement les entrées EVENT (événements serveur)
  • ‘Note’ : inclut uniquement les entrées Note (informations diagnostics)
  • Toute combinaison : spécifiez plusieurs valeurs pour inclure des types spécifiques

Par défaut : All

Exemples :

  • ‘Packet’ filtre uniquement le trafic DNS
  • ‘Packet’,‘Event’ inclut trafic DNS et événements serveur
  • ‘Note’,‘Event’ inclut notes diagnostics et événements serveur

Note : En filtrant sur ‘Event’ ou ‘Note’, seules les colonnes DateTime, ThreadId, Context et Information contiennent des données. Les autres colonnes (Protocol, ClientIP, etc.) restent vides.

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

Spécifie le caractère délimiteur pour la sortie CSV.

Par défaut : point-virgule (;)

Alternatives courantes : virgule (,), tabulation (`t), barre verticale (|)

Utilisez le point-virgule dans les régions où la virgule est séparateur décimal (Europe).
Utilisez la virgule pour les outils CSV standard et bases de données qui attendent des valeurs séparées par des virgules.

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/locale 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é.
Utilisez ce paramètre pour traiter des journaux de serveurs avec des paramètres régionaux différents.

Par défaut : culture actuelle

Exemples courants :

  • ‘de-DE’ ou ‘de-AT’ : format allemand (JJ.MM.AAAA ou JJ/MM/AAAA)
  • ’en-US’ : format US (MM/JJ/AAAA avec AM/PM)
  • ’en-GB’ : format UK (JJ/MM/AAAA avec heure 24h)
  • ‘sv-SE’ : format suédois/ISO (AAAA-MM-JJ)
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

Spécifie le chemin du fichier journal DNS à analyser.
Supporte les tableaux pour traiter plusieurs fichiers.

Accepte l’entrée par pipeline depuis Get-ChildItem ou autres cmdlets produisant des fichiers.

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

Ignore l’analyse des blocs de détails PACKET en format JSON structuré.

Si spécifié, les enregistrements PACKET avec blocs de détails auront la ligne info TCP/UDP dans la colonne Information, mais la colonne Details restera vide.
Cela améliore significativement la performance pour les gros fichiers journaux quand l’analyse détaillée des paquets n’est pas nécessaire.

Utilisez ce commutateur lorsque :

  • Vous traitez de très gros fichiers journaux (100 Mo+) et n’avez besoin que des informations de requête basiques
  • La structure détaillée (flags Message, sections DNS) n’est pas requise pour l’analyse
  • La vitesse d’analyse prime sur la complétude des données

Impact sur la performance : peut améliorer la vitesse de traitement de 30 à 50 % pour les journaux avec beaucoup de blocs de détails 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

Spécifie la culture/locale utilisée pour formater les valeurs date/heure dans les fichiers CSV de sortie.

Contrôle la manière dont les valeurs DateTime sont écrites dans le CSV.
Utilisez-le lorsque les fichiers CSV seront consommés par des applications ou systèmes avec des paramètres régionaux spécifiques.

Par défaut : culture actuelle

Exemples courants :

  • ’en-US’ : format US (MM/JJ/AAAA)
  • ‘de-DE’ : format allemand (JJ.MM.AAAA)
  • ‘sv-SE’ ou InvariantCulture : format ISO (AAAA-MM-JJ) pour compatibilité maximale
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

Spécifie le chemin du fichier CSV de sortie.
Si non spécifié, utilise le nom du fichier d’entrée avec extension .csv dans le même dossier que le fichier d’entrée.

Important : Doit être un chemin de fichier, pas un répertoire.
Si vous souhaitez utiliser le dossier du fichier d’entrée avec un nom personnalisé, spécifiez le chemin complet incluant le nom de fichier.

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 de données avec toutes les entrées analysées
  • ‘Statistic’ : génère uniquement les fichiers de statistiques avec métriques agrégées
  • ‘Both’ : génère à la fois les fichiers de données et de statistiques (par défaut)

Par défaut : Both

Lorsque les statistiques sont générées, deux fichiers séparés sont créés :

  • ‘_Statistic.csv’ : compte-rendu résumé par type de contexte et par jour (Date, Context, Count, ComputerName)
  • ‘_PacketStatistic.csv’ : compte détaillé PACKET par jour selon IP client, protocole, direction et type de requête (Date, ClientIP, Protocol, Direction, QuestionType, Count, 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

Supprime le fichier journal DNS source après un traitement réussi.

Utilisez-le pour les pipelines automatisés de traitement de journaux ou la gestion d’espace disque.
Le fichier source n’est supprimé que si le traitement se termine avec succès et que tous les fichiers de sortie sont créés.

Sécurité : Ne peut pas être utilisé avec -SkipHeaderValidation pour éviter la suppression accidentelle de fichiers invalides.

Avertissement : Les fichiers sources sont supprimés définitivement.
Assurez-vous que les fichiers de sortie sont valides avant d’utiliser cette option.

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, la cmdlet vérifie que les fichiers d’entrée ont un en-tête valide de journal de débogage DNS Server.
Utilisez ce commutateur pour traiter des fichiers sans validation, utile pour :

  • Formats de journaux modifiés ou personnalisés
  • Dépannage de problèmes de validation
  • Journaux non standards ou pré-traités

Avertissement : Peut entraîner des erreurs de traitement si le fichier n’est pas un journal DNS valide.

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

Affiche 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
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.

INPUTS

System.String[]

NOTES

Version : 1.7.1.1
Auteur : Andi Bellstedt, Copilot
Date : 2026-01-26
Mots-clés : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser

LIENS ASSOCIÉS

6 - Exemples d'utilisation

Ici, vous trouverez des exemples pratiques d’utilisation du module dans des scénarios réels. Ces exemples sont conçus pour vous aider à comprendre comment appliquer les fonctionnalités du module.

Voici des exemples un peu plus approfondis et contextuels. Si vous souhaitez uniquement l’utilisation des commandes du module, consultez la référence des commandes.

6.1 - Flux de travail d'analyse de sécurité avec SQL Server

Convertissez les journaux de débogage DNS en CSV avec DNSServer.DebugLogParser, importez le résultat dans SQL Server, et exécutez une requête simple pour détecter une activité suspecte sur les enregistrements TXT.

Cet exemple montre un flux de travail pratique pour l’analyse de sécurité : analyser un journal de débogage DNS avec Convert-DNSDebugLogFile, importer le CSV généré dans SQL Server, et exécuter une requête qui met en évidence des volumes anormalement élevés de requêtes sur les enregistrements TXT.

Pour une meilleure interopérabilité, cet exemple écrit les horodatages dans un format proche de l’ISO en utilisant -OutputCulture 'sv-SE'.

Modules requis

Cet exemple utilise les modules PowerShell suivants :

  • DNSServer.DebugLogParser
  • SqlServer

Installe-les si besoin :

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

Scénario

Utilise ce flux de travail lorsque tu souhaites transférer les données analysées d’un journal de débogage DNS dans SQL Server afin de pouvoir :

  • rechercher efficacement dans de grands ensembles de données
  • créer des requêtes de détection répétables
  • corréler l’activité entre plusieurs serveurs DNS
  • conserver des données normalisées pour des investigations ultérieures

Résultat de l’étape de conversion

Convert-DNSDebugLogFile n’écrit pas directement dans SQL Server. Il crée d’abord un fichier CSV. Ce fichier CSV est le jeu de données importé dans la base.

Dans cet exemple :

  • journal d’entrée : C:\Administration\Logs\DNS\dns.log
  • CSV généré : C:\Administration\Logs\DNS\dns.csv
  • table cible : dbo.DNSQueries

Créer la table cible

Exécute la commande suivante une fois dans SQL Server pour créer la table cible.

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;

Convertir le journal et importer le CSV

L’exemple PowerShell suivant réalise le flux complet :

  1. importe les modules requis
  2. convertit le journal de débogage DNS en CSV
  3. charge le CSV généré
  4. importe en masse les lignes dans 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 "Le fichier CSV généré '$csvPath' ne contient aucune ligne."
}

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

Requête pour détecter une activité suspecte sur les enregistrements TXT

Une fois les données dans SQL Server, tu peux rechercher les clients qui émettent un nombre anormalement élevé de requêtes sur les enregistrements 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;

Si tu préfères exécuter la requête depuis PowerShell, utilise Invoke-Sqlcmd du module 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

Pourquoi les requêtes TXT sont intéressantes

Un volume élevé de requêtes sur les enregistrements TXT peut valoir la peine d’être examiné car cela peut indiquer :

  • un tunnel DNS
  • une exfiltration de données via DNS
  • un abus des enregistrements TXT par des malwares ou des outils
  • des clients anormalement bruyants ou mal configurés

Cette requête n’est qu’un point de départ. En production, tu devrais ajuster le seuil et ajouter des filtres adaptés à ton environnement.

Notes opérationnelles

  • Import-Csv charge le fichier complet en mémoire. Pour des exports de journaux très volumineux, envisage une approche en streaming plutôt que de construire un DataTable complet.
  • Garde -ComputerName dans l’étape de conversion pour que les enregistrements restent attribuables après ingestion centralisée.
  • Utilise un délimiteur et une culture cohérents lors de l’export et de l’import.
  • Vérifie la rétention, l’indexation et le contrôle d’accès dans SQL Server avant d’utiliser ce flux pour un stockage à long terme.

6.2 - Utilisation pratique dans un environnement de domaine (collecte et conversion pilotées par GPO)

Cet exemple montre comment mettre en œuvre un flux de travail piloté par GPO pour collecter et convertir les journaux de débogage DNS sur les contrôleurs de domaine.

Ce document présente un exemple pratique et complet d’exécution de DNSServer.DebugLogParser dans un environnement de domaine Active Directory, axé sur la conversion des journaux de débogage du serveur DNS Windows sur les contrôleurs de domaine.

Cet exemple est accompagné d’une archive ZIP, qui fournit les artefacts de stratégie utilisés pour mettre en œuvre le flux de travail décrit ici.
Les artefacts les plus pertinents sont le manifest de sauvegarde, le rapport GPO, le Files.xml, le Set-DNSServerDebugLogging.ps1, et le ScheduledTasks.xml.

Scénario

  • Plusieurs contrôleurs de domaine (DC) hébergent le rôle de serveur DNS.
  • La journalisation de débogage DNS est activée et configurée de manière cohérente sur chaque DC via une tâche planifiée (écriture des fichiers journaux dans C:\Administration\Logs\DNSServer).
  • Un processus centralisé convertit les journaux en CSV pour :
    • l’analyse de sécurité
    • les rapports opérationnels
    • le dépannage
    • la conformité/la rétention

Résultats visés

  • Paramètres de conversion cohérents sur tous les DC
  • Emplacement et nommage de sortie prévisibles
  • Compression optionnelle pour réduire l’espace de stockage
  • Sorties statistiques optionnelles pour des synthèses quotidiennes rapides
  • Risque minimal côté hôte, avec des considérations explicites de relance et de nettoyage

Architecture suggérée

Modèle de collecte : conversion locale + extraction centrale

  1. Chaque DC écrit les journaux de débogage DNS sur disque avec rotation activée.
  2. Chaque DC convertit les fichiers *.log archivés en CSV de données et CSV statistiques, puis compresse les sorties en *.zip selon un planning (Planificateur de tâches).
  3. Les sorties sont écrites à côté des fichiers journaux pour garder le pipeline simple.
  4. Un serveur central collecte les sorties *.zip, par exemple via ingestion par partage de fichiers, copie planifiée, agent SIEM ou collecteur basé sur agent.

Ce modèle minimise les lectures réseau de gros fichiers journaux bruts et maintient l’analyse proche des données.

Flux de travail GPO

Le flux de travail est mis en œuvre via la stratégie de groupe (configuration ordinateur) pour garantir des paramètres cohérents sur tous les contrôleurs de domaine.

Implémentation de référence incluse dans ce dépôt (rapport GPO) :

  • Nom de l’archive/rapport : T0-C-Analytics-DNSDebugLogging
  • ID de sauvegarde : {2B6F16BC-0E7C-4787-83D7-2854FED882EE}
  • Cible du lien GPO : corp.company.com/Domain Controllers
  • Filtre d’élément (utilisé pour le déploiement de fichiers et les tâches planifiées) : s’applique uniquement si C:\Windows\System32\dns.exe existe

1) Prérequis (dossiers + module)

La sauvegarde fournie suppose que ces dossiers existent déjà. Ajoutez des éléments GPP séparés si vous souhaitez que le déploiement les crée automatiquement :

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

La sauvegarde fournie suppose également que Convert-DNSDebugLogFile est déjà disponible sur les DC. La tâche de conversion lance Windows PowerShell 5.1 avec -NoProfile et n’importe pas explicitement le module, donc le module doit être installé dans un chemin de module Windows PowerShell machine-wide visible par LocalSystem. Approches recommandées :

  • Installer DNSServer.DebugLogParser sur les DC, par exemple depuis PowerShell Gallery (si la politique le permet).
  • Déployer le module via un dépôt interne / partage de fichiers pour qu’il soit détectable dans $env:PSModulePath
  • Ajouter un Import-Module explicite dans l’action de la tâche si vous souhaitez un chargement déterministe

2) Déployer le script de configuration de la journalisation de débogage (GPP Fichiers)

La GPO déploie le script :

  • Source (dans SYSVOL via GPP) : %GptPath%\Preferences\Files\Set-DNSServerDebugLogging.ps1
  • Cible (sur chaque DC) : C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1

Ceci est implémenté dans l’élément de préférence GPP Fichiers dans Files.xml.

3) Tâche planifiée : configurer la journalisation de débogage DNS

La GPO crée une tâche planifiée nommée Set-DNSServerDebugLogging.

  • Contexte de sécurité dans la sauvegarde fournie : SYSTEM avec type de connexion S4U
  • Déclencheur dans la sauvegarde fournie : quotidien (heure de début 2025-03-01T00:00:01)
  • Action dans ScheduledTasks.xml :
    • powershell.exe -ExecutionPolicy RemoteSigned -command " & { C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1 }"
    • Répertoire de travail : C:\Administration\Scripts

Le script Set-DNSServerDebugLogging.ps1 configure la journalisation de débogage DNS via Get-DnsServerDiagnostics / Set-DnsServerDiagnostics et notamment :

  • Active la journalisation dans un fichier + rotation
  • Écrit dans : C:\Administration\Logs\DNSServer\DnsDebugLog_<COMPUTERNAME>.<Domain>_.log
  • Utilise une taille de rotation de 10 Mo par fichier
  • Capture principalement l’activité liée aux requêtes (requêtes + notifications + mises à jour + transactions de questions) et exclut la journalisation complète des paquets

4) Tâche planifiée : convertir les journaux de débogage archivés en CSV compressé

La GPO crée une tâche planifiée nommée Convert-DNSDebugLogs.

  • Contexte de sécurité dans la sauvegarde fournie : SYSTEM avec type de connexion InteractiveToken
  • Déclencheur dans la sauvegarde fournie : quotidien (heure de début 2026-01-01T00:30:00)
  • Répertoire de travail : C:\Administration\Logs\DNSServer
  • Action dans ScheduledTasks.xml (formaté pour lisibilité) :
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

Notes de conception :

  • Select-Object -Skip 1 évite intentionnellement de traiter le fichier journal le plus récent (actif).
  • Cela signifie que les données actuelles ne sont exportées qu’après rotation ; sur des DC à faible volume, le journal actif peut rester non traité pendant plus d’un jour.
  • Parce que Convert-DNSDebugLogFile utilise par défaut -OutputFile « même dossier, même nom, .csv », les sorties se trouvent à côté des entrées *.log.
  • Avec -CompressOutput, chaque journal traité produit un *.zip et les CSV intermédiaires sont supprimés.
  • À moins d’archiver ou supprimer les fichiers *.log traités, les exécutions ultérieures retraiteront chaque journal non actif.
  • La tâche génère une erreur si $Error.Count -gt 0 pour signaler un échec.

5) Ingestion centrale

Options (choisir une) :

  • Ingestion par partage de fichiers : le DC écrit (ou copie) C:\Administration\Logs\DNSServer\*.zip vers \\fileserver\share\dns\$env:COMPUTERNAME\... (accorder les droits de partage et NTFS aux comptes ordinateurs DC ou au groupe Domain Controllers si la tâche s’exécute en SYSTEM)
  • Modèle pull : un job central lit \\dc\C$\Administration\Logs\DNSServer\*.zip (moins préféré ; nécessite les partages admin)
  • Agent forwarder : SIEM / pipeline de logs qui expédie les sorties *.zip

Considérations opérationnelles

  • Moindre privilège : les tâches s’exécutent en SYSTEM ; assurez-vous que les dossiers locaux sont accessibles en écriture et que toute cible UNC accorde l’accès au compte ordinateur si utilisée.
  • Politique de signature : les deux tâches utilisent -ExecutionPolicy RemoteSigned ; signez ou débloquez le script et le module déployés selon votre politique.
  • Utilisation disque : -CompressOutput aide significativement, mais ce flux de travail ne supprime pas les journaux sources ; planifiez la rétention et le nettoyage.
  • Comportement de retraitement : sauf archivage ou suppression des journaux traités, la tâche de conversion retraitera chaque fichier *.log non actif lors des exécutions ultérieures. C’est simple et robuste, mais cela peut écraser les sorties et créer des doublons en aval si votre collecteur ne déduplique pas.
  • Consolidation multi-DC : -ComputerName $env:COMPUTERNAME est inclus pour que les jeux de données consolidés restent traçables.
  • Validation : la validation des en-têtes reste activée car la tâche n’utilise pas -SkipHeaderValidation (recommandé).

Valider et adapter (avec le ZIP)

Utilisez l’archive ZIP comme implémentation de référence, puis alignez les aspects suivants à votre environnement :

  • Portée cible : quels DC / OU reçoivent la stratégie
  • Identité d’exécution : confirmez que les deux tâches planifiées utilisent le type de connexion prévu (S4U vs InteractiveToken) ou normalisez-les selon votre standard
  • Création des dossiers : décidez si C:\Administration\Scripts et C:\Administration\Logs\DNSServer sont pré-créés ailleurs ou doivent être créés par des éléments GPP supplémentaires
  • Chemins : confirmez que C:\Administration\Scripts et C:\Administration\Logs\DNSServer correspondent à vos standards
  • Rétention : décidez de conserver ou non les journaux bruts et pour combien de temps (surtout si vous activez les options de nettoyage)
  • Ingestion : confirmez où les sorties CSV/ZIP sont écrites et comment elles sont collectées centralement

Si vous souhaitez valider la configuration exacte de la GPO sans l’importer, les sources officielles dans ce dépôt sont :

6.3 - Exemple de tâche planifiée

Cet exemple montre comment créer une tâche planifiée Windows qui exécute un script PowerShell pour traiter quotidiennement les journaux de débogage DNS.

Ce script crée une tâche planifiée Windows qui s’exécute tous les jours à 2h00 du matin. Il importe le module et traite tous les fichiers journaux dans le dossier où le script est exécuté (dans cet exemple “C:\Administration\Logs\DNS”). Le processus compresse la sortie dans des fichiers ZIP et supprime les originaux pour maintenir la propreté.

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