Windows server 2022 常见 备份事项 dnscmd.exe 是一个强大的工具,适用于需要通过命令行对 DNS 服务器进行管理和配置的情况。使用它可以实现对 DNS 服务器灵活的管理和自动化操作。

dnscmd.exe 完整拆解解构

基础定位

dnscmd.exe:Windows DNS Server 官方命令行管理工具(内置二进制,随 DNS 服务器角色安装)
 
全称:DNS Command-line Utility
 
适用:Windows Server DNS 服务(dns.exe);仅能管理Microsoft DNS Server,不能直接管控 BIND、PowerDNS。
 
本质:RPC 客户端工具,通过 DNS 服务器 RPC 接口与 dns.exe 通信,并非直接操作 DNS 区域文件。
区分概念:
  • dnscmd.exe:管理客户端(命令行工具)
  • dns.exe:DNS 服务器服务进程(承载 DNS 解析、区域存储、动态更新 DDNS)
  • MS-DNSP:Microsoft DNS Server RPC Protocol,dnscmd 底层依赖协议

一、底层原理拆解

1.1 通信模型

plaintext
dnscmd.exe
    ↓ MS-DNSP RPC(TCP 135 + RPC动态端口 / 命名管道可选)
dns.exe (DNS Server Service)
    ↓ 内部访问区域存储(AD集成区域 / 文件区域)
  1. dnscmd 本身不实现 DNS 解析协议(UDP53/TCP53);它只做管理控制。
  2. 所有增删记录、区域配置、服务器参数修改,全部封装为 MS-DNSP RPC 请求 发给 dns.exe
  3. DNS 服务器执行操作后,将结果通过 RPC 返回 dnscmd,控制台输出。

1.2 两大区域存储模式底层差异

模式 A:标准文件区域(非 AD 集成)

  • 区域文件路径:%windir%\System32\dns\*.dns
  • dnscmd 下发指令 → dns.exe 修改本地区域文本文件

模式 B:AD 集成区域(Active Directory Integrated Zone)

  • 数据存放于 AD 分区:DomainDnsZones / ForestDnsZones(ntds.dit)
  • dnscmd 下发指令 → dns.exe 调用 DNS AD 存储提供程序,通过 LDAP 写入 ntds.dit
  • 依靠 AD 复制同步区域数据,不再依靠区域文件传输

1.3 典型动作执行原理示例

示例命令:dnscmd DC01 /recordadd contoso.com www A 192.168.1.100
  1. dnscmd 解析命令行参数(区域名、记录类型、RR 数据)
  2. 建立到目标 DNS 服务器的 MS-DNSP RPC 会话
  3. 封装资源记录写入 RPC 请求发送至 dns.exe
  4. dns.exe 判断区域类型:
    • 文件区域 → 修改 .dns 区域文件;
    • AD 集成区域 → 通过 LDAP 写入对应 DNS 应用程序分区。
  5. dns.exe 更新内存 DNS 缓存;向 dnscmd 返回执行状态码。
  6. dnscmd 打印成功 / 失败信息。

1.4 MS-DNSP RPC 关键能力(dnscmd 全部依托这套接口)

  • 服务器全局配置(转发器、递归、侦听地址、EDNS0)
  • 区域生命周期:创建 / 删除 / 暂停 / 启动区域
  • 资源记录 RR:Add / Delete / Update / Enum 记录
  • 区域传输配置(AXFR/IXFR、通知列表)
  • 老化与清理(Scavenging、无记录刷新间隔)
  • 数据库重新加载、重置 DNS 服务状态

二、依赖文件清单

2.1 核心程序与模块

文件路径 功能说明
%SystemRoot%\System32\dnscmd.exe 主程序,命令行入口
dnsrpc.dll MS-DNSP RPC 客户端存根,dnscmd 核心依赖;封装 DNS RPC 调用
rpcrt4.dll Windows RPC 运行时,RPC 封包、传输、会话管理
dnsapi.dll DNS 客户端 API(辅助名称解析,用于定位 DNS 服务器名称)

2.2 DNS 服务端配套文件(目标服务器侧)

文件 作用
dns.exe DNS 服务器服务进程
dnsrslvr.dll DNS 服务核心逻辑库
dnsadmn.dll AD 集成区域 LDAP 交互模块
dnssnap.dll DNS 管理控制台(dnsmgmt.msc),与 dnscmd 共享同一套 MS-DNSP RPC 接口

2.3 AD 集成场景额外依赖

  • ntdsapi.dll:dns.exe 访问 AD 分区
  • ldap32.dll:LDAP 通信
  • secur32.dll:RPC 身份认证(Kerberos/NTLM)

2.4 关键注册表路径

客户端(dnscmd 自身无独立配置)
 
无专属注册表;所有行为由命令参数控制。
DNS 服务端配置(dnscmd 修改的目标)
reg
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters
# 区域定义、老化、转发器、递归配置
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones
# AD集成区域存储分区配置

三、依赖关系梳理

3.1 上游调用方(谁使用 dnscmd)

  1. 自动化脚本(Batch/PowerShell)批量维护 DNS 记录
  2. 运维变更流程、CI/CD 自动化
  3. AD 部署脚本、DC 后配置脚本
  4. 第三方运维平台调用命令行接口

3.2 平层协同组件

  1. dnsmgmt.msc(DNS 图形控制台)
     
    和 dnscmd 同源:均调用 dnsrpc.dll 发起 MS-DNSP RPC;图形界面只是前端封装。
  2. AD 域控(ntds.dit)
     
    AD 集成 DNS 区域,记录最终存入 AD 分区,依靠 AD 复制同步。
  3. Netlogon / NRPC
     
    远程管理其他服务器 DNS 时,RPC 认证依赖机器安全通道。
  4. DNS 客户端 API (dnsapi.dll)
     
    仅用于解析 DNS 服务器主机名,不参与资源记录管理

3.3 底层依赖

Windows RPC 运行时、TCP/IP 协议栈、RPC 端口映射器(RPC Endpoint Mapper)
端口要点:远程执行 dnscmd 操作远端 DNS 服务器,需要开放 TCP 135 + RPC 动态端口
 
仅本地执行 dnscmd(目标本机 DNS)使用本地 RPC,无需外网端口。

四、标准逻辑链路

链路 1:本地管理本机 DNS 服务器

plaintext
管理员执行 dnscmd /recordadd
↓
dnscmd.exe → dnsrpc.dll 构造MS-DNSP RPC请求
↓
本地RPC传输(LPC,本地进程间通信,不走网络)
↓
dns.exe 接收请求
↓
写入区域存储(文件 / AD分区)
↓
结果原路RPC返回 → dnscmd打印输出

链路 2:远程管理另一台 DC 上的 DNS 服务

plaintext
dnscmd DC02 /recordadd contoso.com www A 192.168.1.100
↓
dnscmd → dnsrpc.dll → rpcrt4.dll
↓
TCP135连接远端DC02 RPC端点映射器
↓
协商RPC动态端口,建立MS-DNSP会话
↓
Kerberos/NTLM RPC身份认证(使用当前登录凭据)
↓
RPC指令送达远端 dns.exe
↓
远端dns.exe修改区域
↓
执行结果沿RPC链路返回客户端dnscmd

链路 3:典型断链故障路径

  1. RPC 端口不通 → dnscmd 报 RPC 服务器不可用
  2. 权限不足(管理员缺失)→ RPC 访问被拒绝
  3. DNS 服务 dns.exe 未启动 → 连接失败
  4. AD 集成区域 DC 复制异常 → 修改记录后无法同步至其他 DNS DC
  5. 区域被冻结 / 暂停 → dnscmd 写入记录返回错误

五、配套链(工具、边界、运维、关联技术)

5.1 配套工具

  1. dnsmgmt.msc:图形管理控制台(同 RPC 后端)
  2. PowerShell DnsServer Module(Add-DnsServerResourceRecord
    PowerShell DNS 模块底层依然封装 MS-DNSP RPC,现代替代 dnscmd 首选
  3. Wireshark:过滤 MS_DNSP 捕获 DNS 管理 RPC 流量
  4. nslookup / Resolve-DnsName纯 DNS 解析工具,和 dnscmd 完全无关
     
    重点区分:nslookup 走 UDP53 DNS 协议;dnscmd 走 RPC 管理协议。

5.2 技术边界(极易混淆)

对象 使用协议 用途
dnscmd.exe MS-DNSP RPC DNS 服务器配置、记录管理
nslookup DNS(UDP53) DNS 域名解析查询
dns.exe DNS 协议 + MS-DNSP DNS 服务进程;同时对外提供解析、对内接收 RPC 管理
DDNS 动态更新 DNS 协议(TSIG/GSS-TSIG) 客户端自动注册 A/AAAA 记录,不走 dnscmd

5.3 AD 场景配套联动

  1. DC 安装 DNS 角色,默认创建 AD 集成区域;dnscmd 写入记录最终落盘 ntds.dit
  2. 清理过期 DNS 记录:dnscmd 配置老化(Scavenging),由 dns.exe 后台自动清理
  3. 快照回滚 DC 附带风险:AD-DNS 区域跟随 ntds.dit 回滚,造成 DNS 记录老旧冲突

5.4 权限模型

dnscmd 执行权限依赖目标服务器上:
  • DNSAdmins 组 / Domain Admins
  • RPC 访问权限 + DNS 服务命名空间权限

5.5 迁移与淘汰说明

微软自 Windows Server 2012 起主推 DnsServer PowerShell 模块
 
dnscmd 保留为兼容工具,不再新增功能,新项目优先使用 PowerShell。

六、高频故障现象(断链特征)

  1. RPC server unavailable:防火墙拦截 RPC 端口、远端 dns.exe 未启动
  2. Access denied:缺少 DNSAdmins 管理员权限
  3. 无法修改 AD 集成区域:DC AD 复制故障、分区不可写
  4. 添加记录成功,但其他 DNS 服务器看不到:AD 复制延迟 / 中断
  5. dnscmd 执行成功,但解析不生效:DNS 服务器内存缓存未刷新(可执行dnscmd /clearcache

七、极简核心总结

  1. dnscmd.exe 是MS-DNSP RPC 客户端,不使用 53 端口 DNS 协议,仅用于管理 Microsoft DNS 服务进程 dns.exe;
  2. 管理分为本地 LPC 方式与远程 RPC 网络方式,远程依赖 TCP135 与动态 RPC 端口;
  3. AD 集成区域下,所有记录修改最终写入 AD 应用分区,由 AD 复制同步;文件区域读写.dns文本文件;
  4. dnscmd 与 dnsmgmt.msc 共用同一套 RPC 接口;现代环境推荐替换为 PowerShell DnsServer 模块;
  5. 区分关键:dnscmd = 管理工具;nslookup = 查询工具,二者协议、用途完全隔离。

dns.exe(Windows DNS Server Service)完整拆解解构

定位:dns.exeWindows Server DNS 服务器角色核心宿主进程,服务名称:DNS Server,运行身份 LocalSystem
 
区分极易混淆组件:
  • dns.exe权威 DNS 服务进程,监听 UDP/TCP 53;
  • Dnscache(svchost 托管):客户端 DNS 缓存服务,桌面系统默认启用;
  • dnscmd.exeMS-DNSP RPC 管理客户端,不参与 DNS 报文收发;
     
    协议基准:RFC1034/1035、RFC2136 动态更新、RFC3645 GSS-TSIG、MS-DNSP(DNS 管理 RPC 协议)。

一、底层原理拆解

1.1 整体分层架构

plaintext
外部网络客户端
    ↓ UDP53 / TCP53(标准DNS报文)
dns.exe(主线程+工作线程池)
├─ DNS协议解析引擎(查询、动态更新DDNS、区域传输AXFR/IXFR、NOTIFY)
├─ MS-DNSP RPC服务端点(接收dnscmd、dnsmgmt.msc、PowerShell DnsServer模块管理指令)
├─ 内存子系统
│   ├─ 权威区域内存数据库
│   └─ 递归解析缓存(Resolver Cache)
├─ 存储适配器
│   ├─ 文件适配器:读写 %windir%\System32\dns\*.dns
│   └─ AD适配器(dnsadmn.dll):LDAP读写ntds.dit(AD集成区域)
├─ 后台任务线程
│   ├─ 老化清理Scavenging
│   ├─ 区域通知NOTIFY、辅助区域同步
│   └─ DNS调试日志写入
    ↓底层
TCP/IP协议栈(tcpip.sys)、RPC运行时、LSA安全子系统(GSS-TSIG鉴权)

1.2 DNS 查询标准处理流水线(核心原理)

客户端查询到达 53 端口 → dns.exe 执行顺序判断:
  1. 查询本地权威区域
     
    命中 → 返回权威应答(AA=1)
  2. 未命中权威区域 → 查询服务器递归缓存
     
    命中 → 返回缓存应答;
  3. 缓存无记录
    • 启用转发器:将请求转发至上游 DNS;
    • 未启用转发器:使用根提示执行递归迭代查询;
  4. 获取结果写入本地缓存(遵循 TTL),应答客户端。
关键:递归由 dns.exe 主动代查;迭代仅返回下级服务器引用,不主动查询。

1.3 两大存储模式底层实现

模式 A:标准主 / 辅助区域(文件存储)

  • 区域持久化文件:%SystemRoot%\System32\dns\区域名.dns
  • dns.exe 启动加载文件到内存;修改记录直接改写本地文本;
  • 辅助区域依靠 AXFR/IXFR 从主服务器拉取副本,只读

模式 B:AD 集成区域(AD DS 深度绑定,域控标配)

  • 数据不落地 dns 文本文件,存放于 AD 应用分区:
    • DomainDnsZones(域内复制)
    • ForestDnsZones(林内复制)
  • dns.exe 通过 dnsadmn.dll + LDAP 读写 ntds.dit;
  • 多主复制模型:任意 DC 均可写入 DNS 记录,依靠 AD 复制同步所有域控;
风险:域控快照回滚(ntds.dit 回退)会连带 DNS 区域数据回滚,产生陈旧记录、复制冲突。

1.4 动态更新 DDNS(RFC2136 + GSS-TSIG)原理

Windows 域环境默认安全动态更新(GSS-TSIG)
  1. 客户端(工作站 /netlogon)携带 Kerberos 票据发起 DNS Update 报文;
  2. dns.exe 调用 LSA 校验 GSS-TSIG 签名;
  3. 校验通过 → 写入区域;
  4. AD 集成区域直接写入 ntds.dit;文件区域写入 dns 文件;
  5. 记录打上时间戳 Timestamp,作为老化清理依据;
静态手工记录时间戳 = 0,默认不会被 Scavenging 清理。

1.5 老化与清理(Aging & Scavenging)内部机制

  1. 两段时间窗口:NoRefreshInterval + RefreshInterval
  2. NoRefresh 阶段:禁止客户端单纯刷新(仅允许修改 IP 等实质更新,减少 AD 复制流量)
  3. Refresh 阶段:允许客户端刷新时间戳;
  4. 超过两个周期 → 标记为陈旧记录 (Stale)
  5. dns.exe 后台周期任务扫描,批量删除陈旧记录;
三个开关必须同时开启才生效:服务器全局清理开关、区域清理开关、记录允许老化。

1.6 MS-DNSP RPC 管理通道(对接 dnscmd、图形控制台)

dns.exe 内部承载 RPC 服务端点,接收外部管理指令:
  • 新增 / 删除资源记录、区域配置、转发器、缓存清理;
  • RPC 通道与 DNS 查询通道完全隔离:
    • DNS 业务:UDP/TCP 53(标准 DNS 协议)
    • 管理业务:MS-DNSP RPC(TCP135 + 动态 RPC 端口 / LPC 本地调用)

二、依赖文件清单

2.1 核心主模块

文件路径 功能说明
%windir%\System32\dns.exe DNS 服务宿主进程
dnsrslvr.dll DNS 服务核心逻辑库,协议解析、缓存、查询引擎
dnsadmn.dll AD 集成区域适配器,LDAP 读写 AD 分区
dnsrpc.dll MS-DNSP RPC 服务端存根(与 dnscmd 使用同一套 RPC 接口定义)
rpcrt4.dll Windows RPC 运行时,支撑 MS-DNSP 通信

2.2 安全与网络依赖库

文件 作用
secur32.dll SSPI、GSS-TSIG、Kerberos 身份校验
dnsapi.dll DNS 客户端 API(服务内部辅助名称解析)
crypt32.dll DNSSEC、签名校验加密原语
ntdsapi.dll DC 上访问 AD 数据库依赖

2.3 配套静态文件(文件区域存放目录)

路径:%windir%\System32\dns\
  • cache.dns:根提示文件
  • *.dns:标准文件区域文件
  • backup\:区域导出备份目录

2.4 关键注册表配置

reg
# DNS服务根配置
HKLM\SYSTEM\CurrentControlSet\Services\DNS
# 运行参数、转发器、递归、调试日志、老化全局配置
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters
# AD集成区域分区映射
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones

三、依赖关系梳理

3.1 上游调用方(谁与 dns.exe 交互)

  1. DNS 客户端(PC、服务器、nslookup、Resolve-DnsName):UDP/TCP53 标准 DNS 查询
  2. 管理工具
    • dnscmd.exe:MS-DNSP RPC 客户端
    • dnsmgmt.msc(DNS 管理器 MMC):同样调用 dnsrpc.dll 发起 RPC
    • PowerShell DnsServer 模块:底层封装 MS-DNSP
  3. 域内客户端 Netlogon:DDNS 动态注册 A/AAAA/SRV 记录
  4. DHCP 服务器:代客户端执行 DNS 动态更新

3.2 平层协同组件(AD 域环境重点)

  1. AD DS(ntds.dit)
     
    AD 集成区域存储载体;AD 复制同步 DNS 记录;AD 复制故障直接导致 DNS 记录不同步。
  2. lsass.exe
     
    提供 GSS-TSIG 鉴权、Kerberos 票据校验;动态更新安全认证依赖 LSA。
  3. Netlogon + NRPC
     
    DC 开机自动注册 SRV 记录依靠 Netlogon 向本地 dns.exe 执行 DDNS。
  4. DNS Client(Dnscache)
     
    二者无直接依赖:dns.exe 是服务端;Dnscache 是本机客户端缓存。

3.3 底层依赖

TCP/IP 协议栈(tcpip.sys)、RPC Endpoint Mapper 服务、AFD 网络驱动、Windows 事件日志。

四、四大标准逻辑链路

链路 1:普通客户端域名查询(最常用)

plaintext
客户端 → UDP53 → dns.exe
dns.exe:查询权威区域 → 查询内存缓存 → 转发/根提示递归查询
写入缓存 → 应答报文原路返回客户端

链路 2:dnscmd 远程添加 DNS 记录(MS-DNSP RPC 链路,承接上文 dnscmd)

plaintext
管理员执行 dnscmd DC01 /recordadd
dnscmd.exe → dnsrpc.dll → RPC运行时
TCP135 + RPC动态端口 → 远端dns.exe MS-DNSP RPC端点
dns.exe接收指令
├─文件区域:修改 *.dns 文件
└─AD集成区域:dnsadmn.dll → LDAP写入ntds.dit
更新内存权威数据库 → RPC返回执行结果

链路 3:Windows 客户端开机 DDNS 安全动态更新

plaintext
客户端Netlogon → UDP53 DNS Update报文(携带Kerberos GSS-TSIG签名)
→ dns.exe
dns.exe调用secur32/lsass校验签名
校验通过 → 写入区域,打上时间戳

链路 4:典型故障断链路径

  1. 防火墙拦截 UDP53 → 客户端无法解析;
  2. RPC 端口不通 → dnscmd 报RPC服务器不可用
  3. AD 复制中断 → AD 集成区域记录修改后无法同步其他 DC;
  4. GSS-TSIG 鉴权失败(机器账户密码不一致,DC 快照回滚高发)→ DDNS 更新全部拒绝;
  5. 未开启清理,大量陈旧 DDNS 记录堆积,解析异常;
  6. dns.exe 缓存未刷新:新增记录后,外部查询仍返回旧缓存 → 需要dnscmd /clearcache

五、配套链(运维工具、边界区分、安全、故障体系)

5.1 配套运维工具链

  1. dnsmgmt.msc:图形控制台(同源 MS-DNSP RPC)
  2. dnscmd.exe:传统命令行管理工具
  3. PowerShell DnsServer模块:现代推荐替代方案
  4. nslookup / Resolve-DnsName:DNS 查询客户端(走 53 端口,不操作 dns.exe 配置
  5. Wireshark 抓包过滤:dns(业务流量)、rpc && ms_dnsp(管理流量)
  6. DNS 调试日志:注册表开启Loglevel,由 dns.exe 输出详细报文日志

5.2 技术边界(极易混淆,运维高频踩坑)

对象 使用端口 / 协议 角色
dns.exe UDP/TCP53(DNS) + TCP135 RPC(MS-DNSP) DNS 权威服务进程
dnscmd.exe MS-DNSP RPC 管理客户端,不产生 DNS 查询报文
Dnscache(Svchost) 调用 dnsapi.dll 本机客户端缓存,不监听 53 端口
Netlogon NRPC、DNS 动态更新 负责 SRV 自动注册、机器安全通道

5.3 安全攻击面与加固配套

  1. 关闭非安全动态更新,仅保留 GSS-TSIG 安全更新;
  2. 限制区域传输 AXFR/IXFR,启用 IP 白名单;
  3. 禁用递归(仅内网权威服务器场景);
  4. 监控 dns.exe 模块注入、异常进程终止;
  5. 限制 MS-DNSP RPC 访问权限,仅允许 DNSAdmins 组远程管理。

5.4 和前文 AD 域技术联动(承接域控快照、NRPC、lsass)

DC 执行快照回滚(ntds.dit 回退)连锁故障:
  1. AD 集成 DNS 区域跟随回滚,产生大量过期记录;
  2. DC 机器账户密码不一致 → NRPC 安全通道 5723 报错;
  3. GSS-TSIG 鉴权失败 → DDNS 更新全部失败;
  4. 多 DC 之间 DNS 记录冲突,AD 复制报错。

六、高频故障现象汇总

  1. 客户端无法解析:防火墙拦截 53、dns.exe 服务未启动、区域记录缺失;
  2. dnscmd 执行报错:RPC 端口不通、权限不足、dns.exe 崩溃;
  3. 记录添加成功,但其他 DC 看不到:AD 复制中断;
  4. 客户端 DDNS 注册失败:GSS-TSIG 鉴权失败、区域未启用安全更新;
  5. 解析持续返回旧 IP:dns.exe 递归缓存未刷新;
  6. dns.exe 内存持续上涨:长期开启调试日志、大量递归查询未限制。

七、极简核心总结

  1. dns.exe = Windows 权威 DNS 服务进程,同时承载DNS 协议业务(53 端口) + MS-DNSP RPC 管理接口
  2. 区域两套存储:文件.dns(独立服务器)、AD 分区 ntds.dit(域控 AD 集成,多主复制);
  3. 域环境 DDNS 依靠 GSS-TSIG+Kerberos,鉴权链路依赖 lsass 安全子系统;
  4. dnscmd、DNS 管理器仅通过 RPC 下发指令,不直接读写区域文件 / AD 数据库
  5. AD 集成 DNS 深度绑定 AD,域控快照回滚会同步污染 DNS 区域,属于重大运维风险点。

Dnscache(DNS Client,svchost 托管)完整拆解解构

服务名称:Dnscache,显示名称:DNS 客户端
 
宿主进程:svchost.exe -k NetworkService -p -s Dnscache
 
运行身份:NT AUTHORITY\NetworkService
 
核心定位:Windows 本机 DNS 本地解析器 + 全局内存 DNS 缓存服务
极易混淆边界区分
  1. Dnscache(DNS Client):客户端缓存解析器,不监听 53 端口
  2. dns.exe:Windows DNS Server 服务(权威服务,监听 UDP/TCP 53);
  3. dnscmd.exe:DNS 服务 RPC 管理工具;
  4. nslookup:独立 DNS 查询程序,默认绕过 Dnscache

一、底层原理拆解

1.1 整体分层架构

plaintext
应用程序(浏览器、powershell、ping、winsock getaddrinfo)
        ↓ Win32 DNS API(dnsapi.dll)
svchost.exe(承载Dnscache)
    └─ dnsrslvr.dll(Dnscache核心实现)
        ├─ hosts文件加载器(服务启动载入内存)
        ├─ 内存哈希缓存表(正向记录、负向记录)
        ├─ NRPT策略引擎(名称解析策略表)
        ├─ 多网卡DNS适配器调度
        ├─ DNS查询发包引擎(UDP/TCP 53)
        ├─ 老化淘汰定时器(TTL清理缓存条目)
        └─ RPC服务端点(接收ipconfig /flushdns、查询缓存指令)
            ↓
TCP/IP协议栈(tcpip.sys) → 网络 → 上游DNS服务器

1.2 标准域名解析流水线(优先级顺序)

  1. 应用调用 getaddrinfo / DnsQuery_Adnsapi.dll 将请求通过 LPC/RPC 发送 Dnscache;
  2. Dnscache 优先检索内存 hosts 映射表(启动一次性加载,修改 hosts 默认不自动重载);
  3. hosts 未命中 → 查询内存 DNS 缓存
    • 命中且未过期 → 直接返回 IP;
  4. 缓存未命中 → 根据网卡配置 DNS 服务器,向外发送 UDP53 DNS 查询;
  5. 接收上游 DNS 应答:
    • 正向应答:写入内存缓存(TTL 受控),返回应用;
    • NXDOMAIN 不存在域名:写入负缓存 (Negative Cache),默认缓存 5 分钟;
  6. 返回解析结果至上层应用。
关键特性:缓存全部驻留内存,不落地磁盘;重启 Dnscache 服务缓存全部清空。

1.3 缓存两大类型机制

  1. 正向缓存(资源记录 A/AAAA/CNAME 等)
     
    遵循 DNS 应答 TTL;受注册表 MaxCacheEntryTtlLimit 上限约束(默认 86400s=1 天);
  2. 负向缓存(NXDOMAIN、查询失败)
     
    参数 NegativeCacheTime 默认 300 秒;
     
    作用:短时间内不再重复查询不存在域名,减少网络流量;调试场景常设置为 0 关闭负缓存。

1.4 NRPT(名称解析策略表)内置引擎

Dnscache 内置 NRPT 处理逻辑:
  • 匹配域名规则,强制指定 DNS 服务器、启用 DNSSEC、IPsec 加密 DNS 通信;
  • 域环境 DirectAccess、企业拆分 DNS (Split DNS) 依赖 Dnscache NRPT 实现。

1.5 与 DDNS 动态更新协同逻辑

机器开机 Netlogon 发起动态 DNS 更新(RFC2136/GSS-TSIG):
 
Netlogon → dnsapi.dll → Dnscache 转发 DNS Update 报文至 DNS 服务器(dns.exe)。

1.6 重要特殊行为

  • nslookup直接调用 dnsapi 底层原始查询,绕过 Dnscache 缓存;查询结果不会写入本机缓存;
  • ping、Resolve-DnsName、浏览器:走标准路径,使用 Dnscache;
  • 修改 hosts 文件后,不会自动刷新,必须执行ipconfig /flushdns重载 hosts 内存映射。

二、依赖文件清单

2.1 核心模块

文件路径 功能说明
%SystemRoot%\System32\dnsrslvr.dll Dnscache 服务主体实现,嵌入 svchost
dnsapi.dll Win32 DNS 客户端 API,应用程序调用入口
rpcrt4.dll RPC 运行时,本机进程间通信(LPC)
iphlpapi.dll 网络适配器信息读取、FlushResolverCache 接口
secur32.dll GSS-TSIG 安全动态更新身份支撑

2.2 静态配置文件

  • %SystemRoot%\System32\drivers\etc\hosts:静态域名映射,服务启动加载入内存

2.3 关键注册表路径

reg
# Dnscache服务本体定义
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache

# 缓存策略参数(新建DWORD生效)
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
MaxCacheEntryTtlLimit    ; 正向记录最大缓存TTL,默认86400
NegativeCacheTime        ; NXDOMAIN负缓存时长,默认300秒
MaxNegativeCacheTtl
EnableDNSPrefetch        ; DNS预取优化

2.4 服务依赖链

plaintext
Dnscache
├─ Tcpip(TCP/IP协议栈)
├─ Dhcp(DHCP客户端,获取DNS服务器地址)
└─ RPC(RPC Endpoint Mapper)

三、依赖关系梳理

3.1 上游调用方(谁依赖 Dnscache)

  1. Winsock 应用:浏览器、ping、远程桌面、文件共享;
  2. Netlogon:域环境 DDNS 动态注册;
  3. 组策略客户端、SCCM、域内身份认证组件;
  4. PowerShell Resolve-DnsNameipconfig、WMI 网络查询。

3.2 平层协同组件

  1. dns.exe(Windows DNS Server)
     
    Dnscache 作为普通客户端向 53 端口发起查询;二者无内置进程依赖;一台服务器可同时开启;
  2. Netlogon / NRPC
     
    机器 SRV 记录注册依靠 Dnscache 转发 DNS Update;
  3. lsass.exe
     
    安全动态更新 GSS-TSIG Kerberos 票据校验依赖 LSA;
  4. DHCP Client:获取网卡 DNS 服务器列表,推送至 Dnscache。

3.3 底层依赖

tcpip.sys 网络驱动、AFD、Windows RPC 运行时、LPC 本地进程通信。

四、标准逻辑链路

链路 1:普通应用域名解析完整链路

plaintext
浏览器/ping → getaddrinfo → dnsapi.dll
↓RPC/LPC
svchost(Dnscache+dnsrslvr.dll)
1.查询内存hosts表 → 命中直接返回
2.hosts未命中 → 查询内存DNS缓存
3.缓存未命中 → 组装UDP53 DNS报文,发送至网卡配置DNS服务器
4.接收应答,写入缓存
5.解析结果原路返回应用

链路 2:ipconfig /flushdns 执行链路

plaintext
ipconfig.exe → iphlpapi.dll → FlushResolverCache()
↓RPC调用Dnscache
dnsrslvr.dll清空内存DNS缓存,并重新加载hosts文件映射

链路 3:典型故障断链路径

  1. Dnscache 停止 / 禁用 → 无系统全局缓存;每次解析直接发包;hosts 文件依然生效(dnsapi 直接读取 hosts,不依赖服务);
  2. hosts 修改但未执行 flushdns → Dnscache 依旧使用旧内存 hosts 映射;
  3. 负缓存生效:域名曾经不存在,短期内持续返回 NXDOMAIN;
  4. NRPT 策略配置错误 → 域名被强制转发至错误 DNS;
  5. 多网卡网卡优先级混乱 → Dnscache 选取错误网卡 DNS 服务器。

五、配套链(工具、边界、运维、故障)

5.1 配套运维工具

cmd
# 查看本机DNS缓存
ipconfig /displaydns
# 清空缓存+重载hosts
ipconfig /flushdns

# PowerShell
Clear-DnsClientCache
Get-DnsClientCache

# 服务控制
net stop dnscache
net start dnscache
sc query dnscache
抓包过滤:dns,观察 Dnscache 向外发起的 53 端口查询。

5.2 关键技术边界对照表

对象 端口 角色 是否使用 Dnscache
Dnscache(DNS Client) 客户端随机端口→53 本机解析缓存器
dns.exe UDP/TCP 53(监听) 权威 DNS 服务端
nslookup UDP53 DNS 查询工具 ❌绕过 Dnscache
ping / Resolve-DnsName Winsock 调用 系统标准解析 ✅使用 Dnscache

5.3 禁用 Dnscache 影响清单(运维红线)

✅ 域名仍然可以正常解析;
 
❌ 失去全局 DNS 缓存,重复域名持续发包,网络开销上升;
 
ipconfig /displaydnsipconfig /flushdns失效;
 
❌ NRPT 名称解析策略不生效;
 
❌ DirectAccess、拆分 DNS、企业域 DDNS 动态更新异常;
不建议在域控制器、企业服务器上禁用 Dnscache。

5.4 常见故障现象

  1. 修改 hosts 不生效:未执行ipconfig /flushdns
  2. 域名已经上线,本机依旧返回不存在:负缓存 NXDOMAIN;
  3. 部分内网域名解析异常:NRPT 策略冲突;
  4. Dnscache 高 CPU:恶意程序高频大量域名查询、网卡驱动异常;
  5. 域主机无法自动注册 A 记录:Dnscache 异常导致 DDNS 更新失败。

六、极简核心总结

  1. Dnscache = svchost托管、dnsrslvr.dll实现的Windows 本机 DNS 解析缓存服务,不监听 53 端口;
  2. 解析顺序:内存 hosts 映射 → 内存 DNS 缓存 → 向外 UDP53 查询上游 DNS;
  3. 所有缓存驻留内存,重启服务全部丢失;hosts 启动载入,修改后必须刷新缓存;
  4. nslookup 绕过 Dnscache,是调试时极易踩坑点;
  5. 承载 NRPT 策略、DDNS 动态更新转发,域环境网络基础组件,不建议随意禁用。

dnscmd 常用命令速查表 + DNS RPC 远程管理故障排查 SOP

适用:Windows Server DNS(AD 集成区域 / 标准文件区域)
 
说明:dnscmd 依赖 MS-DNSP RPC,远程管理需开放 RPC 端口;WinServer2012 + 推荐 PowerShell DnsServer 模块作为替代。

一、dnscmd 常用命令速查表

语法通用格式
cmd
dnscmd [DNS服务器名/IP] [操作参数]
# 本地操作可省略服务器名称;远程填写DC/DNS主机名,例:dnscmd DC01.contoso.com

1. 服务器全局操作

cmd
# 查看DNS服务器全局配置
dnscmd /info

# 清除服务器缓存(重要!新增记录不生效时执行)
dnscmd /clearcache

# 重置DNS服务(不重启进程,重载区域)
dnscmd /resetlistenaddresses

# 设置转发器
dnscmd /serverforwarders 8.8.8.8,114.114.114.114

# 启用/禁用递归查询
dnscmd /config /Recursion 1
dnscmd /config /Recursion 0

# 开启DNS老化清理全局开关
dnscmd /config /ScavengingInterval 168

2. 区域管理(Zone)

cmd
# 列出所有区域
dnscmd /enumzones

# 创建AD集成正向区域
dnscmd /zoneadd contoso.com /dsprimary

# 创建标准主要区域(文件区域)
dnscmd /zoneadd test.com /primary /file test.com.dns

# 暂停区域 / 启动区域
dnscmd /zonepause contoso.com
dnscmd /zoneresume contoso.com

# 删除区域(谨慎!)
dnscmd /zonedelete contoso.com /dsdel
# /dsdel 代表AD集成区域同时删除AD分区数据

# 重载区域文件
dnscmd /zonereload contoso.com

# 查询区域配置
dnscmd /zoneinfo contoso.com

3. DNS 资源记录增删改查(最常用)

cmd
# 添加A记录
dnscmd /recordadd contoso.com www A 192.168.1.100

# 添加CNAME
dnscmd /recordadd contoso.com web CNAME www.contoso.com.

# 添加PTR反向记录(反向区域 1.1.168.in-addr.arpa)
dnscmd /recordadd 1.1.168.in-addr.arpa 100 PTR www.contoso.com.

# 添加MX记录
dnscmd /recordadd contoso.com @ MX 10 mail.contoso.com.

# 添加TXT记录
dnscmd /recordadd contoso.com _dmarc TXT "v=DMARC1;p=none"

# 删除记录
dnscmd /recorddelete contoso.com www A 192.168.1.100
# /f 强制删除,不弹出确认
dnscmd /recorddelete contoso.com www A 192.168.1.100 /f

# 枚举区域所有记录
dnscmd /enumrecords contoso.com @

4. 老化与清理(Scavenging,AD-DNS 核心运维)

cmd
# 设置区域无刷新间隔、刷新间隔(单位:小时)
dnscmd /zoneinfo contoso.com
dnscmd /config contoso.com /NoRefreshInterval 168
dnscmd /config contoso.com /RefreshInterval 168

# 手动触发一次区域清理(清理过期DDNS记录)
dnscmd /scavengestalerecords

5. 区域传输、通知配置

cmd
# 允许区域传输列表
dnscmd /config contoso.com /AllowZoneTransfers 2
# 0=禁止,1=所有服务器,2=仅通知列表,3=指定服务器

# 设置区域通知服务器
dnscmd /zonenotify contoso.com add 192.168.1.20

6. 导出导入区域备份

cmd
# 将区域导出到文件
dnscmd /zoneexport contoso.com C:\dns_backup\contoso.txt

7. 辅助调试

cmd
# 启用DNS调试日志(生产慎用,磁盘IO压力大)
dnscmd /config /loglevel 0x00000081
# 关闭日志
dnscmd /config /loglevel 0
重要注意:
 
AD 集成区域使用 /recordadd 修改后,数据写入 ntds.dit,依靠 AD 复制同步;
 
文件区域修改写入 %windir%\System32\dns\*.dns

二、DNS RPC 远程管理故障排查 SOP

适用场景:执行 dnscmd DC01.contoso.com /enumzones 报错
 
典型报错:
 
RPC server unavailableAccess deniedThe DNS server service is not running

前置知识

dnscmd 远程通信链路:
 
dnscmd.exe → dnsrpc.dll → RPC Runtime → TCP135 RPC 映射器 → RPC 动态端口 → 远端 dns.exe
 
协议:MS-DNSP;依赖 Kerberos/NTLM RPC 身份认证

SOP0:信息收集(故障第一步骤)

  1. 本地执行 dnscmd 本机操作是否正常
    cmd
    dnscmd /enumzones
    • 本地正常 → 问题在网络 / RPC / 远程权限
    • 本地失败 → 本机 DNS 服务 dns.exe 异常
  2. 完整报错文本、目标 DNS 服务器主机名 / IP
  3. 客户端与目标服务器是否同一域、是否跨网段、防火墙策略

SOP1:连通性与端口基础检查

  1. Ping 目标服务器 IP / 主机名,确认 DNS 解析正常
cmd
ping DC01.contoso.com
nslookup DC01.contoso.com
  1. 测试 TCP 135 端口连通(RPC Endpoint Mapper)
cmd
telnet DC01.contoso.com 135
Test-NetConnection DC01.contoso.com -Port 135
❌ 不通 → 防火墙拦截(Windows 防火墙 / 边界防火墙)
远程管理完整端口需求:
 
TCP 135 + RPC 动态端口范围(默认 49152–65535)
 
企业加固方案:可配置 RPC 固定端口,或放行端口区间。
  1. 目标服务器确认 DNS 服务已启动
cmd
sc \\DC01 query dns
状态非 Running → 登录远端启动 dns.exe

SOP2:RPC 可用性校验(关键分界点)

使用 wmic 基础 RPC 测试,剥离 dnscmd 因素
cmd
wmic /node:DC01.contoso.com service get name
  • wmic 同样 RPC 不可用:通用 RPC 故障,不只是 DNS
  • wmic 正常,仅 dnscmd 失败:DNS 服务权限、DNSRPC 组件问题

SOP3:身份认证与权限排查(Access denied)

常见场景:能通 135,但返回拒绝访问
  1. 当前账号权限校验
     
    必须属于目标服务器:
     
    Domain Admins / DNSAdmins / Enterprise Admins
  2. 测试强制使用 IP 访问(规避 Kerberos 名称解析异常,回退 NTLM)
cmd
dnscmd 192.168.1.10 /enumzones
  1. 检查目标服务器本地安全策略
     
    secpol.msc → 本地策略 → 用户权限分配
     
    【替换进程级令牌】【从网络访问此计算机】
  2. 远程 RPC 匿名访问限制
     
    HKLM\SYSTEM\CurrentControlSet\Control\Lsa
     
    RestrictRemoteClients 策略过严会阻断 RPC 调用

SOP4:DNS 服务端组件与注册表检查

登录目标 DC 执行:
  1. 确认 DNS 服务依赖完整
cmd
sc qc dns
  1. 检查关键注册表(DNS 参数)
reg
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters
注册表损坏会导致 dns.exe 加载 RPC 提供程序失败。
 
3. 重启 DNS 服务测试
cmd
sc stop dns
sc start dns

SOP5:AD 集成场景特有故障(域控 DNS)

现象:dnscmd 指令提交成功,但记录不跨 DC 同步
  1. 检查 AD 复制状态
cmd
repadmin /showrepl
dcdiag /test:replications
  1. 验证 DNS 应用分区健康
cmd
ntdsutil
domain management
connections
connect to server DC01
list
  1. 区域类型确认是否为 AD 集成
cmd
dnscmd DC01 /zoneinfo contoso.com

SOP6:抓包辅助定位(高级排查)

Wireshark 过滤条件
plaintext
rpc || ms_dnsp
观测点:
  1. TCP 握手 135 是否建立
  2. RPC 端口映射应答
  3. MS-DNSP 请求是否发出
  4. 服务端返回拒绝码:区分权限拒绝 / 服务内部错误

SOP7:临时替代方案(RPC 无法打通应急)

  1. 登录目标 DC 本地执行 dnscmd
  2. 使用 PowerShell DnsServer 模块(底层同样 MS-DNSP,但便于远程会话执行)
powershell
Add-DnsServerResourceRecordA -Name www -ZoneName contoso.com -IPv4Address 192.168.1.100

三、高频故障根因汇总

  1. RPC server unavailable
     
    → TCP135 拦截 / 远端 dns.exe 未启动 / RPC 服务未运行
  2. Access Denied
     
    → 账号不在 DNSAdmins 组、RPC 身份认证失败、LSA 远程访问限制
  3. 命令执行成功,其他 DC 看不到新增记录
     
    → AD 复制中断、AD-DNS 分区同步延迟
  4. 添加记录成功,nslookup 无法解析
     
    → 需要执行 dnscmd /clearcache 刷新 DNS 服务器内存缓存

四、运维最佳实践

  1. 自动化脚本优先迁移至 PowerShell DnsServer 模块,dnscmd 作为兼容备用
  2. 跨网段远程 DNS 管理,提前放行 TCP135 与 RPC 动态端口
  3. AD-DNS 定期执行 dnscmd /scavengestalerecords 清理过期 DDNS 垃圾记录
  4. 禁止在生产长期开启 DNS 调试日志,防止磁盘爆满
 

dnscmd.exe 是 Windows 系统中用于管理 DNS 服务器的命令行工具。它允许管理员通过命令行界面执行各种 DNS 服务器管理任务,如创建和删除 DNS 区域、添加和删除 DNS 记录、配置服务器参数等。

以下是一些 dnscmd.exe 常用的操作和示例:

  1. 列出所有的 DNS 区域:

    Copy Code
    dnscmd.exe /enumzones

    这个命令将列出当前 DNS 服务器上所有的 DNS 区域。

  2. 列出特定区域的 DNS 记录:

    Copy Code
    dnscmd.exe /zoneprint zone_name

    这个命令将打印指定 DNS 区域的详细信息,包括所有的 DNS 记录。

  3. 创建新的 DNS 区域:

    Copy Code
    dnscmd.exe /zoneadd zone_name /primary /file zone_file_name

    这个命令将创建一个新的主 DNS 区域,并指定其相关的区域文件。

  4. 删除 DNS 区域:

    Copy Code
    dnscmd.exe /zonedelete zone_name /f

    这个命令将删除指定的 DNS 区域。注意使用 /f 参数来强制删除。

  5. 添加 A 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name node_name /a /ipv4_address

    这个命令将在指定的 DNS 区域中为指定的节点添加一个 A 记录。

  6. 删除 DNS 记录:

    Copy Code
    dnscmd.exe /recorddelete zone_name node_name /rrtype [/recorddata] [/f]

    这个命令将删除指定的 DNS 记录。

  7. 修改 DNS 服务器属性:

    Copy Code
    dnscmd.exe /config /Forwarders [forwarder_list]

    这个命令将配置 DNS 服务器的转发器列表,用于处理无法解析的 DNS 查询。

  8. 查看 DNS 服务器的详细信息:

    Copy Code
    dnscmd.exe /info

    这个命令将显示当前 DNS 服务器的详细信息,包括版本、配置和状态。

  9. 设置和查看缓存参数:

    Copy Code
    dnscmd.exe /Cache [add | delete | list] [/name name] [/node node] [/file filename] [/skipnodelookup] [/directory directory] [/statistics]

    这个命令用于管理 DNS 服务器的缓存参数,可以添加、删除、列出缓存条目,或者显示缓存的统计信息。

  10. 启用和禁用 DNS 日志:

    Copy Code
    dnscmd.exe /Logging level [logfilepath]

    这个命令可以设置 DNS 服务器的日志级别,并指定日志文件的路径。

  11. 修改 DNS 服务器的安全设置:

    Copy Code
    dnscmd.exe /Security /directory <directory> /protect <flag>

    这个命令允许管理员配置 DNS 服务器的安全设置,以保护其配置和数据。

  12. 导出和导入 DNS 数据:

    Copy Code
    dnscmd.exe /ZoneExport zone_name zone_file_name
    dnscmd.exe /ZoneImport zone_name zone_file_name

    这些命令用于导出和导入 DNS 区域数据,便于备份、恢复或迁移 DNS 服务器的配置。

  13. 配置区域传送:

    Copy Code
    dnscmd.exe /zonerefresh zone_name [server_IP_address]

    这个命令用于强制刷新指定区域的传送。

  14. 设置区域的区域传送策略:

    Copy Code
    dnscmd.exe /zonerefresh zone_name /secondary

    这个命令设置指定区域的传送策略为辅助。

  15. 查看和修改 DNS 服务器的监听地址:

    Copy Code
    dnscmd.exe /ipinfo /socket [address] [/timeout value] [/port value] [/priority value]

    这个命令可以查看和修改 DNS 服务器监听的 IP 地址和端口。

  16. 设置和查看 DNS 服务器缓存参数:

    Copy Code
    dnscmd.exe /Cache [add | delete | list] [/name name] [/node node] [/file filename] [/skipnodelookup] [/directory directory] [/statistics]

    这个命令用于管理 DNS 服务器的缓存参数,可以添加、删除、列出缓存条目,或者显示缓存的统计信息。

  17. 设置和查看 DNS 服务器转发参数:

    Copy Code
    dnscmd.exe /forwarder [IPAddress] [list | add | delete] [forwarder]

    这个命令可以设置 DNS 服务器的转发器地址,也可以列出、添加或删除转发器。

  18. 配置和管理 DNS 服务器的区域属性:

    Copy Code
    dnscmd.exe /zoneinfo zone_name [/pause | /start | /load | /reload | /clear]

    这个命令用于配置和管理指定 DNS 区域的属性,如暂停、启动、加载、重新加载或清除区域。

  19. 配置和管理 DNS 服务器的日志:

    Copy Code
    dnscmd.exe /logging level logfilepath

    这个命令用于设置 DNS 服务器的日志级别和日志文件路径。

  20. 查看和修改 DNS 服务器的安全设置:

    Copy Code
    dnscmd.exe /security /directory directory /protect {2 | 3 | 4}

    这个命令可以查看和修改 DNS 服务器的安全设置,包括保护目录和设置保护级别。

  21. 查看和修改 DNS 区域的 SOA 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name @ SOA [SOA_record_data]

    这个命令用于添加或修改指定区域的 SOA 记录。

  22. 查看和修改 DNS 区域的 NS 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name @ NS [NS_record_data]

    这个命令用于添加或修改指定区域的 NS 记录。

  23. 查看和修改 DNS 区域的 A 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name node_name A IP_address

    这个命令用于添加或修改指定区域的 A 记录。

  24. 查看和修改 DNS 区域的 CNAME 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name node_name CNAME canonical_name

    这个命令用于添加或修改指定区域的 CNAME 记录。

  25. 查看和修改 DNS 区域的 MX 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name @ MX mail_exchange_host [preference]

    这个命令用于添加或修改指定区域的 MX 记录。

  26. 查看和修改 DNS 区域的 PTR 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name subnet PTR host_name

    这个命令用于添加或修改指定区域的 PTR 记录。

  27. 查看和修改 DNS 区域的 SRV 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name service SRV priority weight port target

    这个命令用于添加或修改指定区域的 SRV 记录。

  28. 查看和修改 DNS 区域的 TXT 记录:

    Copy Code
    dnscmd.exe /recordadd zone_name node_name TXT "text_data"

    这个命令用于添加或修改指定区域的 TXT 记录。

  29. 删除指定区域的记录:

    Copy Code
    dnscmd.exe /recorddelete zone_name node_name [/recordtype] [/f]

    这个命令用于删除指定区域中的记录,可以根据节点名称和记录类型进行删除。

  30. 设置和查看 DNS 区域的 Aging 参数:

    Copy Code
    dnscmd.exe /aging zone_name [/scavenging] [/norefresh] [/refresh] [/disable | /enable]

    这个命令用于设置 DNS 区域的老化参数,包括清除和刷新间隔,以及启用或禁用老化。

  31. 设置和查看 DNS 服务器的区域传输:

    Copy Code
    dnscmd.exe /zonetransfer [add | create | delete] zone_name [server_list]

    这个命令用于设置 DNS 服务器的区域传输,可以添加、创建或删除传输设置。

  32. 导出和导入 DNS 区域数据:

    Copy Code
    dnscmd.exe /zoneexport zone_name filename [/overwrite]
    Copy Code
    dnscmd.exe /zoneimport zone_name filename [/file filename] [/load]

    这些命令分别用于导出和导入 DNS 区域的数据,可以实现备份和恢复的功能。

  33. 列出和设置 DNS 服务器的全局参数:

    Copy Code
    dnscmd.exe /info [/verbose]
    Copy Code
    dnscmd.exe /config [SettingName] [Value]

    这些命令用于列出和设置 DNS 服务器的全局信息和配置参数。

  34. 显示 DNS 服务器的状态和性能统计:

    Copy Code
    dnscmd.exe /statistics [/s]

    这个命令用于显示 DNS 服务器的状态和性能统计信息,包括服务状态、缓存信息等。

  35. 执行 DNS 服务器的命令脚本:

    Copy Code
    dnscmd.exe /batch filename

    这个命令用于执行预先编写的 DNS 服务器命令脚本,批量进行管理操作。

  36. 查看和修改 DNS 缓存中的记录:

    Copy Code
    dnscmd.exe /cache [/display | /clear]

    这个命令用于显示或清除 DNS 服务器的缓存记录,有助于管理和优化服务器性能。

  37. 查看和修改 DNS 服务器的转发设置:

    Copy Code
    dnscmd.exe /forwarders [action] [forwarder_IP_address] [...]

    这个命令用于配置 DNS 服务器的转发器,可以添加、删除或显示当前的转发设置。

  38. 设置和查看 DNS 区域的安全性:

    Copy Code
    dnscmd.exe /zoneinfo zone_name [/dsprimary | /file | /load]

    这个命令用于配置和查看 DNS 区域的安全性选项,包括是否使用 DS 记录、文件存储方式等。

  39. 配置和管理 DNS 服务器的日志:

    Copy Code
    dnscmd.exe /logging [log_file] [log_file_max_size] [debug_level] [event_level]

    这个命令用于配置 DNS 服务器的日志记录选项,包括日志文件、最大大小、调试级别和事件级别。

  40. 监视和测试 DNS 服务器的运行状态:

    Copy Code
    dnscmd.exe /monitor [server_list]

    这个命令用于监视和测试 DNS 服务器的运行状态,可以指定多个服务器进行监控。

  41. 设置和查看 DNS 服务器的故障转移选项:

    Copy Code
    dnscmd.exe /ipinfo [IPAddress] [IPAddress2] [...]

    这个命令用于设置 DNS 服务器的故障转移选项,确保在发生故障时可以自动切换到备用 IP 地址。

  42. 配置和管理 DNS 服务器的区域重载:

    Copy Code
    dnscmd.exe /reload zone_name [/dsprimary | /file | /load]

    这个命令用于配置和管理 DNS 服务器的区域重载,包括是否使用 DS 记录、文件存储方式等选项。

  43. 执行 DNS 服务器的动态更新:

    Copy Code
    dnscmd.exe /zonerefresh zone_name [node_name]

    这个命令用于执行 DNS 服务器的动态更新操作,确保区域数据与 DNS 客户端同步更新。

  44. 查看和配置 DNS 服务器的监听接口:

    Copy Code
    dnscmd.exe /listenaddresses [IPv4_address | IPv6_address]

    这个命令用于配置 DNS 服务器监听的网络接口地址,可以指定 IPv4 或 IPv6 地址。

  45. 设置和查看 DNS 服务器的客户端递归查询选项:

    Copy Code
    dnscmd.exe /recursion [zone_name] [/enable | /disable]

    这个命令用于设置 DNS 服务器的客户端递归查询选项,可以为特定区域启用或禁用递归查询。

  46. 配置和管理 DNS 服务器的安全设置:

    Copy Code
    dnscmd.exe /securelist [IP_address]

    这个命令用于配置 DNS 服务器的安全列表,可以限制允许的查询和更新的 IP 地址范围。

  47. 查看和修改 DNS 服务器的监视选项:

    Copy Code
    dnscmd.exe /serverlevelplugindll [action] [plug-in DLL file name]

    这个命令用于配置 DNS 服务器的监视选项,可以加载或卸载监视插件 DLL 文件。

  48. 设置和查看 DNS 服务器的缓存参数:

    Copy Code
    dnscmd.exe /cachelimits [max_cache_size] [min_cache_size]

    这个命令用于设置 DNS 服务器的缓存大小限制,包括最大和最小缓存大小。

  49. 配置和管理 DNS 服务器的端口绑定:

    Copy Code
    dnscmd.exe /portinfo [UDP_port_number] [TCP_port_number]

    这个命令用于配置 DNS 服务器的端口绑定选项,可以指定 UDP 和 TCP 端口号。

  50. 查看和配置 DNS 服务器的启动选项:

    Copy Code
    dnscmd.exe /bootmethod [boot method]

    这个命令用于配置 DNS 服务器的启动选项,可以设置启动方法,如启动时加载的区域和配置文件等。

  51. 配置和管理 DNS 服务器的区域传送选项:

    Copy Code
    dnscmd.exe /zonetransfer [zone_name] [server_list] [action]

    这个命令用于配置 DNS 服务器的区域传送选项,可以指定允许传送的服务器列表和动作(如允许或拒绝)。

  52. 查看和修改 DNS 服务器的监听端口:

    Copy Code
    dnscmd.exe /listenport [port_number]

    这个命令用于配置 DNS 服务器的监听端口,可以指定服务器监听的特定端口号。

  53. 配置和管理 DNS 服务器的重启选项:

    Copy Code
    dnscmd.exe /resetlistenaddresses [IPv4_address | IPv6_address]

    这个命令用于重置 DNS 服务器的监听地址,可以指定新的 IPv4 或 IPv6 地址。

  54. 设置和查看 DNS 服务器的转发超时时间:

    Copy Code
    dnscmd.exe /timeout [timeout_seconds]

    这个命令用于设置 DNS 服务器的转发超时时间,以确保在转发查询时避免超时问题。

  55. 配置和管理 DNS 服务器的日志滚动选项:

    Copy Code
    dnscmd.exe /logrollover [log_file] [log_file_max_size] [log_file_path]

    这个命令用于配置 DNS 服务器的日志滚动选项,可以设置日志文件的最大大小和保存路径。

  56. 设置和查看 DNS 服务器的逆向查询选项:

    Copy Code
    dnscmd.exe /revservlist [subnet]

    这个命令用于配置 DNS 服务器的逆向查询选项,指定允许逆向查询的子网范围。

  57. 配置和管理 DNS 服务器的运行模式:

    Copy Code
    dnscmd.exe /serverlevel [action] [type]

    这个命令用于配置 DNS 服务器的运行模式,可以设置为主服务器、辅助服务器或缓存服务器模式。

  58. 设置和查看 DNS 服务器的服务状态:

    Copy Code
    dnscmd.exe /status [server_name]

    这个命令用于查看指定 DNS 服务器的当前服务状态,包括运行时间和活动连接数等信息。

  59. 配置和管理 DNS 服务器的区域数据文件:

    Copy Code
    dnscmd.exe /zoneinfo [zone_name] [filename]

    这个命令用于配置 DNS 服务器的区域数据文件,可以指定特定区域的数据文件名称。

  60. 设置和查看 DNS 服务器的传输日志选项:

    Copy Code
    dnscmd.exe /logging [log_file] [log_file_max_size] [log_file_path]

    这个命令用于设置 DNS 服务器的传输日志选项,可以配置传输日志文件的最大大小和保存路径。

  61. 配置和管理 DNS 服务器的故障转移选项:

    Copy Code
    dnscmd.exe /failover [zone_name] [master_IP] [backup_IP]

    这个命令用于配置 DNS 服务器的故障转移选项,指定主服务器和备份服务器的 IP 地址。

  62. 设置和查看 DNS 服务器的回溯传输选项:

    Copy Code
    dnscmd.exe /backtransfer [zone_name] [master_server] [/secure]

    这个命令用于设置 DNS 服务器的回溯传输选项,指定从主服务器回溯传输区域数据。

  63. 配置和管理 DNS 服务器的数据文件位置:

    Copy Code
    dnscmd.exe /fileinfo [zone_name] [file_name] [operation]

    这个命令用于配置 DNS 服务器的数据文件位置,可以指定区域数据文件的名称和操作。

  64. 查看和管理 DNS 服务器的动态更新选项:

    Copy Code
    dnscmd.exe /zoneload [zone_name] [/load | /unload]

    这个命令用于管理 DNS 服务器的动态更新选项,可以加载或卸载特定区域的动态更新。

  65. 配置和管理 DNS 服务器的租约时间选项:

    Copy Code
    dnscmd.exe /setlifetime [lease_time] [refresh_time] [renew_time] [no_refresh_time]

    这个命令用于配置 DNS 服务器的租约时间选项,包括租约、刷新、续订和不刷新时间。

  66. 设置和查看 DNS 服务器的转发选项:

    Copy Code
    dnscmd.exe /forwarders [list_of_IP_addresses] [/enable | /disable]

    这个命令用于配置 DNS 服务器的转发选项,指定转发查询到指定的 IP 地址列表或禁用转发功能。

  67. 配置和管理 DNS 服务器的区域属性:

    Copy Code
    dnscmd.exe /zoneinfo [zone_name] [property_name] [value]

    这个命令用于配置 DNS 服务器特定区域的属性,可以设置属性的名称和对应的值。

  68. 设置和查看 DNS 服务器的安全选项:

    Copy Code
    dnscmd.exe /security [zone_name] [operation] [principal_name] [permission]

    这个命令用于设置 DNS 服务器的安全选项,可以指定特定区域的操作、主体名称和权限。

  69. 配置和管理 DNS 服务器的区域类型:

    Copy Code
    dnscmd.exe /zonetype [zone_name] [type]

    这个命令用于配置 DNS 服务器的特定区域类型,例如主区、从区或存根区。

  70. 设置和查看 DNS 服务器的缓存清理选项:

    Copy Code
    dnscmd.exe /clearcache [/zone | /server]

    这个命令用于清除 DNS 服务器的缓存,可以选择清除特定区域的缓存或整个服务器的缓存。

  71. 配置和管理 DNS 服务器的记录:

    Copy Code
    dnscmd.exe /recordadd [zone_name] [node_name] [record_type] [record_data]

    这个命令用于添加 DNS 服务器的记录,可以指定区域名称、节点名称、记录类型和记录数据。

  72. 设置和查看 DNS 服务器的转储文件选项:

    Copy Code
    dnscmd.exe /config [/dsprimary | /localdirectory | /roothints]

    这个命令用于配置 DNS 服务器的转储文件选项,可以设置主目录服务、本地目录或根提示。

  73. 配置和管理 DNS 服务器的信任关系:

    Copy Code
    dnscmd.exe /trustadd [trusting_domain] [trusted_domain] [trust_type] [trust_level]

    这个命令用于配置 DNS 服务器的信任关系,可以指定信任的域、受信任的域、信任类型和信任级别。

  74. 设置和查看 DNS 服务器的优先级和权重:

    Copy Code
    dnscmd.exe /priority [zone_name] [node_name] [priority] [weight]

    这个命令用于设置 DNS 服务器的记录优先级和权重,可以指定区域名称、节点名称、优先级和权重。

  75. 配置和管理 DNS 服务器的区域刷新选项:

    Copy Code
    dnscmd.exe /refresh [zone_name]

    这个命令用于配置 DNS 服务器的区域刷新选项,手动触发特定区域的刷新操作。

  76. 设置和查看 DNS 服务器的数据更新选项:

    Copy Code
    dnscmd.exe /update [/resync]

    这个命令用于设置 DNS 服务器的数据更新选项,可以强制进行数据更新或重新同步。

  77. 配置和管理 DNS 服务器的监视选项:

    Copy Code
    dnscmd.exe /monitor [/threshold] [/timeout]

    这个命令用于配置 DNS 服务器的监视选项,可以设置监视的阈值和超时时间。

  78. 设置和查看 DNS 服务器的负载平衡选项:

    Copy Code
    dnscmd.exe /load [/test]

    这个命令用于设置 DNS 服务器的负载平衡选项,可以测试服务器的负载情况或进行负载平衡操作。

  79. 配置和管理 DNS 服务器的日志文件:

    Copy Code
    dnscmd.exe /logoff [log_file]

    这个命令用于配置 DNS 服务器的日志文件,可以指定日志文件的名称或关闭日志记录。

  80. 设置和查看 DNS 服务器的通知选项:

    Copy Code
    dnscmd.exe /notify [zone_name] [notification_address]

    这个命令用于设置 DNS 服务器的通知选项,可以配置特定区域的通知地址。

  81. 配置和管理 DNS 服务器的权威数据:

    Copy Code
    dnscmd.exe /authority [zone_name] [/reset]

    这个命令用于配置 DNS 服务器的权威数据,可以重置特定区域的权威设置。

  82. 设置和查看 DNS 服务器的解析选项:

    Copy Code
    dnscmd.exe /resolve [query_name] [query_type] [server_address]

    这个命令用于设置 DNS 服务器的解析选项,可以指定查询名称、查询类型和服务器地址。

  83. 配置和管理 DNS 服务器的缓存预热选项:

    Copy Code
    dnscmd.exe /prewarm [zone_name]

    这个命令用于配置 DNS 服务器的缓存预热选项,可以预热特定区域的缓存。

  84. 设置和查看 DNS 服务器的远程管理选项:

    Copy Code
    dnscmd.exe /remotemanagement [/enable | /disable]

    这个命令用于设置 DNS 服务器的远程管理选项,可以启用或禁用远程管理功能。

  85. 配置和管理 DNS 服务器的记录生存时间:

    Copy Code
    dnscmd.exe /ttl [zone_name] [node_name] [record_type] [ttl_seconds]

    这个命令用于配置 DNS 服务器记录的生存时间(TTL),可以指定区域名称、节点名称、记录类型和 TTL 值。

  86. 设置和查看 DNS 服务器的自动清理选项:

    Copy Code
    dnscmd.exe /cleanup [/glue]

    这个命令用于设置 DNS 服务器的自动清理选项,可以清理无效的记录或修剪刻录机记录。

  87. 配置和管理 DNS 服务器的缓存锁定选项:

    Copy Code
    dnscmd.exe /cachelock [zone_name]

    这个命令用于配置 DNS 服务器的缓存锁定选项,可以锁定特定区域的缓存。

  88. 设置和查看 DNS 服务器的区域传送选项:

    Copy Code
    dnscmd.exe /transfer [zone_name] [/timeout] [/force]

    这个命令用于设置 DNS 服务器的区域传送选项,可以指定传送的区域、超时时间和强制传送。

  89. 配置和管理 DNS 服务器的故障转移选项:

    Copy Code
    dnscmd.exe /failover [zone_name] [node_name] [primary_server] [backup_server]

    这个命令用于配置 DNS 服务器的故障转移选项,可以指定区域名称、节点名称、主服务器和备份服务器。

  90. 设置和查看 DNS 服务器的协议选项:

    Copy Code
    dnscmd.exe /protocol [/nt4emulation | /ssl]

    这个命令用于设置 DNS 服务器的协议选项,可以配置 NT4 模拟或启用 SSL。

  91. 配置和管理 DNS 服务器的逆向查找选项:

    Copy Code
    dnscmd.exe /reverselookup [/subnets]

    这个命令用于配置 DNS 服务器的逆向查找选项,可以设置子网的逆向查找。

  92. 设置和查看 DNS 服务器的验证选项:

    Copy Code
    dnscmd.exe /validate [zone_name] [/node]

    这个命令用于设置 DNS 服务器的验证选项,可以验证特定区域或节点。

    1. 配置和管理 DNS 服务器的数据文件选项:

      Copy Code
      dnscmd.exe /fileinfo [zone_name]

      这个命令用于配置 DNS 服务器的数据文件选项,可以查看特定区域的数据文件信息。

    2. 设置和查看 DNS 服务器的服务选项:

      Copy Code
      dnscmd.exe /service [restart | pause | resume | status]

      这个命令用于设置 DNS 服务器的服务选项,可以重新启动、暂停、恢复服务或查看服务状态。

    3. 配置和管理 DNS 服务器的缓存文件选项:

      Copy Code
      dnscmd.exe /cache [dump | reset | show]

      这个命令用于配置 DNS 服务器的缓存文件选项,可以导出、重置或显示缓存内容。

    4. 设置和查看 DNS 服务器的拒绝策略选项:

      Copy Code
      dnscmd.exe /refuse [query_type] [/subnets]

      这个命令用于设置 DNS 服务器的拒绝策略选项,可以指定拒绝的查询类型或子网。

    5. 配置和管理 DNS 服务器的资源记录选项:

      Copy Code
      dnscmd.exe /resource [zone_name] [node_name] [record_type]

      这个命令用于配置 DNS 服务器的资源记录选项,可以管理特定区域、节点和记录类型的资源记录。

    6. 设置和查看 DNS 服务器的转发选项:

      Copy Code
      dnscmd.exe /forwarder [/enable | /disable] [forwarder_address]

      这个命令用于设置 DNS 服务器的转发选项,可以启用或禁用转发功能,并指定转发的地址。

    7. 配置和管理 DNS 服务器的扩展选项:

      Copy Code
      dnscmd.exe /extension [/property] [/disable]

      这个命令用于配置 DNS 服务器的扩展选项,可以设置扩展的属性或禁用扩展。

    8. 设置和查看 DNS 服务器的策略选项:

    ```
    dnscmd.exe /policy [/enable | /disable]
    ```
    这个命令用于设置 DNS 服务器的策略选项,可以启用或禁用策略功能。
    1. 配置和管理 DNS 服务器的记录锁定选项:
    ```
    dnscmd.exe /recordlock [zone_name] [node_name] [record_type]
    ```
    这个命令用于配置 DNS 服务器的记录锁定选项,可以锁定特定区域、节点和记录类型的记录。
    1. 设置和查看 DNS 服务器的安全选项:
    ```
    dnscmd.exe /security [zone_name] [/directory]
    ```
    这个命令用于设置 DNS 服务器的安全选项,可以配置特定区域的安全设置或指定安全目录。
    1. 配置和管理 DNS 服务器的状态选项:
    ```
    dnscmd.exe /status [zone_name] [node_name] [record_type]
    ```
    这个命令用于配置 DNS 服务器的状态选项,可以查看特定区域、节点和记录类型的状态信息。
    1. 设置和查看 DNS 服务器的区域选项:
    ```
    dnscmd.exe /zoneinfo [zone_name]
    ```
    这个命令用于设置 DNS 服务器的区域选项,可以查看特定区域的信息和选项。
    1. 配置和管理 DNS 服务器的动态更新选项:
    ```
    dnscmd.exe /update [zone_name] [node_name] [record_type] [update_type]
    ```
    这个命令用于配置 DNS 服务器的动态更新选项,可以指定区域、节点、记录类型和更新类型。
    1. 设置和查看 DNS 服务器的版本选项:
    ```
    dnscmd.exe /version
    ```
    这个命令用于设置 DNS 服务器的版本选项,可以查看当前 DNS 服务器的版本信息。
    1. 配置和管理 DNS 服务器的区域传输选项:
    ```
    dnscmd.exe /zonetransfer [zone_name] [/timeout] [/slave]
    ```
    这个命令用于配置 DNS 服务器的区域传输选项,可以指定区域名称、超时时间和从服务器设置。
    1. 设置和查看 DNS 服务器的区域属性选项:
    ```
    dnscmd.exe /zoneproperty [zone_name] [/notify] [/ds]
    ```
    这个命令用于设置 DNS 服务器的区域属性选项,可以配置区域的通知设置和目录集成。
    1. 配置和管理 DNS 服务器的监视选项:
    ```
    dnscmd.exe /monitor [zone_name] [node_name] [record_type]
    ```
    这个命令用于配置 DNS 服务器的监视选项,可以监视特定区域、节点和记录类型的状态。
    1. 设置和查看 DNS 服务器的自动更新选项:
    ```
    dnscmd.exe /autocache [enable | disable]
    ```
    这个命令用于设置 DNS 服务器的自动更新选项,可以启用或禁用自动缓存更新功能。

dnscmd.exe 是一个强大的工具,适用于需要通过命令行对 DNS 服务器进行管理和配置的情况。使用它可以实现对 DNS 服务器灵活的管理和自动化操作。


dnscmd.exe 是 Windows 操作系统中用于管理和配置 DNS 服务器的命令行工具,它的架构可以简单描述如下:

  1. 命令行接口: dnscmd.exe 提供了命令行界面,允许管理员通过输入命令来执行各种 DNS 服务器管理任务。

  2. 模块化设计: dnscmd.exe 设计为模块化的工具,支持多个子命令和选项,每个子命令都对应于 DNS 服务器管理的不同功能和操作。

  3. 运行环境: dnscmd.exe 运行于 Windows 操作系统的命令行环境中,可以直接在命令提示符或批处理脚本中调用和使用。

  4. 系统依赖: 它依赖于 Windows DNS Server (DNS 服务器) 的存在和正确配置,可以连接到本地或远程的 DNS 服务器来执行管理任务。

  5. 管理功能: dnscmd.exe 支持多种管理功能,包括但不限于创建、删除、修改 DNS 记录、配置区域传输、设置安全选项、查看服务器状态等。

  6. 权限要求: 为了运行 dnscmd.exe,用户通常需要具有管理员权限或至少是 DNS 服务器管理员角色的成员。

总体来说,dnscmd.exe 的架构设计旨在为 Windows 平台上的 DNS 管理员提供一个强大和灵活的工具,帮助他们有效地管理和维护 DNS 服务器的配置和运行状态。


以下是 Windows Server 2022 的 DNS 备份批处理脚本示例:

Copy Code
@echo off

setlocal

rem 定义备份路径
set backupPath=c:\dns_backup\

rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=dns_backup-%datestamp%-%timestamp%.dns"

rem 导出 DNS 区域配置
dnscmd /zoneexport mydomain.com "%backupPath%%backupFileName%"

rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
    echo DNS 备份成功:%backupFileName%
) else (
    echo DNS 备份失败!%backupFileName% 文件不存在。
)

endlocal

pause

在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 dnscmd 命令导出 DNS 区域配置并存储到备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“DNS 备份成功”,否则输出“DNS 备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化 DNS 备份。请注意,在执行脚本之前,请确保您已经安装了 DNS 服务并在管理员权限下运行此脚本。

 

以下是 Windows Server 2022 的组策略备份批处理脚本示例:

Copy Code
@echo off

setlocal

rem 定义备份路径
set backupPath=C:\GroupPolicyBackup\

rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=GroupPolicyBackup_%datestamp%_%timestamp%.zip"

rem 备份组策略
powershell -command "& {Get-GPO -All | Backup-GPO -Path '%backupPath%'}"

rem 压缩备份文件
powershell -command "& {Compress-Archive '%backupPath%' '%backupPath%%backupFileName%'}"

rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
    echo 组策略备份成功:%backupFileName%
) else (
    echo 组策略备份失败!备份文件 %backupFileName% 不存在。
)

endlocal

pause

在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 PowerShell 命令 Get-GPOBackup-GPO 备份所有组策略,并将其保存到指定的备份路径中。接下来,我们使用 Compress-Archive 将备份文件压缩为 ZIP 文件并存储到备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“组策略备份成功”,否则输出“组策略备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化组策略备份。请注意,在执行脚本之前,请确保您已经安装了 PowerShell 并在管理员权限下运行此脚本。

 

以下是 Windows Server 2022 的注册表备份批处理脚本示例:

Copy Code
@echo off

setlocal

rem 定义备份路径
set backupPath=C:\RegistryBackup\

rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=RegistryBackup_%datestamp%_%timestamp%.reg"

rem 备份注册表
reg export HKEY_LOCAL_MACHINE "%backupPath%%backupFileName%"

rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
    echo 注册表备份成功:%backupFileName%
) else (
    echo 注册表备份失败!备份文件 %backupFileName% 不存在。
)

endlocal

pause

在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 reg export 命令备份整个 HKEY_LOCAL_MACHINE 分支的注册表,并将其保存到指定的备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“注册表备份成功”,否则输出“注册表备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化注册表备份。请注意,在执行脚本之前,请确保您已经以管理员身份运行此脚本。

 

以下是 Windows Server 2022 的驱动程序备份脚本示例:

Copy Code
@echo off

setlocal

rem 定义备份路径
set backupPath=C:\DriverBackup\

rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=DriverBackup_%datestamp%_%timestamp%.zip"

rem 备份驱动程序
dism /online /export-driver /destination:"%backupPath%"

rem 压缩备份文件
powershell -command "& {Compress-Archive '%backupPath%' '%backupPath%%backupFileName%'}"

rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
    echo 驱动程序备份成功:%backupFileName%
) else (
    echo 驱动程序备份失败!备份文件 %backupFileName% 不存在。
)

endlocal

pause

在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 dism 命令备份当前系统中所有驱动程序,并将其保存到指定的备份路径中。接下来,我们使用 Compress-Archive 将备份文件压缩为 ZIP 文件并存储到备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“驱动程序备份成功”,否则输出“驱动程序备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化驱动程序备份。请注意,在执行脚本之前,请确保您已经以管理员身份运行此脚本。

posted @ 2023-06-03 17:11  suv789  阅读(683)  评论(0)    收藏  举报