🛡️ Active Directory Health Check v2.6

🇩🇪 Deutsch | 🇬🇧 English
一个全面的 PowerShell 脚本,用于自动化检查 Active Directory 环境的健康状况和安全性。具备最佳实践评估、颜色编码的 HTML 报告和 CSV 导出功能。
🇩🇪 Deutsch
📑 目录
✨ 功能
- 🎯 54 项最佳实践检查,按主题分类(DC 基础、安全、结构、监控)
- 🖼️ 现代化 WPF GUI(浅色主题),支持组选择、套件按钮和输出路径选择
- 🎨 颜色编码的 HTML 报告,包含执行仪表板(OK / WARN / 严重 / INFO)
- 📊 CSV 导出所有检查结果
- 🖥️ 交互式启动菜单,作为控制台操作的备用方案
- ⚡ 基于参数的执行,适用于计划任务 / 自动化
- 📁 可自由选择的输出路径,通过 GUI 或
-OutputPath 参数
- 🔍 DCDiag 单项测试解析(独立于 DE/EN 语言)
- 🔄 环回检测用于本地 DC(使用
localhost 而非 FQDN)
- 📡 Ping 跳过逻辑用于不可达的 DC,回退到 WinRM
- 🌍 语言无关,通过 Well-Known SID 实现
- 🗣️ 自动语言检测和 DE/EN 语言切换 – 可在 WPF GUI 中实时切换,可通过参数
-Language de|en 覆盖
- 📝 详细日志记录(
C:\ScriptLog)
- 🔧 模块化结构 - 可针对性地执行单个检查
📋 54 项检查
🏗️ DC 基础基础设施
| # | 检查 | 描述 |
|---|
| 1 | DC 系统信息 | 操作系统、内存、运行时间、硬件 |
| 2 | 服务 | NTDS、DNS、Netlogon、KDC、W32Time、DFSR |
| 3 | DCDiag 测试 | 详细解析所有 DC 诊断测试 |
| 4 | 复制(伙伴) | 每个 DC 伙伴的状态 |
| 4b | 复制错误(林) | 林范围的复制问题 |
| 5 | FSMO 角色 | 所有 5 个 FSMO 角色持有者 |
| 6 | DNS 配置 | 区域、AD 集成、动态更新 |
| 7 | SYSVOL 和 NETLOGON | 可达性 |
| 8 | NTDS 数据库 | 大小、可用磁盘空间 |
🔒 安全:网络协议
| # | 检查 | 描述 |
|---|
| 9 | TLS 协议(SCHANNEL) | SSL 2.0/3.0、TLS 1.0/1.1/1.2/1.3 |
| 10 | 密码套件和算法 | RC4、DES、MD5 及其他弱密码套件 |
| 11 | SMB1 和 SMB 签名 | WannaCry 防护、强制签名 |
| 12 | NTLM / LAN Manager 身份验证级别 | LmCompatibilityLevel=5 最佳实践 |
| 13 | LLMNR / NetBIOS / WPAD | Responder 攻击防护 |
| 14 | LDAP 安全 | 签名 + 通道绑定(ADV190023) |
| 15 | Windows 防火墙 | 所有 3 个配置文件是否启用? |
👥 安全:账户和 Kerberos
| # | 检查 | 描述 |
|---|
| 16 | 特权账户 | Domain/Enterprise/Schema Admins 等 |
| 17 | 密码策略 | 最小长度、历史记录、最长使用期限、复杂性、锁定 |
| 18 | Kerberos / krbtgt | 密码年龄(最佳实践:≤180 天) |
| 19 | Kerberos 无约束委派 | 域接管风险检测 |
| 20 | Kerberoasting 风险 | 分析具有 SPN 的用户账户 |
| 21 | LSA 保护(RunAsPPL) | 防止凭据转储(Mimikatz) |
🛡️ 安全:系统加固
| # | 检查 | 描述 |
|---|
| 22 | DC 上的打印后台处理程序 | CVE-2021-34527(PrintNightmare) |
| 23 | 安全启动证书更新 | Windows UEFI CA 2023 部署状态 |
| 24 | 证书 | 到期监控、EKU 检查 |
🌐 AD 结构
| # | 检查 | 描述 |
|---|
| 25 | AD 站点 | 站点概览 |
| 26 | AD 子网 | 子网到站点的映射 |
| 27 | 信任关系 | 域/林信任 |
| 28 | AD 回收站 | 功能的激活状态 |
| 29 | 墓碑生存时间 | 最佳实践 ≥180 天 |
| 30 | 林/域级别 | 功能级别 |
| 31 | GPO 健康 | Sysvol/DS 版本不匹配 |
👤 非活动账户
| # | 检查 | 描述 |
|---|
| 32a | 非活动用户 | >90 天未登录 |
| 32b | 非活动计算机 | >90 天未登录 |
| 32c | 密码永不过期 | 标志检查 |
📊 监控和运维
| # | 检查 | 描述 |
|---|
| 33 | 事件日志评估 | 系统 / 目录服务 / DNS(最近 24 小时) |
| 34 | 时间同步 | PDC + 域 DC |
| 35 | AD 备份状态 | 通过 repadmin /showbackup |
| 36 | 已安装程序 | 每个 DC 的清单 |
| 37 | Windows 更新 | 最近 20 个更新、年龄评估 |
| 45 | 已安装的 Windows 功能 | 每个 DC 的已安装角色和功能(ServerManager) |
| 46 | SMB 共享(Shares) | 所有共享,包括路径、权限和加密 |
🧬 身份和 DNS(新增)
| # | 检查 | 描述 |
|---|
| 38 | SPN 重复 | 检测重复分配的 SPN(Kerberos 冲突) |
| 39 | AS-REP-Roasting 风险 | 未启用 Kerberos 预身份验证的用户 |
| 40 | AdminSDHolder / AdminCount 漂移 | AdminCount=1 但无当前保护组成员资格 |
| 41 | 细粒度密码策略 | FGPP 强化、锁定和目标组分配 |
| 42 | DNS 卫生(老化 / 清理) | 老化/清理、反向区域、动态更新风险 |
| 43 | LAPS 配置 | Local Admin Password Solution - 激活状态、计算机覆盖率(Server 2019 起) |
| 44 | 无 AES 的账户 | 查找仅使用 RC4 或未使用 AES 加密的账户(安全风险) |
🎯 安全:2025/2026 攻击向量
| # | 检查 | 描述 |
|---|
| 47 | RC4 → AES 迁移审计 | 2026 年 RC4 停用前无 AES 的账户(CVE-2026-20833)+ DC 的 KDC 注册表 |
| 48 | DCSync 权限 | DC 之外具有复制权限(密码哈希提取风险) |
| 49 | RBCD 和约束委派 | msDS-AllowedToActOnBehalfOfOtherIdentity 和 msDS-AllowedToDelegateTo,包括协议切换 |
| 50 | dMSA / BadSuccessor | 委派托管服务账户(Server 2025)和替代模式 |
| 51 | MachineAccountQuota | ms-DS-MachineAccountQuota(最佳实践:0) |
| 52 | 匿名 LDAP 访问 | 针对 PDC 的匿名绑定测试 + dSHeuristics |
| 53 | SYSVOL 中的 GPP/cpassword | GPP XML 中可明文解密的密码(MS14-025) |
| 54 | Protected Users 审计 | 所有特权账户是否都在 Protected-Users 组中? |
💻 系统要求
- Windows Server 2016 或更高版本
- PowerShell 5.1+
- 已安装 RSAT / AD 工具:
- ActiveDirectory 模块
- GroupPolicy 模块
- DnsServer 模块
- 建议具有 Domain Admin 权限
- 所有 DC 上已启用 WinRM(或 DCOM 回退)
- 在具有 AD 连接性的 DC 或管理服务器上执行
🚀 安装
# Repository klonen
git clone https://gitlab.com/RoccoAmmon/Active-Directory-Health-Check.git
cd Active-Directory-Health-Check
# Skript ausführen (interaktiv)
.\AD_Health_Check.ps1
# Oder automatisiert (alle 54 Checks)
.\AD_Health_Check.ps1 -FullRun
⚙️ 使用方法
# Interaktive WPF-GUI (Standard)
.\AD_Health_Check.ps1
# Vollständiger Lauf ohne GUI (für Scheduled Tasks)
.\AD_Health_Check.ps1 -FullRun
# Vollständiger Lauf mit englischer Berichtssprache
.\AD_Health_Check.ps1 -FullRun -Language en
# Nur bestimmte Checks ausführen
.\AD_Health_Check.ps1 -OnlyChecks '22_PrintSpooler','19_Unconstrained'
# Ohne Interaktion
.\AD_Health_Check.ps1 -NoInteractive
# Eigenen Ausgabepfad angeben
.\AD_Health_Check.ps1 -OutputPath 'D:\Reports\AD'
🗣️ 语言 / Language
报告语言在启动时自动识别,并可在需要时通过参数覆盖。
- 自动语言识别: 启动时从操作系统语言确定语言(
Get-UICulture)。德语 Windows 界面 → 德语,英语 Windows 界面 → 英语,其他所有 → 德语。
- WPF GUI 中的 DE/EN 语言切换器: 可实时切换;立即作用于所有 GUI 文本、检查标题和组名。
- 参数
-Language de|en: 覆盖自动识别——例如用于计划任务。
- 有效值:
de、en——默认:操作系统语言。
- 输出媒介: HTML 报告、控制台输出和菜单以所选语言显示。CSV 导出的列名保持技术性且与语言无关,保持不变。
# Beispiel: Vollständiger Lauf mit englischer Ausgabe
.\AD_Health_Check.ps1 -FullRun -Language en
📸 截图
HTML 报告的截图待补充。
⚙️ 配置
所有阈值均可在脚本开头的变量块中配置:
| 变量 | 默认值 | 描述 |
|---|
InactiveDaysUser | 90 | 未登录天数 → 用户不活跃 |
InactiveDaysComputer | 90 | 未登录天数 → 计算机不活跃 |
CertExpiryWarnDays | 60 | 证书到期警告 |
CertExpiryCritDays | 14 | 证书到期严重 |
KrbtgtMaxAgeDays | 180 | krbtgt 密码最大年龄 |
BackupMaxAgeDays | 7 | 备份年龄警告 |
BackupCritAgeDays | 14 | 备份年龄严重 |
WUMaxAgeDaysWarn | 35 | Windows 更新年龄警告 |
WUMaxAgeDaysCrit | 60 | Windows 更新年龄严重 |
完整配置参考:Wiki → 阈值
📄 报告输出
结果保存在 C:\ScriptLog 下:
- HTML 报告,包含执行仪表板(颜色编码)
- CSV 导出,按检查项分类(用于 Excel/Power BI/SIEM)
- 日志文件,包含执行记录
🏗️ 架构
- 模块化结构,检查函数可单独调用
- 本地 DC 的环回检测
- 通过 Well-Known SID 实现语言无关(DE/EN)
- 基于 WinRM 的远程查询,带 Ping 回退
🔧 故障排除
参见 Wiki → 故障排除
🤝 贡献
- 创建 Fork
- 创建功能分支(
git checkout -b feature/mein-feature)
- 提交更改(
git commit -m 'Add: Mein Feature')
- 推送分支(
git push origin feature/mein-feature)
- 创建 Pull Request
📋 更新日志
v2.6(当前)
- 自动语言检测与 DE/EN 语言切换 – 语言从操作系统语言确定(
Get-UICulture),WPF GUI 中提供 DE/EN 实时切换,新增参数 -Language de|en
- HTML 报告、控制台输出和菜单以所选语言显示;CSV 导出列名保持技术性/不变