Master DNS Debug Parsing: Ein PowerShell-Leitfaden

Eine der ersten Dinge, die Sie tun sollten, wenn Sie ein Problem wie dieses beheben möchten, ist das Aktivieren der DNS-Debugprotokollierung. Aber wenn Sie sich das Protokoll ansehen müssen, das die Debugprotokollierung erstellt, werden Sie eine unangenehme Überraschung erleben. Erleichtern Sie sich die Arbeit, indem Sie ein DNS-Debugprotokoll-Analyseskript mit PowerShell erstellen!

So erstellen Sie einen DNS-Debugprotokoll-Analysator mit PowerShell

Sie haben eine Vielzahl von Optionen zur Fehlersuche, aber in meinem Fall benötige ich weitere Informationen zu dynamischen Updates. So sieht meine Konfiguration auf einem meiner DNS-Server aus.

DNS Debug Logging

Wenn dies aktiviert ist, wird eine Protokolldatei im von Ihnen angegebenen Dateipfad erstellt, die wie folgt aussieht:

DNS Debug Log

Die ersten markierten Zeilen sind die IP-Adresse und die letzten Zeilen sind die DNS-Einträge, die aktualisiert werden sollen. Aus offensichtlichen Gründen wurden diese markiert. Je nach gewählten Optionen kann diese Protokolldatei enorm werden und ist nicht im einfachsten Format lesbar.

Was ist, wenn ich nur eine einzelne IP filtern oder den Zeitraum eingrenzen möchte? Das können Sie mit der Standardprotokolldatei nicht tun. Deshalb habe ich ein DNS-Debugprotokoll-Analyseskript mit PowerShell erstellt.

Das folgende Skript nimmt diese Protokolldatei und analysiert sie in eine schöne CSV-Datei, die wie folgt aussieht:

PowerShellified DNS Debug Log

Das sieht viel besser aus, oder? Das Skript durchsucht die Protokolldatei nach Fehlern und analysiert das Datum, die IP und den Fehler, und platziert sie in eine schön formatierte CSV-Datei. Es schließt auch alle DNS-Server-IPs aus.

Aus irgendeinem Grund tauchen trotzdem die DNS-Server-IPs immer wieder auf, egal welche Option du wählst. Ich muss nur die Client-IP-Adresse wissen, die Probleme beim Aktualisieren ihres DNS-Eintrags hat.


#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/