AD域健康周报需聚焦7项核心指标:域控制器在线与复制状态、FSMO角色持有者、DNS解析成功率、组策略应用延迟、账户锁定事件、密码过期预警、Kerberos票据错误率;使用PowerShell原生命令采集,结构化生成带状态徽章的HTML报告,并通过任务计划自动执行。
明确周报核心指标,聚焦AD域关键健康项
ad域健康周报不是数据堆砌,而是对影响业务连续性的关键状态做周期性快照。重点应覆盖:域控制器在线与复制状态、fsmo角色持有者是否异常、dns解析成功率、组策略应用延迟、账户锁定事件突增、密码过期预警数量、kerberos票据错误率(如krb_ap_err_bad_integrity)。这些指标直接关联登录失败、权限异常、策略失效等常见问题。避免采集冗余信息如所有ou结构变更日志——除非有特定审计需求。
用PowerShell原生命令高效采集数据
不依赖第三方模块,优先使用Active Directory模块内置命令和WMI/CIM接口:
-
复制状态:用Get-ADReplicationPartnerMetadata检查各DC与伙伴的最后同步时间,过滤
LastReplicationAttemptTime超过2小时的记录 -
FSMO角色:执行Get-ADForest | Select-Object DomainNamingMaster, SchemaMaster 和 Get-ADDomain | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster,比
netdom query fsmo更易解析 - DNS健康:调用Resolve-DnsName -Name "gc._msdcs.$(Get-ADDomain).Name" -Server $DC -Type SRV -ErrorAction SilentlyContinue验证全局编录发现能力
- 账户异常:用Search-ADAccount -LockedOut -StartTime (Get-Date).AddDays(-7)统计本周锁定次数,配合Get-WinEvent -FilterHashtable @{LogName='Security';ID=4740;StartTime=(Get-Date).AddDays(-7)}提取详细日志
结构化输出HTML报告,兼顾可读性与可追溯性
用ConvertTo-Html生成带样式的表格,但需预处理数据提升可读性:
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统
- 为每个指标区块添加
<h3></h3>标题和状态徽章(如✅正常 / ⚠️延迟 / ❌中断),可用CSS内联样式控制颜色 - 将时间戳统一转为本地时区并格式化为
yyyy-MM-dd HH:mm,避免UTC混淆 - 关键异常项自动加粗并附简要处置建议,例如“PDCEmulator不可达 → 检查网络连通性及Netlogon服务”
- 底部嵌入原始数据导出链接:Export-Csv -Path ".\ADHealth_Raw_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
集成到Windows任务计划,实现无人值守运行
脚本部署后需稳定触发:
- 保存脚本为
AD_WeeklyHealth.ps1,在开头添加Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force确保本地策略允许运行 - 创建任务计划时,“操作”中程序填
powershell.exe,参数写-ExecutionPolicy Bypass -File "X:\Scripts\AD_WeeklyHealth.ps1" - 触发器设为每周一上午9:00,勾选“不管用户是否登录都要运行”并配置“只在本地系统空闲时运行”避免干扰生产负载
- 启用“如果任务失败,每隔10分钟重试,最多3次”,并邮件通知管理员失败详情(可用Send-MailMessage)










