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

วิธีล้างระเบียน DNS เก่าด้วย PowerShell


เมื่อคุณลบวัตถุคอมพิวเตอร์ AD ระเบียน DNS จะเหลืออยู่ใน DNS ของเซิร์ฟเวอร์ Windows วิธีที่ดีที่สุดคือการตั้งค่า DNS aging และ scavenging แต่หากบันทึกเหล่านี้เป็นแบบคงที่ บันทึกเหล่านั้นจะไม่ถูกลบออกโดยอัตโนมัติ นอกจากนี้ จะเกิดอะไรขึ้นหากคุณรอไม่ไหวและต้องการลบบันทึกเก่าออกทันที นั่นคือตอนที่ PowerShell มาช่วยเหลือ ในบทความนี้ คุณจะได้เรียนรู้วิธีล้างระเบียน DNS เก่าด้วย PowerShell

ระเบียน DNS คืออะไร

ระเบียนทรัพยากร DNS ประกอบด้วยข้อมูลที่โซนเก็บรักษาเกี่ยวกับทรัพยากร (เช่น โฮสต์) ที่โซนนั้นมีอยู่ เรกคอร์ดทรัพยากรทั่วไปประกอบด้วยสิ่งต่อไปนี้:

  • ชื่อ (โฮสต์) ของเรกคอร์ดทรัพยากร

  • ข้อมูลเกี่ยวกับระยะเวลาที่บันทึกทรัพยากรจะยังคงอยู่ในแคช

  • ประเภทเรกคอร์ดทรัพยากร เช่น เรกคอร์ดทรัพยากรโฮสต์ (A)

  • ข้อมูลเฉพาะสำหรับประเภทบันทึก เช่น ที่อยู่ IPv4 ของโฮสต์

คุณสามารถเพิ่มบันทึกทรัพยากรได้โดยตรง หรือสามารถเพิ่มได้โดยอัตโนมัติเมื่อไคลเอนต์ที่ใช้ Windows, Dynamic Host Configuration Protocol (DHCP) เข้าร่วมเครือข่ายโดยใช้การอัปเดตแบบไดนามิก

ประเภทเรกคอร์ดทรัพยากรประเภทต่อไปนี้เป็นที่รู้จักกันดี:

  • บันทึกโฮสต์ (A, AAAA)

  • บันทึกนามแฝง (CNAME)

  • บันทึก Mail Exchanger (MX)

  • บันทึกตัวชี้ (PTR)

  • บันทึกสถานที่ให้บริการ (SRV)

  • ระเบียนเนมเซิร์ฟเวอร์ (NS)

  • บันทึกข้อความ (TXT)

  • บันทึกชื่อการมอบหมาย (DNAME)

  • บันทึกการเริ่มต้นการอนุญาต (SOA)

ตรวจสอบบันทึกเก่าในตัวจัดการ DNS

เริ่ม DNS Manager และตรวจสอบระเบียน DNS เก่าที่มี ชื่อโฮสต์, FQDN และ ที่อยู่ IP

ในตัวอย่างของเรา เราต้องการค้นหา Domain Controller ที่เราลดระดับ:

  • ชื่อโฮสต์: DC01-2019

  • FQDN: DC01-2019.exoip.local

  • ที่อยู่ IP: 192.168.1.51

คลิกขวาที่โซนแล้วคลิกคุณสมบัติ

คลิกเนมเซิร์ฟเวอร์

เซิร์ฟเวอร์เก่าปรากฏในรายการ ซึ่งก็คือระเบียนเนมเซิร์ฟเวอร์ (NS)

มีบันทึก Host (A) อยู่

มีบันทึกตำแหน่งบริการ (SRV)

หากเราผ่านโซนเพิ่มเติม เราจะพบบันทึก DNS เก่าทั้งหมดของออบเจ็กต์คอมพิวเตอร์ AD นั้น

การดำเนินการผ่านโซนทั้งหมดและการลบระเบียน DNS เก่าต้องใช้เวลา อาจเกิดขึ้นได้ว่าคุณไม่เห็นบันทึก และมันจะคงอยู่ที่นั่น

แทนที่จะผ่านโซนเซิร์ฟเวอร์ DNS ทั้งหมดและลบบันทึก DNS ของวัตถุคอมพิวเตอร์ AD ด้วยตนเอง เราจะดำเนินการกระบวนการอัตโนมัติด้วย PowerShell และล้างบันทึกเก่าทั้งหมด

หมายเหตุ: คุณควรตั้งค่า DNS Aging และ Scavenging ใน Active Directory เพื่อลบบันทึก DNS แบบไดนามิกเก่าๆ แม้ว่าการดำเนินการนี้จะล้างข้อมูลบันทึกเก่าใน DNS แต่จะไม่ลบบันทึก DNS แบบคงที่เก่า และนั่นคือสิ่งที่สคริปต์ PowerShell ด้านล่างนี้จะทำ

ลบรายการ DNS เก่าด้วยสคริปต์ PowerShell

วิธีที่ยอดเยี่ยมในการลบระเบียน DNS เก่าคือการใช้สคริปต์ Remove-DNSRecords.ps1 PowerShell ที่ใช้ cmdlets สามรายการต่อไปนี้:

  1. รับ-DnsServerZone cmdlet เพื่อดึงข้อมูลโซนหลัก

  2. รับ-DnsServerResourceRecord cmdlet เพื่อค้นหาระเบียนทรัพยากรทั้งหมดที่เท่ากับ FQDN ชื่อโฮสต์ และที่อยู่ IP

  3. Remove-DnsServerResourceRecord เพื่อลบระเบียน DNS ที่ดึงข้อมูล

ขั้นตอนที่ 1 ดาวน์โหลดสคริปต์ Remove-DNSRecords PowerShell

ดาวน์โหลดและวางสคริปต์ Remove-DNSRecords.ps1 PowerShell บนโฟลเดอร์ Domain Controller C:\scripts หากคุณไม่มีโฟลเดอร์ สคริปต์ ให้สร้างขึ้นใหม่

ตรวจสอบให้แน่ใจว่าไฟล์ไม่ได้ถูกบล็อกเพื่อป้องกันข้อผิดพลาดเมื่อเรียกใช้สคริปต์ อ่านเพิ่มเติมในบทความไม่มีข้อผิดพลาดในการเซ็นชื่อแบบดิจิทัลเมื่อเรียกใช้สคริปต์ PowerShell

อีกทางเลือกหนึ่งคือการคัดลอกและวางโค้ดด้านล่างลงใน Notepad ตั้งชื่อให้ว่า Remove-DNSRecords.ps1 และวางไว้ในโฟลเดอร์ C:\scripts

<#
    .SYNOPSIS
    Remove-DNSRecords.ps1

    .DESCRIPTION
    Clean up stale DNS records with PowerShell.

    .LINK
    www.alitajran.com/clean-up-dns-records-powershell/

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.alitajran.com
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.00, 01/20/2024 - Initial version
#>

$ServerFQDN = "dc01-2019.exoip.local." #Keep the dot (.) at the end
$ServerHostname = "dc01-2019"
$IPAddress = "192.168.1.51"

$Zones = Get-DnsServerZone | Where-Object { $_.ZoneType -eq "Primary" } |
Select-Object -ExpandProperty ZoneName

foreach ($Zone in $Zones) {
    Get-DnsServerResourceRecord -ZoneName $Zone | Where-Object { 
        $_.RecordData.IPv4Address -eq $IPAddress -or
        $_.RecordData.NameServer -eq $ServerFQDN -or
        $_.RecordData.DomainName -eq $ServerFQDN -or
        $_.RecordData.HostnameAlias -eq $ServerFQDN -or
        $_.RecordData.MailExchange -eq $ServerFQDN -or
        $_.HostName -eq $ServerHostname
    } | Remove-DnsServerResourceRecord -ZoneName $Zone -Force -WhatIf
}
  • บรรทัดที่ 20, 21, 22: เปลี่ยนค่า ServerFQDN, ServerHostname และ IPAddress เป็นวัตถุคอมพิวเตอร์ AD จาก ซึ่งคุณต้องการลบบันทึก DNS เก่า

ขั้นตอนที่ 2 เรียกใช้สคริปต์ Remove-DNSRecords PowerShell

เริ่ม Windows PowerShell และเรียกใช้สคริปต์ Remove-DNSRecords.ps1

หมายเหตุ: จะไม่มีอะไรเกิดขึ้นกับสภาพแวดล้อมเมื่อคุณเรียกใช้สคริปต์เนื่องจากมีการเพิ่มพารามิเตอร์ -WhatIf ในสคริปต์ เมื่อคุณระบุและยืนยันบันทึกเก่าแล้ว ให้ลบพารามิเตอร์ -WhatIf และเรียกใช้สคริปต์อีกครั้ง

C:\scripts\.\Remove-DNSRecords.ps1

นี่คือลักษณะที่ปรากฏในตัวอย่างของเรา

What if: Removing DNS resource record @ of type NS from zone _msdcs.exoip.local on DC01-2022 server.
What if: Removing DNS resource record @ of type NS from zone autodiscover.exoip.com on DC01-2022 server.
What if: Removing DNS resource record dc01-2019 of type A from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record @ of type NS from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record DomainDnsZones of type A from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.Default-First-Site-Name._sites.DomainDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.DomainDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record ForestDnsZones of type A from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.ForestDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record @ of type NS from zone TrustAnchors on DC01-2022 server.

หลังจากที่คุณตรวจสอบระเบียน DNS เก่าของวัตถุคอมพิวเตอร์ AD เฉพาะนั้นแล้ว ให้ลบพารามิเตอร์ -WhatIf และเรียกใช้สคริปต์อีกครั้ง

C:\scripts\.\Remove-DNSRecords.ps1

ระเบียน DNS ทั้งหมดจะถูกลบเรียบร้อยแล้วสำหรับวัตถุคอมพิวเตอร์ AD เฉพาะจาก Windows Server DNS

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

อ่านเพิ่มเติม: กำหนดค่าไฟล์เทมเพลตการดูแลระบบ OneDrive (ADMX/ADML) »

บทสรุป

คุณได้เรียนรู้วิธีล้างบันทึก DNS เก่าด้วย PowerShell ครั้งถัดไปที่คุณต้องการลบบันทึก DNS ออกจาก DNS ให้ใช้สคริปต์ PowerShell เพื่อลบบันทึก DNS และประหยัดเวลา

คุณชอบบทความนี้หรือไม่? คุณอาจต้องการปิดการใช้งานการเข้าถึงเพื่อติดตั้ง Office Add-in อย่าลืมติดตามเราและแบ่งปันบทความนี้

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