Master DNS Debug Parsing: Um Guia PowerShell

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.

DNS Debug Logging

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

DNS Debug Log

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:

PowerShellified DNS Debug Log

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.


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