技術文章 · IT 指令工具箱

Windows DNS Server PowerShell:Zone、A、CNAME、PTR 與查詢排錯

整理 Windows DNS Server zone、A/CNAME/PTR/SRV 記錄、forwarder、cache、scavenging、event log 與 Resolve-DnsName 常用指令。

作者 Steve Chen · 發布  · 約 8 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

DNS Server 排錯先分成「查不到、查錯、查得慢、動態更新失敗」。再確認用戶端問了哪台 DNS、查的是哪個 zone、答案來自 authoritative、forwarder 還是 cache。

20 組範例Windows Server 2019/2022/2025DnsServer PowerShell module查核日期:2026-08-11
動手前:刪記錄、清 cache、啟用 scavenging 或改 forwarder 會影響大量主機。先匯出 zone、記錄 TTL 與現況,刪除範例一律先用 -WhatIf。

Zone 與記錄盤點

列出所有 zone系統管理員 PowerShell(DNS)

Get-DnsServerZone | Format-Table ZoneName,ZoneType,IsDsIntegrated,IsReverseLookupZone,DynamicUpdate

確認 AD-integrated、動態更新與 reverse zone。

查看指定 zonePowerShell

Get-DnsServerZone -Name 'corp.example' | Format-List *

變更前記錄 replication scope 與 dynamic update。

列出 zone 內記錄PowerShell

Get-DnsServerResourceRecord -ZoneName 'corp.example' | Sort-Object HostName,RecordType

大型 zone 先依 Name 或 RRType 篩選。

找指定主機記錄PowerShell

Get-DnsServerResourceRecord -ZoneName 'corp.example' -Name 'app01'

同名可能同時有 A、AAAA、CNAME 或多筆 A。

查看 forwarderPowerShell

Get-DnsServerForwarder

確認 timeout、是否使用 root hints 與來源 DNS 可達性。

查看 root hintsPowerShell

Get-DnsServerRootHint

內部封閉 DNS 可能按設計不使用 root hints。

查看 scavenging 設定PowerShell

Get-DnsServerScavenging

不要看到 stale record 就直接全域啟用清除。

建立與維護記錄

建立 A 與 PTR 記錄系統管理員 PowerShell(DNS)

Add-DnsServerResourceRecordA -ZoneName 'corp.example' -Name 'app01' -IPv4Address '192.168.50.10' -CreatePtr

需先有對應 reverse zone,建立後正反查都要驗證。

建立 CNAME系統管理員 PowerShell(DNS)

Add-DnsServerResourceRecordCName -ZoneName 'corp.example' -Name 'portal' -HostNameAlias 'app01.corp.example'

alias 目標應用 FQDN,且不能和同名其他 record 衝突。

建立 TXT 記錄系統管理員 PowerShell(DNS)

Add-DnsServerResourceRecord -ZoneName 'corp.example' -Txt -Name '_validation' -DescriptiveText 'replace-with-issued-token'

驗證 token 屬敏感資料時不要留在工單。

刪除前預演系統管理員 PowerShell(DNS)

Remove-DnsServerResourceRecord -ZoneName 'corp.example' -Name 'old-app' -RRType A -WhatIf

若同名多筆,先 Get 精確確認;正式刪除前備份。

新增 forwarder系統管理員 PowerShell(DNS)

Add-DnsServerForwarder -IPAddress 192.0.2.53 -PassThru

把測試 IP 換成公司核准的 DNS;先確認遞迴與資安政策。

匯出標準 primary zone系統管理員 PowerShell(DNS)

Export-DnsServerZone -Name 'corp.example' -FileName 'corp.example.dns'

AD-integrated zone 的完整復原仍要搭配 System State/AD 備份策略。

清除伺服器 cache系統管理員 PowerShell(DNS)

Clear-DnsServerCache -Force

會讓後續查詢重新遞迴;尖峰時段與大型環境要評估。

查詢與事件排錯

查 A 記錄並指定 DNSPowerShell

Resolve-DnsName app01.corp.example -Type A -Server 192.168.10.10

記錄 Server 與實際回覆,不只看 IP。

不使用本機 DNS cachePowerShell

Resolve-DnsName app01.corp.example -Type A -DnsOnly -NoHostsFile

排除 hosts file 與 LLMNR 等干擾。

查 SOA 與 serialPowerShell

Resolve-DnsName corp.example -Type SOA -Server 192.168.10.10

比較不同 authoritative server 的 serial 與 master。

查反向 PTRPowerShell

Resolve-DnsName 192.168.50.10 -Type PTR -Server 192.168.10.10

缺 PTR 常影響郵件、稽核與部分驗證,但不一定影響一般 TCP。

查看 DNS Server 錯誤事件PowerShell(DNS)

Get-WinEvent -FilterHashtable @{LogName='DNS Server'; Level=2,3} -MaxEvents 100

對照事件時間、zone 與上游 DNS。

測 DNS TCP 53PowerShell

Test-NetConnection 192.168.10.10 -Port 53

DNS 平常多用 UDP,但大型回覆、DNSSEC 與 zone transfer 會用 TCP;TCP 成功不代表 UDP 正常。

怎麼確認有做對

  • 從至少兩個不同網段,以實際設定的 DNS 查 A/PTR/SRV。
  • 不同 DC/DNS 的 AD-integrated 記錄一致,事件 log 無持續錯誤。
  • 新增記錄在 TTL 與 replication window 後可解析,舊 cache 也按預期更新。

常見錯誤

  • 把 8.8.8.8 直接發給網域電腦當主要 DNS。
  • 沒有 reverse zone 卻勾 CreatePtr 就以為成功。
  • 為了解一筆錯誤記錄就全域開 scavenging。
  • 只測 nslookup,不確認用戶端實際 DNS、suffix 與查詢封包。

常見問題

網域電腦可以設定公用 DNS 當備援嗎?

通常不行。網域成員應只使用能解析 AD zone 的公司 DNS;公用 DNS 應設成內部 DNS 的 forwarder,而不是直接發到網域用戶端。

清 DNS cache 會修好所有解析問題嗎?

只會移除快取。若 authoritative record、forwarder、delegation、suffix 或動態更新本來就錯,清完只會再拿到同一個錯誤答案。

延伸閱讀

版本與官方文件

參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。

常見問題

網域電腦可以設定公用 DNS 當備援嗎?

通常不行。網域成員應只使用能解析 AD zone 的公司 DNS;公用 DNS 應設成內部 DNS 的 forwarder,而不是直接發到網域用戶端。

清 DNS cache 會修好所有解析問題嗎?

只會移除快取。若 authoritative record、forwarder、delegation、suffix 或動態更新本來就錯,清完只會再拿到同一個錯誤答案。

聯絡廷皓討論 看更多文章