Master DNS Debug Parsing: Una guida PowerShell

Una delle prime cose da fare quando si riscontra un problema come questo è abilitare la registrazione di debug DNS. Ma quando si è costretti a guardare il registro che la registrazione di debug crea, si avrà una brutta sorpresa. Facilita il tutto creando uno script di analisi del registro di debug DNS con PowerShell!

Come creare uno script di analisi del registro di debug DNS con PowerShell

Si hanno molte opzioni diverse per il debug, ma nel mio caso ho bisogno di ulteriori informazioni sulle aggiornamenti dinamiche. Ecco come è configurato uno dei miei server DNS.

DNS Debug Logging

Quando questa opzione è abilitata, inizia a creare un file di registro nel percorso specificato, che si presenta così:

DNS Debug Log

La prima riga delle linee oscurate è l’indirizzo IP e l’ultima riga è il record DNS che ha tentato di aggiornare. Queste righe sono state oscurate per ovvi motivi. A seconda delle opzioni scelte, il file di registro può diventare enorme e non è nel formato più facile da leggere.

Cosa succede se voglio filtrare solo un singolo indirizzo IP o restringerlo in base a un certo intervallo di tempo? Non puoi farlo con il file di registro predefinito. Ecco perché ho creato uno script di analisi del registro di debug DNS con PowerShell.

Lo script di seguito prende questo file di registro e lo analizza in un bel file CSV che si presenta così:

PowerShellified DNS Debug Log

Questo sembra molto meglio, giusto? Lo script esamina il file di registro alla ricerca di errori, analizza la data, l’IP e l’errore e li inserisce in un file CSV ben formattato. Esclude anche tutti gli indirizzi IP dei server DNS.

Per qualche motivo, indipendentemente dall’opzione scelta, ho notato che gli indirizzi IP dei server DNS continuavano a comparire. Ho solo bisogno di conoscere l’indirizzo IP del client che sta avendo problemi nell’aggiornare il suo record 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/