ส่งออกบันทึก DNS เป็น CSV ด้วย PowerShell
คุณต้องการสำรองข้อมูลบันทึก DNS ทั้งหมดจาก Windows DNS ของคุณ DNS Manager มีข้อจำกัดอย่างมากกับการส่งออกดังกล่าว วิธีเดียวที่จะได้รับการส่งออกบันทึก DNS ที่ดีคือการใช้ PowerShell ในบทความนี้ คุณจะได้เรียนรู้วิธีส่งออกบันทึก DNS เป็นไฟล์ CSV ด้วย PowerShell
ส่งออกโซน DNS เดียวจาก DNS Manager
มาดูวิธีส่งออกบันทึกทั้งหมดจากโซน DNS เดียวในตัวจัดการ DNS:
เปิด ตัวจัดการ DNS
คลิกขวาที่ โซน
เลือก รายการส่งออก…
ตั้งชื่อไฟล์ส่งออก
บันทึกเป็นประเภท ข้อความ (คั่นด้วยจุลภาค) (*.csv)
คลิกบันทึก
เปิดไฟล์ CSV ด้วย Microsoft Excel หรือโปรแกรมอื่น
การส่งออกโซนเดียวจาก DNS Manager ทำได้รวดเร็ว ค่าไฟล์ CSV จะแสดงค่าเดียวกันกับตัวจัดการ DNS ปัญหาเดียวคือคอลัมน์ไม่แสดงอย่างที่ควรจะเป็นเมื่อมีเครื่องหมายจุลภาค (,) ในไฟล์
ส่งออกโซนการค้นหาไปข้างหน้าทั้งหมดจากตัวจัดการ DNS
หากต้องการส่งออกบันทึกโซน DNS การค้นหาแบบไปข้างหน้าทั้งหมดจากตัวจัดการ DNS:
เปิด ตัวจัดการ DNS
-
คลิกขวาที่ โซน
เลือก รายการส่งออก…
ตั้งชื่อไฟล์ส่งออก
บันทึกเป็นประเภท ข้อความ (คั่นด้วยจุลภาค) (*.csv)
คลิกบันทึก
เปิดไฟล์ 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 ปรากฏเป็นวินาทีทั้งหมดในคอลัมน์
เรียกใช้ Windows PowerShell ISE ในฐานะผู้ดูแลระบบ
คัดลอกและวางสคริปต์ด้านล่างใน PowerShell
เปลี่ยนชื่อโซน DNS บน บรรทัด 2
เรียกใช้สคริปต์ 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 อย่าลืมติดตามเราและแบ่งปันบทความนี้







