PowerShell巡检AD DS需整合ActiveDirectory模块与dcdiag/repadmin/nltest等命令,检查服务状态、DC角色、复制健康、事件日志并生成结构化报告,确保稳定、可维护、定时执行且精准告警。
用 powershell 编写自动化脚本巡检 active directory 域服务(ad ds)状态,核心是调用 windows 内置模块 activedirectory 和系统级命令(如 dcdiag、repadmin、nltest),结合事件日志、服务状态与复制健康度做综合判断。重点不是“一次性跑通”,而是让脚本能稳定、可读、可维护、可定时执行,并输出明确的告警依据。
检查域控制器基础服务与角色状态
确保关键服务(如 NTDS、KDC、DNS Server)正在运行,且本机已正确注册为域控制器角色:
- 用
Get-Service检查NTDS、KDC、DNS、Netlogon是否为Running;任意一个异常即标记为“服务异常” - 用
Get-ADDomainController -Filter * -Server $env:COMPUTERNAME验证本机是否被识别为 DC;若报错或返回空,说明 AD DS 未启用或元数据损坏 - 补充检查
nltest /dsgetdc:$domain返回是否包含本机 FQDN 和“Flags: PDC GC DS LDAP KDC TIMESERV”等关键标识
验证域内复制与拓扑连通性
复制故障是 AD 最常见隐患,需主动探测而非被动等待 USN 不一致告警:
- 运行
repadmin /replsummary解析输出,关注IN ERROR和FAILED列非零值;建议用repadmin /showrepl /errorsonly直接过滤失败项 - 对每个源 DC 执行
repadmin /showrepl $sourceDC /verbose,提取最近同步时间戳,比对是否超过阈值(如 > 3 小时) - 用
Test-Connection -ComputerName $targetDC -Count 1 -Quiet+Test-NetConnection $targetDC -Port 389验证网络与 LDAP 端口可达性
运行 dcdiag 并结构化解析关键测试项
dcdiag 是微软官方诊断工具,但原始输出难解析。脚本中应聚焦高危项并跳过耗时/低价值测试:
通过 handsfree-windows CLI控制 Windows 本机应用 (UIA) 和浏览器 (Playwright) 的引导技能,用于自动化或测试桌面应用。
- 执行
dcdiag /s:$env:COMPUTERNAME /test:Connectivity /test:Replications /test:Advertising /test:KnowsOfRoleHolders /test:RidManager /test:Services /test:SysVolCheck /test:VerifyReferences /v - 用正则匹配输出中的
FAIL、ERROR、WARNING行,特别关注Advertising(是否被其他 DC 正确发现)、RidManager(RID 池是否枯竭)、SysVolCheck(SYSVOL 共享与复制状态) - 避免使用
/test:All,因其含大量冗余项(如 DNS 测试需额外配置),易掩盖真正问题
采集关键事件日志与生成可读报告
将结果汇总为结构化输出,便于人工复核或对接监控平台:
- 从
System、Directory Service、DFS Replication日志中提取过去 24 小时内Level = Error or Warning且EventID属于 AD 高危列表(如 1311、1925、2087、4013、4016)的条目 - 用
[PSCustomObject]组织结果:包含CheckItem、Status(Pass/Fail/Warning)、Details、Timestamp - 导出为 CSV 或 HTML 报告,添加邮件发送逻辑(
Send-MailMessage),仅在出现 Fail/Warning 时触发告警,避免“静默成功”导致疏忽
不复杂但容易忽略:所有远程命令(如 repadmin/dcdiag)必须在域管理员上下文运行;脚本开头加 if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) { Install-WindowsFeature RSAT-AD-PowerShell } 自动补依赖;定期清理旧日志和临时文件,防止磁盘占满影响巡检本身。

















