Resolve-DnsName 是什么
Resolve-DnsName 是 Windows 上的 PowerShell DNS 查询命令,相当于 dig 的现代替代品:支持指定服务器、查询类型、递归跟踪,输出是对象而不是纯文本,可以直接管道给 Where-Object、Format-List 或导出成结构化数据。相比老旧的 nslookup,它在脚本化与批量排查上优势明显,是 Windows 侧排查 DNS 的首选工具。
基本信息
| 适用平台 | Windows 8 / Server 2012 及以上(PowerShell 3.0+) |
|---|---|
| 核心参数 | -Server 指定 DNS 服务器 IP、-Type 指定记录类型、-DnsOnly 跳过 hosts、-NoHostsFile 忽略 hosts |
| 常用类型 | A、AAAA、CNAME、MX、TXT、NS、SRV、PTR |
| 权限要求 | 普通用户即可 |
| 真机验证 | 不返回结果时可用 -QuickTimeout 缩短等待,避免长时间卡住 |
典型使用场景
- 排查「域名指向不对」:加 -DnsOnly 排除 hosts 文件与本地缓存的干扰
- 验证 DNS 记录是否已生效:指定公共服务器的 -Server 与本地 DNS 结果对比
- 查邮件记录:-Type MX 或 -Type TXT 核对 SPF/DKIM 类文本记录
- 域控环境查 SRV 记录:定位服务记录是否注册正确
- 批量查询脚本:结果对象化后可用 Group-Object 汇总多个域名的解析地址
常用查询
常用查询
Resolve-DnsName example.com # 最基础的 A/AAAA 查询
Resolve-DnsName example.com -Type MX # 查邮件交换记录
Resolve-DnsName example.com -Type A -Server 8.8.8.8 # 指定公共 DNS,绕开本地解析
Resolve-DnsName example.com -DnsOnly # 只走 DNS,跳过 hosts 文件(排障关键)
Resolve-DnsName example.com -NoHostsFile -DnsOnly | Format-List # 明确忽略 hosts 并展开全部字段
Resolve-DnsName internal.corp -Server 10.0.0.53 -Type A -DnsOnly # 查内网域名要走内网 DNS
# 批量核对:结果对象化后可直接筛选输出
Resolve-DnsName a.example.com, b.example.com -DnsOnly | Select-Object Name, IPAddress关键参数对照
| 参数 | 作用 | 排障要点 |
|---|---|---|
| -Server | 指定要查询的 DNS 服务器 | 查公网域名用公共 DNS,查内网域名必须用内网 DNS |
| -Type | 指定记录类型 | 默认 A;MX/TXT/SRV 需显式指定 |
| -DnsOnly | 只使用 DNS,不读 hosts 与缓存 | 结论可复现的前提,排查指向问题必加 |
| -NoHostsFile | 明确忽略 hosts 文件 | 与 -DnsOnly 组合排除本地干扰 |
| -QuickTimeout | 缩短等待时间 | 无效服务器上避免长时间卡住 |
Windows 的解析顺序默认是 hosts → DNS 缓存 → 配置的 DNS 服务器;排查「域名解析结果与预期不符」时不用 -DnsOnly,很可能只是在读 hosts 或缓存里的旧记录。
改过 DNS 记录后立刻验证常看到旧值,属正常缓存行为:TTL 未过期前可先 ipconfig /flushdns,再指定权威服务器复核。