تحليل تصحيح DNS الرئيسي: دليل PowerShell

واحدة من أول الأمور التي يجب عليك القيام بها عند حل مشكلة مثل هذه هي تمكين تسجيل التصحيح لـ تسجيل DNS للتصحيح. ولكن عندما تجد نفسك مضطرًا للنظر في سجل التصحيح الذي يتم إنشاءه، فإنك على موعد مع مفاجأة غير سارة. اجعلها أسهل عن طريق إنشاء سكريبت محلل سجل تصحيح DNS باستخدام PowerShell!

كيفية إنشاء سكريبت تحليل سجل تصحيح DNS باستخدام PowerShell

لديك العديد من الخيارات المختلفة لإجراء التصحيح، ولكن في حالتي، أحتاج إلى مزيد من المعلومات بخصوص التحديثات الديناميكية. هذا هو شكل تكويني على أحد خوادم DNS الخاصة بي.

DNS Debug Logging

عند تمكين هذا، سيبدأ في إنشاء ملف تسجيل في المسار الذي تحدده والذي يبدو مشابهًا لهذا:

DNS Debug Log

الصف الأول من السطور المشطبة هو عنوان IP والصف الأخير هو سجل DNS الذي حاول تحديثه. تم تشطيب هذه لأسباب واضحة. اعتمادًا على الخيارات التي تختارها، يمكن أن يصبح هذا الملف السجل ضخمًا وليس في أسهل صيغة للقراءة.

ماذا لو أردت تصفية مخرجات على سبيل المثال إلى عنوان IP واحد فقط أو تقييد ذلك في إطار زمني معين؟ لا يمكنك فعل ذلك باستخدام ملف السجل الافتراضي. هذا هو السبب في أنني قمت بإنشاء سكريبت محلل سجل تصحيح DNS باستخدام PowerShell.

السكريبت أدناه يأخذ هذا ملف السجل ويحلله إلى ملف CSV لطيف يبدو مشابهًا لهذا:

PowerShellified DNS Debug Log

ذلك يبدو أفضل بكثير، أليس كذلك؟ يقوم البرنامج بفحص ملف السجل للعثور على أي أخطاء ويقوم بتحليل التاريخ وعنوان الآيبي والخطأ، ثم يضعها في ملف CSV بتنسيق جميل. كما يستبعد جميع عناوين آيبي لخوادم DNS.

لسبب ما، بغض النظر عن الخيار الذي تختاره، اكتشفت أن عناوين آيبي لخوادم DNS نفسها كانت تظهر بشكل متكرر. أحتاج فقط إلى معرفة عنوان الآيبي الخاص بالعميل الذي يواجه مشكلة في تحديث سجل 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/