ค้นหาเว็บไซต์

ส่งออกบันทึก DNS เป็น CSV ด้วย PowerShell


คุณต้องการสำรองข้อมูลบันทึก DNS ทั้งหมดจาก Windows DNS ของคุณ DNS Manager มีข้อจำกัดอย่างมากกับการส่งออกดังกล่าว วิธีเดียวที่จะได้รับการส่งออกบันทึก DNS ที่ดีคือการใช้ PowerShell ในบทความนี้ คุณจะได้เรียนรู้วิธีส่งออกบันทึก DNS เป็นไฟล์ CSV ด้วย PowerShell

ส่งออกโซน DNS เดียวจาก DNS Manager

มาดูวิธีส่งออกบันทึกทั้งหมดจากโซน DNS เดียวในตัวจัดการ DNS:

  1. เปิด ตัวจัดการ DNS

  2. คลิกขวาที่ โซน

  3. เลือก รายการส่งออก…

  1. ตั้งชื่อไฟล์ส่งออก

  2. บันทึกเป็นประเภท ข้อความ (คั่นด้วยจุลภาค) (*.csv)

  3. คลิกบันทึก

  1. เปิดไฟล์ CSV ด้วย Microsoft Excel หรือโปรแกรมอื่น

การส่งออกโซนเดียวจาก DNS Manager ทำได้รวดเร็ว ค่าไฟล์ CSV จะแสดงค่าเดียวกันกับตัวจัดการ DNS ปัญหาเดียวคือคอลัมน์ไม่แสดงอย่างที่ควรจะเป็นเมื่อมีเครื่องหมายจุลภาค (,) ในไฟล์

ส่งออกโซนการค้นหาไปข้างหน้าทั้งหมดจากตัวจัดการ DNS

หากต้องการส่งออกบันทึกโซน DNS การค้นหาแบบไปข้างหน้าทั้งหมดจากตัวจัดการ DNS:

  1. เปิด ตัวจัดการ DNS

  2. คลิกขวาที่ โซน

  3. เลือก รายการส่งออก…

  1. ตั้งชื่อไฟล์ส่งออก

  2. บันทึกเป็นประเภท ข้อความ (คั่นด้วยจุลภาค) (*.csv)

  3. คลิกบันทึก

  1. เปิดไฟล์ CSV ด้วย Microsoft Excel หรือโปรแกรมอื่น

ปัญหาใหญ่คือมันไม่แสดงบันทึก DNS ใด ๆ ดังนั้น คุณต้องส่งออกโซนเซิร์ฟเวอร์ DNS ทุกโซนแยกกันจากตัวจัดการ DNS เพื่อดูบันทึก

นอกจากนี้ถ้าคุณต้องการมีทรัพย์สินอื่นล่ะ? ตัวอย่างเช่น คุณสมบัติ Time to Live เป็นคุณสมบัติที่ดีเยี่ยมในการส่งออก วิธีเดียวที่จะได้รับสิ่งนี้คือใช้ PowerShell มาดูกันในขั้นตอนถัดไป

ส่งออกบันทึก DNS โซนเดียวเป็นไฟล์ CSV ด้วย PowerShell

วิธีที่ยอดเยี่ยมในการส่งออกบันทึกจากโซน DNS เดียวไปยังไฟล์ CSV คือการใช้สคริปต์ PowerShell โดยจะใช้ Get-DnsServerResourceRecord cmdlet เพื่อดึงข้อมูลระเบียนทรัพยากร DNS จากโซนที่ระบุ

หมายเหตุ: สคริปต์ PowerShell จะส่งออกคุณสมบัติ Time to Live (TTL) ของระเบียน DNS ด้วย ดังนั้นคุณสามารถตรวจสอบได้อย่างง่ายดายในไฟล์ CSV Time to Live ปรากฏเป็นวินาทีทั้งหมดในคอลัมน์

  1. เรียกใช้ Windows PowerShell ISE ในฐานะผู้ดูแลระบบ

  2. คัดลอกและวางสคริปต์ด้านล่างใน PowerShell

  3. เปลี่ยนชื่อโซน DNS บน บรรทัด 2

  4. เรียกใช้สคริปต์ PS

$dnsRecords = @()
$zoneName = "autodiscover.exoip.com"
$zoneInfo = Get-DnsServerResourceRecord -ZoneName $zoneName
foreach ($info in $zoneInfo) {
    $timestamp = if ($info.Timestamp) { $info.Timestamp } else { "static" }
    $timetolive = $info.TimeToLive.TotalSeconds
    $recordData = switch ($info.RecordType) {
        'A' { $info.RecordData.IPv4Address }
        'CNAME' { $info.RecordData.HostnameAlias }
        'NS' { $info.RecordData.NameServer }
        'SOA' { "[$($info.RecordData.SerialNumber)] $($info.RecordData.PrimaryServer), $($info.RecordData.ResponsiblePerson)" }
        'SRV' { $info.RecordData.DomainName }
        'PTR' { $info.RecordData.PtrDomainName }
        'MX' { $info.RecordData.MailExchange }
        'AAAA' { $info.RecordData.IPv6Address }
        'TXT' { $info.RecordData.DescriptiveText }
        default { $null }
    }
    $dnsRecords += [pscustomobject]@{
        Name       = $zoneName
        Hostname   = $info.Hostname
        Type       = $info.RecordType
        Data       = $recordData
        Timestamp  = $timestamp
        TimeToLive = $timetolive
    }
}
$dnsRecords | Export-Csv "C:\temp\SingleDNSZoneRecords.csv" -NoTypeInformation -Encoding utf8

การส่งออกไฟล์ CSV จะอยู่ใน C:\temp นี่คือลักษณะของไฟล์ CSV

การผ่านทุกโซนและส่งออกต้องใช้เวลา มีประโยชน์ถ้าคุณต้องการส่งออกโซนเซิร์ฟเวอร์ DNS เดียว แต่ไม่ใช่ในกรณีที่คุณต้องการส่งออกบันทึกโซน DNS ทั้งหมด

ส่งออกบันทึกโซน DNS ทั้งหมดเป็นไฟล์ CSV ด้วย PowerShell

หากต้องการส่งออกบันทึกโซน DNS ทั้งหมด ให้เรียกใช้สคริปต์ PowerShell ด้านล่าง โดยจะใช้ Get-DnsServerZone cmdlet เพื่อดึงข้อมูลโซน DNS บนเซิร์ฟเวอร์ DNS และ cmdlet Get-DnsServerResourceRecord เพื่อดึงข้อมูลระเบียนทรัพยากร DNS จากโซนทั้งหมด

สคริปต์จะผ่านโซน Windows DNS ทั้งสองโซน:

  • โซนการค้นหาล่วงหน้า

  • โซนการค้นหาแบบย้อนกลับ

$dnsRecords = @()
$zones = Get-DnsServerZone
foreach ($zone in $zones) {
    $zoneInfo = Get-DnsServerResourceRecord -ZoneName $zone.ZoneName
    foreach ($info in $zoneInfo) {
        $timestamp = if ($info.Timestamp) { $info.Timestamp } else { "static" }
        $timetolive = $info.TimeToLive.TotalSeconds
        $recordData = switch ($info.RecordType) {
            'A' { $info.RecordData.IPv4Address }
            'CNAME' { $info.RecordData.HostnameAlias }
            'NS' { $info.RecordData.NameServer }
            'SOA' { "[$($info.RecordData.SerialNumber)] $($info.RecordData.PrimaryServer), $($info.RecordData.ResponsiblePerson)" }
            'SRV' { $info.RecordData.DomainName }
            'PTR' { $info.RecordData.PtrDomainName }
            'MX' { $info.RecordData.MailExchange }
            'AAAA' { $info.RecordData.IPv6Address }
            'TXT' { $info.RecordData.DescriptiveText }
            default { $null }
        }
        $dnsRecords += [pscustomobject]@{
            Name       = $zone.ZoneName
            Hostname   = $info.Hostname
            Type       = $info.RecordType
            Data       = $recordData
            Timestamp  = $timestamp
            TimeToLive = $timetolive
        }
    }
}
$dnsRecords | Export-Csv "C:\temp\AllDNSZonesRecords.csv" -NoTypeInformation -Encoding utf8

โดยจะส่งออกบันทึก DNS ทั้งหมดเป็นไฟล์ CSV ใน C:\temp ไฟล์ CSV หน้าตาเป็นแบบนี้

แค่นั้นแหละ!

อ่านเพิ่มเติม: วิธีล้างระเบียน DNS ที่เก่าด้วย PowerShell »

บทสรุป

คุณได้เรียนรู้วิธีส่งออกบันทึก DNS เป็น CSV ด้วย PowerShell มีข้อจำกัดเมื่อคุณต้องการส่งออกบันทึก DNS ด้วย DNS Manager ด้วย PowerShell คุณสามารถปรับแต่งผลลัพธ์การส่งออกตามที่คุณต้องการ การสำรองข้อมูลบันทึก DNS ก่อนทำการเปลี่ยนแปลงที่สำคัญเป็นสิ่งที่ดีเสมอไป สคริปต์ PowerShell จะครอบคลุมความต้องการของคุณ

คุณสนุกกับบทความนี้หรือไม่? คุณอาจต้องการการตรวจสุขภาพ Active Directory ด้วยสคริปต์ PowerShell อย่าลืมติดตามเราและแบ่งปันบทความนี้

บทความที่เกี่ยวข้อง