Maître DNS Débogage Analyse : Un Guide PowerShell

L’une des premières choses que vous devriez faire lorsque vous dépannez un problème comme celui-ci est d’activer le journal de débogage DNS. Mais lorsque vous êtes contraint de consulter le journal que crée le débogage, vous êtes confronté à un réveil brutal. Facilitez-vous la tâche en créant un script d’analyseur de journal de débogage DNS avec PowerShell!

Comment construire un analyseur de journal de débogage DNS avec PowerShell

Vous avez une multitude d’options différentes pour le débogage, mais dans mon cas, j’ai besoin de plus d’informations concernant les mises à jour dynamiques. Voici à quoi ressemble ma configuration sur l’un de mes serveurs DNS.

DNS Debug Logging

Lorsque cela est activé, cela commencera à créer un fichier journal dans le chemin d’accès que vous spécifiez, qui ressemble à ceci:

DNS Debug Log

La première ligne des lignes barrées est l’adresse IP et la dernière ligne est l’enregistrement DNS qu’elle a tenté de mettre à jour. Ces lignes ont été barrées pour des raisons évidentes. Selon les options que vous choisissez, ce fichier journal peut devenir énorme et n’est pas dans le format le plus facile à lire.

Que se passe-t-il si je veux filtrer juste une seule IP ou la restreindre à une certaine période? Vous ne pouvez pas le faire avec le fichier journal par défaut. C’est pourquoi j’ai créé un script d’analyseur de journal de débogage DNS avec PowerShell.

Le script ci-dessous prend ce fichier journal et le convertit en un joli fichier CSV qui ressemble à ceci :

PowerShellified DNS Debug Log

Cela semble bien meilleur, non ? Le script examine le fichier journal à la recherche d’erreurs et extrait la date, l’adresse IP et l’erreur, puis les place dans un fichier CSV bien formaté. Il exclut également toutes les adresses IP des serveurs DNS.

Pour une raison quelconque, peu importe l’option choisie, les adresses IP des serveurs DNS continuent de s’afficher. Je dois simplement connaître l’adresse IP du client qui rencontre un problème lors de la mise à jour de son enregistrement DNS.


#requires -Module ActiveDirectory
$dnsServer = ## This is the server name as a NETBIOS or FQDN
$OutputFilePath = C:\DNSDebugLogSummary.csv ## The CSV file that will be created
## The log file you specified in the debug logging dialog box
$DnsDebugLogFilePath = « \$dnsServer\c$\DnsDebugLog.log« 
## Find all of the DNS server IPs in the current domain
$DnsServerIPs = ((Get-ADDomain).ReplicaDirectoryServers | Resolve-DnsName).IPAddress
Write-Verbose Message « Found DNS servers $($DnsServerIPs -join ,)« 
## Find all lines in the log file that don’t contain the strings ‘NOERROR’ or are blank. This
## retrieves only the lines with errors in them.
Select-String Pattern NOERROR|^\s* Path $DnsDebugLogFilePath -NotMatch | foreach {
try {
## Find lines containing an IP address
if ($_.Line -match \b(?:\d{1,3}\.){3}\d{1,3}\b) {
Write-Verbose Message Found line with IP address.
$IP = $Matches[0]
## If the IP isn’t a DNS server it must be a client IP
if ($DnsServerIPs -notcontains $IP) {
Write-Verbose « Processing IP ‘$IP« 
$Split = $_.Line.Split( )
$Date = $Split[0]
$Time = $Split[1] + $Split[2]
$Err = [regex]::Match($_.Line, \[(.*)\]).Groups[1].Value
[pscustomobject]@{ Date = « $Date $Time« ; IP = $IP; Error = $Err }
}
}
} catch {
Write-Warning $_.Exception.Message
}
} | Export-Csv Path $OutputFilePath Append NoTypeInformation

Source:
https://adamtheautomator.com/dns-debug-log-parser/