Uma das primeiras coisas que você deve fazer ao solucionar um problema como este é habilitar o registro de depuração DNS. Mas quando você é forçado a examinar o registro que a depuração cria, está prestes a ter uma surpresa desagradável. Facilite as coisas criando um script de análise de registro de depuração DNS com PowerShell!
Como Construir um Analisador de Registro de Depuração DNS com PowerShell
Você tem uma tonelada de opções diferentes para depurar, mas no meu caso, preciso de mais informações sobre atualizações dinâmicas. É assim que minha configuração parece em um dos meus servidores DNS.

Quando isso está habilitado, começará a criar um arquivo de registro no caminho do arquivo que você especificar, que se parece com isso:

A primeira linha de linhas marcadas é o endereço IP e a última linha é o registro DNS que tentou atualizar. Estes foram marcados por razões óbvias. Dependendo das opções que você escolher, este arquivo de registro pode se tornar enorme e não está no formato mais fácil de ler.
E se eu quiser filtrar apenas um único IP ou reduzi-lo por um certo período de tempo? Você não pode fazer isso com o arquivo de registro padrão. É por isso que criei um script de análise de registro de depuração DNS com PowerShell.
O script abaixo pega este arquivo de registro e o analisa em um arquivo CSV agradável que se parece com isso:

Isso parece muito melhor, certo? O script examina o arquivo de log em busca de erros e extrai a data, o IP e o erro, colocando tudo em um CSV formatado. Ele também exclui todos os IPs dos servidores DNS.
Por alguma razão, independentemente da opção escolhida, percebi que os IPs dos servidores DNS continuavam aparecendo. Eu só preciso saber o endereço IP do cliente que está com problemas para atualizar seu 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 |