Uno de los primeros pasos que debes realizar al solucionar un problema como este es habilitar el registro de depuración DNS. Pero cuando te ves obligado a examinar el registro que genera el registro de depuración, te llevas una sorpresa desagradable. ¡Facilítalo creando un script de análisis de registro de depuración DNS con PowerShell!
Cómo construir un analizador de registros de depuración DNS con PowerShell
Tienes muchas opciones diferentes para la depuración, pero en mi caso, necesito más información sobre las actualizaciones dinámicas. Así es como se ve la configuración en uno de mis servidores DNS.

Cuando esto está habilitado, comenzará a crear un archivo de registro en la ruta de archivo que especifiques, que se verá así:

La primera fila de líneas marcadas es la dirección IP y la última fila es el registro DNS que intentó actualizar. Estos fueron marcados por razones obvias. Dependiendo de las opciones que elijas, este archivo de registro puede volverse enorme y no está en el formato más fácil de leer.
¿Y si quiero filtrar solo una IP o reducirlo por un cierto período de tiempo? No puedes hacer eso con el archivo de registro predeterminado. Por eso creé un script de análisis de registro de depuración DNS con PowerShell.
El script a continuación toma este archivo de registro y lo analiza en un bonito archivo CSV que se ve así:

¡Eso se ve mucho mejor, ¿verdad? El script busca en el archivo de registro cualquier error y analiza la fecha, la IP y el error, y lo coloca en un CSV bien formateado. También excluye todas las IPs de los servidores DNS.
Por alguna razón, sin importar qué opción elijas, descubrí que las IPs de los servidores DNS seguían apareciendo. Solo necesito saber la dirección IP del cliente que está teniendo problemas para actualizar su registro DNS.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 |