scns/Windows-Update-Report-MultiTenant

GitHub: scns/Windows-Update-Report-MultiTenant

基于PowerShell和Microsoft Graph API的多租户Windows更新监控方案,可跨多个M365租户汇总设备补丁状态并生成交互式HTML仪表板。

Stars: 5 | Forks: 0

# Windows Update Report MultiTenant v3.0 | 仓库状态 | Windows Update Report | | :--- | :--- | | [![最后提交时间](https://img.shields.io/github/last-commit/scns/Windows-Update-Report-MultiTenant.svg?style=plasticr)][github-master] [![GitHub Activity](https://img.shields.io/github/commit-activity/m/scns/Windows-Update-Report-MultiTenant.svg)][commits] | | | [![License](https://img.shields.io/github/license/scns/Windows-Update-Report-MultiTenant.svg)](LICENSE) [![Forks](https://img.shields.io/github/forks/scns/Windows-Update-Report-MultiTenant.svg)][forks-url] [![Stargazers](https://img.shields.io/github/stars/scns/Windows-Update-Report-MultiTenant.svg)][stars-url] [![Issues](https://img.shields.io/github/issues/scns/Windows-Update-Report-MultiTenant.svg)][issues-url] | [![Contributors](https://img.shields.io/github/contributors/scns/Windows-Update-Report-MultiTenant.svg)][contributors-url] [![GitHub release](https://img.shields.io/github/release/scns/Windows-Update-Report-MultiTenant.svg)](https://GitHub.com/scns/Windows-Update-Report-MultiTenant/releases) | ![Dashboard 示例](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/94f2fb9484235547.png) 该 PowerShell 项目通过 Microsoft Graph 为多个租户生成关于 Windows Update 和设备合规性状态的 comprehensive 概览报告。结果是一个专业的 HTML Dashboard,包含可过滤表格、图表、合规性监控和详细的 KB 信息。 ## 🎯 版本 3.1 亮点 - **🛡️ Device Compliance 集成**:完整的 Microsoft Graph 合规性监控 - **🔄 智能备份系统**:具有保留管理的自动备份 - **🎨 现代 UI**:支持 Dark/Light 主题,界面简洁流畅 - **🕐 时区支持**:可配置的时区显示,确保时间戳准确 - **📦 增强配置**:针对所有功能的广泛配置选项 - **🗂️ KB Database 缓存**:用于 KB mapping 数据库的智能缓存系统 ## 🔄 **备份与归档系统** - **自动备份**:可配置的 exports、archive 和配置文件备份 - **保留管理**:可设置每种备份类型的保留期(默认 5 个备份) - **智能清理**:自动删除旧备份并记录日志 - **独立备份类型**: - **Export Backup**:`backup/export_backup/` - 每日导出 - **Archive Backup**:`backup/archive_backup/` - 归档文件 - **Config Backup**:`backup/config_backup/` - 配置和凭证 - **精细控制**:每种备份类型可单独启用/禁用 - **状态日志**:关于备份创建和清理的清晰反馈 ## 🕐 **时区支持** - **可配置偏移**:通过 config.json 中的 `timezoneOffsetHours` 设置时区 - **稳健转换**:支持多种 DateTime 格式以实现最大兼容性 - **UTC 检测**:智能时区检测和转换 - **视觉反馈**:HTML 头部显示时区信息(例如 "LastSeen (UTC+2)") - **精确计算**:通过时区校正改进同步计算 ## 🚀 主要功能 - **自动模块安装**:自动检查并安装所需的 PowerShell 模块 - **可配置设置**:所有设置均可通过 `config.json` 管理 - **多租户支持**:通过 Microsoft Graph 获取每个租户的 Windows Update 和合规性状态 - **Device Compliance 监控**:通过 Microsoft Graph API 进行完整的设备合规性状态跟踪 - **智能 KB 检测**:显示特定的缺失 KB 编号和安全补丁 - **KB Mapping 数据库**:具有智能缓存系统的广泛在线数据库 - **OS 版本分析**:自动检测过时的 Windows 构建版本并提供建议 - **时区支持**:可配置的时区转换以确保 LastSeen 时间准确 - **灵活导出选项**:将结果导出为包含合规性数据的 CSV 文件(按客户) - **交互式 HTML Dashboard**:具有可过滤表格、快速过滤器和图表的专业 Dashboard - **智能文件管理**:自动归档旧的导出文件 - **自动浏览器集成**:可配置为自动打开生成的报告 ## 🆕 v3.0 新功能 ### 🛡️ **Device Compliance 监控** - **Microsoft Graph 集成**:与 `deviceCompliancePolicyStates` API 完全集成 - **合规性状态跟踪**: - **Compliant**:设备符合所有合规性策略 - **Non-Compliant**:设备检测到合规性问题 - **无数据**:无可用合规性信息 - **Error**:合规性检查期间发生错误 - **视觉指示器**:颜色编码的合规性状态(绿/红/灰/橙) - **专用过滤**:Non-Compliant 快速过滤器,用于快速识别问题 - **CSV 导出**:合规性状态包含在所有导出文件中 - **下拉过滤器**:合规性状态列具有独立的下拉过滤器 ### 🎨 **主题支持** - **Dark/Light 模式**:可在 config.json 中配置默认主题 - **浏览器切换**:运行时在 Dark 和 Light 模式之间切换 - **一致样式**:所有 UI 元素均支持两种主题 - **专业设计**:现代风格,可读性极佳 ### 🎯 **智能更新检测** - **特定 KB 编号**:显示缺失的 KB 更新(如 "KB5041585"),适用于 OS 过时的机器 - **Build 分析**:分析 OS 版本差异并建议所需的累积更新 - **更新状态类别**: - "Up-to-date"、"Verouderde OS versie"(过时的 OS 版本)、"Handmatige controle vereist"(需手动检查) - "Waarschijnlijk up-to-date"(可能最新)、"Updates wachtend"(更新等待中)、"Update fouten"(更新错误) - "Compliance problemen"(合规性问题)、"Synchronisatie vereist"(需同步)、"Error" ### 🗄️ **KB Mapping 数据库与智能缓存** - **在线 KB 数据库**:Windows build 编号到特定 KB 更新的广泛映射 - **智能缓存系统**:一次性下载 KB 数据库并缓存可配置的时长(默认 30 分钟) - **回退机制**:在网络问题时使用过期缓存以确保可靠性 - **数据库概览**:专用 Dashboard 标签页显示可用的映射和缓存状态 - **性能优化**:通过智能缓存减少 95%+ 的服务器负载 - **多平台支持**:支持 Windows 10、Windows 11 和历史版本 - **缓存方法跟踪**:显示 KB 信息的来源(Online、Cache、ExpiredCache、Local、Estimated) ### 📦 **Office 版本跟踪与通道管理 (v2.0)** - **Office 版本检测**:通过 Graph API 自动检测每个设备的 Microsoft 365 Apps 版本 - **增强的 Office Channel 识别**:具有年龄检测和精确版本匹配的智能分类: - **Current Channel (最新)** - 最新版本 (build >= 19426) → 绿色,加粗 - **Current Channel (近期)** - 近期发布 < 30 天 (build 19328-19425) → 绿色 - **Current Channel (过时)** - 旧版本 > 30 天 (build 19328-19425) → 橙色 ⚠️ - **Monthly Enterprise** - 受支持的 Monthly Enterprise 版本 (19127-19327) → 绿色 - **Semi-Annual Enterprise** - 较旧但受支持的版本 (17928-19126) → 橙色 - **过时/EOL** - 非常旧的版本 < build 17928 → 红色,加粗 ❌ - **未知** - 无法检测的版本 → 灰色 - **Office Mapping Database v2.0**: - 包含 43 个 Current Channel 版本(最近 12 个月)的广泛版本历史 - 包含发布日期和 age_days 的详细 build 信息 - 11 个 Monthly Enterprise Channel 版本及其支持结束日期 - 基于规则的优先级分类系统 - 完整 build 编号支持(major + minor 版本) - **年龄检测**:自动计算版本年龄,包括: - 针对 version_history 数据库的精确匹配 - 对未知 build 的估计年龄 - 过时版本状态的智能降级 - **视觉指示器**:带有状态工具提示的颜色编码 Office 版本 - **Office Versions 标签页**:Dashboard 标签页包含: - 所有 Office 更新通道概览 - 发布日期和支持结束信息 - 版本历史和建议更新 - CSV 导出功能 - **导出支持**:所有 CSV 导出中包含 Office 版本、通道和状态 - **Online-first 缓存**: - 从 GitHub 在线获取 Office mapping - 30 分钟缓存以提高性能 - 网络问题时回退到本地文件 ### 🪟 **Windows 版本与支持状态跟踪** - **Windows 版本检测**:基于 build 编号自动识别 Windows 版本 - **支持状态颜色编码**:Windows 支持生命周期的视觉指示器: - **W11 25H2**(绿色,加粗)- 最新版本,完全受支持 - **W11 24H2**(绿色,加粗)- 支持至 2026 年 10 月 - **W11 23H2**(绿色)- 支持至 2025 年 11 月 - **W11 22H2**(橙色)- 有限支持,EOL 2024 年 10 月 (Pro) / 2025 年 10 月 (Enterprise) - **W11 21H2**(红色,加粗)- 生命周期结束,EOL 2023 年 10 月 - **W10 22H2**(橙色)- 2025 年 10 月结束 - **W10 21H2 及更早**(红色,加粗)- 生命周期结束 - **Windows Edition 列**:专用列显示清晰的 Windows 版本标识(例如 "W11 24H2"、"W10 22H2") - **双重可视化**:OS Version(build 编号)和 Windows Edition 列均带有颜色编码 - **支持意识**:快速识别急需升级的系统 ### 🔍 **高级过滤与 UI** - **下拉过滤器**:Update Status 和 Compliance Status 列具有包含所有可用选项的下拉菜单 - **快速过滤按钮**:颜色编码按钮用于直接过滤: - Up-to-date(绿色)、Updates Wachtend(黄色)、Update Fouten(红色) - Verouderde OS(橙色)、Handmatige Controle(紫色)、Non-Compliant(独特的红色) - **过滤器同步**:自动重置冲突的过滤器以保持体验一致 - **Dark 主题支持**:在 Light 和 Dark 浏览器主题中均具有最佳可见性 - **简化的表格**:移除 KB Method 列以获得更简洁的界面 - **导出功能**:完整的表格导出和按客户过滤的导出选项 ### 📊 **增强的 Dashboard 与统计** - **全局统计**:包含总数和百分比的 所有租户概览 - **每个客户的统计**:每个客户的详细细分及可视化卡片 - **合规性百分比**:Up-to-date 百分比和合规性比率 - **交互式图表**:具有按客户过滤功能的 Chart.js 图表 - **专业样式**:具有响应式设计的现代 UI - **App Registration 监控**:用于证书过期跟踪的专用标签页 ## 📋 所需的 Microsoft Graph API 权限 为了实现完整功能,需要以下 **Application Permissions**: ### 🔒 设备管理与配置 ``` DeviceManagementManagedDevices.Read.All (Application) DeviceManagementConfiguration.Read.All (Application) ``` **用途**:Device management API、compliance policy states 和设备配置信息 ### 🛡️ 安全与威胁搜寻 ``` ThreatHunting.Read.All (Application) SecurityEvents.Read.All (Application) ``` **用途**:Advanced Hunting KQL 查询和安全事件信息 ### 📊 目录与设备信息 ``` Device.Read.All (Application) ``` **用途**:设备目录信息和组织上下文 ### ⚙️ 应用与 Windows 更新管理 ``` Application.Read.All (Application) WindowsUpdates.ReadWrite.All (Application) ``` **用途**:App Registration 过期监控和证书状态 ## 🛠️ 安装与设置 ### 1. 仓库设置 ``` git clone https://github.com/scns/Windows-Update-Report-MultiTenant.git cd Windows-Update-Report-MultiTenant ``` ### 2. 配置 ``` # 复制 template 文件(用于新安装) Copy-Item "_config.json" "config.json" Copy-Item "_credentials.json" "credentials.json" # 调整配置 notepad config.json notepad credentials.json ``` **对于现有安装:** 将您当前的 config.json 与 _config.json 进行比较以添加新选项。 **📋 详细的凭证设置:** 请参阅 [CREDENTIALS-SETUP.md](CREDENTIALS-SETUP.md) 获取详细说明。 ## 🔄 从 v2.x 升级到 v3.0 对于现有用户,有一些重要的更改: ### 配置更新 ``` # 备份当前配置 Copy-Item "config.json" "config_backup.json" # 与新的 template 比较并添加新选项 # v3.0 中的新选项: # - timezoneOffsetHours # - backup 部分 (enableExportBackup 等) # - theme 部分 # - kbMapping 已扩展 ``` ### 新功能 1. **备份系统**:在 config.json 中配置自动备份 2. **时区支持**:根据您的位置设置 `timezoneOffsetHours` 3. **主题偏好**:在 "light" 和 "dark" 之间选择作为默认 4. **简化的界面**:删除了 KB Method 列以获得更简洁的 UI ### 向后兼容性 - 现有的 config.json 文件将继续工作 - 新功能具有安全的默认设置 - credentials.json 格式无破坏性更改 ### 3. Azure App Registration 设置 1. 转到 [Azure Portal](https://portal.azure.com) → Azure Active Directory → App registrations 2. 为每个租户/客户创建新的 App Registration 3. 添加所需的 API 权限: - `DeviceManagementManagedDevices.Read.All` - `DeviceManagementConfiguration.Read.All` - `ThreatHunting.Read.All` - `Device.All` - `Directory.Read.All` - `Application.Read.All` 4. 对所有权限 **授予管理员同意** 5. 生成 client secret(安全地记录它!) 6. 使用每个客户的租户 ID、客户端 ID 和客户端密钥填写 `credentials.json` ### 4. 首次运行 ``` # 启动脚本 - 自动 module 安装 .\get-windows-update-report.ps1 ``` 脚本将自动安装所需的 PowerShell 模块并生成第一份报告。 ### 5. 输出位置 - **HTML Dashboard**:`exports/Windows_Update_Overview.html` - **CSV 导出**:`exports/YYYYMMDD_KlantNaam_Windows_Update_report_*.csv` - **归档文件**:`archive/`(较旧的导出) - **备份**:`backup/`(自动备份) ## ⚙️ 配置选项 ### 基本配置 ``` { "exportRetentionCount": 40, "cleanupOldExports": true, "exportDirectory": "exports", "archiveDirectory": "archive", "autoOpenHtmlReport": true, "lastSeenDaysFilter": 0, "timezoneOffsetHours": 2 } ``` **选项:** - `exportRetentionCount`:要保留的导出文件数量(默认:40) - `cleanupOldExports`:自动清理旧的导出(true/false) - `lastSeenDaysFilter`:根据上次在线时间过滤机器(0 = 所有机器) - `autoOpenHtmlReport`:自动在浏览器中打开报告 ### 时区配置 ``` { "timezoneOffsetHours": 2 } ``` **选项:** - **荷兰(夏季)**:`2` (UTC+2) - **荷兰(冬季)**:`1` (UTC+1) - **UTC 时间**:`0` - **美国东部**:`-5` (UTC-5) ### KB Mapping 数据库 ``` { "kbMapping": { "kbMappingUrl": "https://raw.githubusercontent.com/scns/Windows-Update-Report-MultiTenant/refs/heads/main/kb-mapping.json", "timeoutSeconds": 10, "cacheValidMinutes": 30, "estimationThreshold": 1000, "showEstimationLabels": true, "fallbackToLocalMapping": true, "estimationLabels": { "buildDifference": "(geschat voor build {targetBuild})", "noMapping": "(geschat)", "oldMapping": "(verouderd)" } } } ``` ### Office 版本映射 ``` { "officeMapping": { "officeMappingUrl": "https://raw.githubusercontent.com/scns/Windows-Update-Report-MultiTenant/refs/heads/main/office-version-mapping.json", "timeoutSeconds": 10, "cacheValidMinutes": 30, "fallbackToLocalMapping": true } } ``` ### 备份系统 ``` { "backup": { "enableExportBackup": true, "enableArchiveBackup": true, "enableConfigBackup": true, "exportBackupRetention": 5, "archiveBackupRetention": 5, "configBackupRetention": 5, "backupRoot": "backup", "exportBackupSubfolder": "export_backup", "archiveBackupSubfolder": "archive_backup", "configBackupSubfolder": "config_backup" } } ``` **备份类型:** - **Export Backup**:所有 CSV 导出的每日备份 - **Archive Backup**:归档文件的备份 - **Config Backup**:config.json、credentials.json、kb-mapping.json 的备份 ### 主题配置 ``` { "theme": { "default": "dark" } } ``` **选项:** - `"light"`:Light 主题为默认 - `"dark"`:Dark 主题为默认 ## 📁 文件结构 ``` Windows-Update-Report-MultiTenant/ ├── get-windows-update-report.ps1 # Hoofd PowerShell script ├── config.json # Configuratie instellingen ├── credentials.json # Tenant credentials (exclusief git) ├── kb-mapping.json # Lokale KB mapping database ├── exports/ # Gegenereerde rapporten ├── archive/ # Gearchiveerde oude exports ├── backup/ # Automatische backups ├── images/ # Dashboard screenshots ├── CONFIG-UITLEG.md # Gedetailleerde configuratie uitleg ├── KB-CACHING-INFO.md # KB caching documentatie ├── SECURITY.md # Beveiligingsbeleid ├── CONTRIBUTING.md # Contributie richtlijnen └── CODE_OF_CONDUCT.md # Gedragscode ``` ## 🔧 故障排除 ### 权限错误 - 检查是否已授予所有必需的 API 权限 - 确保权限已由管理员“授予” - 检查 client secret 的有效性 ### 时区问题 - 在 config.json 中调整 `timezoneOffsetHours` - 检查 LastSeen 时间是否正确显示 - 使用您所在时区的 UTC 偏移量 ### 缓存问题 - KB mapping 缓存会在 30 分钟后自动刷新 - 如有问题:删除 `Global:CachedKBMapping` 变量 - 检查在线 KB 数据库的互联网连接 ### 合规性数据缺失 - 确保已授予 `DeviceManagementConfiguration.Read.All` 权限 - 检查设备是否已注册 Intune - 对于非受管设备,回退到“无数据”状态是正常的 ## 📚 文档链接 - **[配置说明](CONFIG-UITLEG.md)** - 所有配置选项的详细说明 - **[Credentials 设置](CREDENTIALS-SETUP.md)** - 分步 Azure App Registration 设置 - **[KB 缓存信息](KB-CACHING-INFO.md)** - KB mapping 缓存配置和故障排除 - **[安全策略](SECURITY.md)** - 安全策略和漏洞报告 - **[贡献指南](CONTRIBUTING.md)** - 为项目做出贡献的指南 - **[行为准则](CODE_OF_CONDUCT.md)** - 贡献者的行为准则 ## 🤝 贡献 欢迎贡献!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 获取指南。 ## 📄 许可证 本项目采用 [MIT License](LICENSE)。 ## 🔒 安全 有关安全相关事宜,请参阅 [SECURITY.md](SECURITY.md)。 ## 📞 支持 - **问题**:[GitHub Issues](https://github.com/scns/Windows-Update-Report-MultiTenant/issues) - **电子邮件**:[info@maarten-schmeitz.nl](mailto:info@maarten-schmeitz.nl) - **文档**:请参阅随附的 MD 文件以获取详细信息 **版本**:3.0 | **最后更新**:2025 年 8 月 | **PowerShell**:7.2+ | **Microsoft Graph**:v1.0 & Beta ## 需求 - PowerShell 7.2+ - Microsoft Graph PowerShell SDK(自动安装) - 每个租户一个具有正确权限的 Azure AD App Registration ## 准备工作 ### 1. 创建 Azure AD App Registration 1. 转到 [Azure Portal - App registrations](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps)。 2. 点击 **New registration** 并为应用命名。 3. 创建后,转到 **API permissions**。 4. **删除所有默认添加的权限**(例如 `User.Read`)。 5. 添加以下 Microsoft Graph **Application** 权限: #### 为了最佳功能(推荐) - `DeviceManagementManagedDevices.Read.All` - 用于详细的 Windows Update 信息 - `ThreatHunting.Read.All` - 用于回退功能 - `Application.Read.All` - 用于 App Registration 有效性监控 #### 最低要求(回退功能) - `ThreatHunting.Read.All` - 用于基本 Windows Update 信息 - `Application.Read.All` - 用于 App Registration 有效性监控 1. 点击 **Grant admin consent** 授予这些权限。 2. 转到 **Certificates & secrets** 并创建一个新的 client secret。立即记下此值。 ### 2. 配置项目 #### 凭证文件 **对于新安装:** 1. 将 `_credentials.json` 重命名为 `credentials.json` 2. 为您的租户填写正确的值 **对于现有安装:** - 您现有的 `credentials.json` 将保持原样工作 - 无需更改 `credentials.json` 文件具有以下格式: ``` { "LoginCredentials": [ { "ClientID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "Secret": "YOUR-CLIENT-SECRET", "TenantID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "customername": "KlantNaam", "color": "#1f77b4" } // Voeg meer tenants toe indien nodig ] } ``` **color**:为每个客户指定一个固定的 HTML 颜色代码(十六进制,例如 `#1f77b4`)。此颜色将用于 HTML Dashboard 的图表中。 #### 配置文件 **对于新安装:** 1. 将 `_config.json` 重命名为 `config.json` 2. 根据您的需求调整设置 **对于现有安装:** - 如果您已有 `config.json`,请添加任何缺失的选项 - 与 `_config.json` 比较以查看可用的新选项 `config.json` 文件包含所有设置: ``` { "exportRetentionCount": 40, "cleanupOldExports": true, "exportDirectory": "exports", "archiveDirectory": "archive", "autoOpenHtmlReport": true, "lastSeenDaysFilter": 0, "kbMapping": { "kbMappingUrl": "https://mrtn.blog/wp-content/uploads/2025/08/kb-mapping.json", "timeoutSeconds": 10, "cacheValidMinutes": 30, "estimationThreshold": 1000, "showEstimationLabels": true, "fallbackToLocalMapping": true, "estimationLabels": { "buildDifference": "(geschat voor build {targetBuild})", "noMapping": "(geschat)", "oldMapping": "(verouderd)" } }, "theme": { "default": "dark" } } ``` **配置选项:** - `exportRetentionCount`:每个客户/类型保留的导出文件数量(较旧的将被归档) - `cleanupOldExports`:启用/禁用自动归档 - `exportDirectory`:存储新导出文件的目录 - `archiveDirectory`:归档旧导出文件的目录 - `autoOpenHtmlReport`:自动在 Web 浏览器中打开 HTML 报告 - `lastSeenDaysFilter`:根据设备上次可见以来的天数过滤报告 - `kbMapping.kbMappingUrl`:在线 KB mapping 数据库的 URL - `kbMapping.timeoutSeconds`:在线 KB 数据库请求的超时时间(默认:10) - `kbMapping.cacheValidMinutes`:缓存有效期(分钟)(默认:30) - `kbMapping.estimationThreshold`:KB 估算的 Build 差异阈值 - `kbMapping.showEstimationLabels`:显示估算 KB 编号的标签 - `kbMapping.fallbackToLocalMapping`:使用本地 mapping 作为回退 - `officeMapping.officeMappingUrl`:在线 Office 版本 mapping 数据库的 URL - `officeMapping.timeoutSeconds`:在线 Office mapping 请求的超时时间(默认:10) - `officeMapping.cacheValidMinutes`:缓存有效期(分钟)(默认:30) - `officeMapping.fallbackToLocalMapping`:使用本地 Office mapping 作为回退 - `theme.default`:Dashboard 的默认主题("dark" 或 "light") ### 3. 安装所需的 PowerShell 模块 首次使用脚本时,所需的模块将自动安装。不再需要手动安装。 ## 使用方法 1. **对于新安装**:将 `_credentials.json` 重命名为 `credentials.json`,将 `_config.json` 重命名为 `config.json` 2. **对于现有安装**:检查您的 `config.json` 是否包含所有必需的选项(与 `_config.json` 比较) 3. 在 `credentials.json` 文件中填写您的租户详细信息 4. 根据您的需求调整 `config.json` 中的设置 5. 启动脚本: ``` .\get-windows-update-report.ps1 ``` 1. 脚本将: - 自动安装所需的模块(如果需要) - 检查每个租户的 App Registration 有效性 - 通过 Device Management API 获取 Windows Update 状态(或回退到 Threat Hunting API) - 执行 OS 版本分析并检测过时的 build - 识别 OS 过时机器的缺失 KB 编号 - 生成包含详细信息的每个客户的 CSV 文件 - 归档旧文件(如果已配置) - 生成具有可过滤表格和快速过滤器的 HTML Dashboard - 在您的默认 Web 浏览器中自动打开报告 2. 您可以在配置的导出目录中找到结果,包括交互式 HTML Dashboard。 ## HTML Dashboard 功能 ### 📊 **每个客户的概览表** - **可过滤的 DataTables**:在所有列中搜索和排序 - **Update Status 下拉菜单**:直接过滤特定状态 - **快速过滤按钮**:用于常用过滤器的颜色编码按钮 - **导出功能**:将完整或过滤后的结果导出为 CSV ### 🎯 **列信息** | 列 | 描述 | |-------|-------------| | **Device** | 计算机名称 | | **Update Status** | 总体状态 | | **Missing Updates** | 缺失的特定 KB 编号和更新名称 | | **Details** | 状态消息和诊断信息 | | **OS Version** | Windows build 版本 | | **KB Method** | KB 信息来源 | | **Count** | 二进制指示器(0 = OK,1 = 需要注意) | | **LastSeen** | 上次同步日期 | | **LoggedOnUsers** | 当前用户 | ### 🔍 **过滤功能** ``` 🔘 Alle statussen 🟢 Up-to-date 🟠 Verouderde OS 🔴 Handmatige controle 🔵 Waarschijnlijk up-to-date 🟣 Errors ``` ### 📈 **图表与分析** - **每日 Count 趋势**:显示 Windows Update 情况的演变 - **每个客户的概览**:比较不同租户之间的更新状态 - **OS 版本分析**:Windows builds 的百分比分布 ### 🌙 **主题支持** - **Dark/Light 模式切换**:轻松在深色和浅色主题之间切换 - **可配置的默认值**:通过 `config.json` 设置您的偏好 - **用户友好**:FontAwesome 图标确保一致的显示 ### 🗄️ **KB Mapping 数据库 Dashboard** HTML Dashboard 包含一个专门的 "KB Mapping Database" 标签页,显示关于 KB mapping 数据库的广泛信息: #### 数据库状态概览 - **数据库状态**:✅ 可用 / ❌ 不可用 - **来源方法**:Online、Cache、ExpiredCache、Error 或 Exception - **总条目数**:数据库中可用的 KB mappings 数量 - **最后更新**:上次缓存刷新的时间戳 #### KB Mapping 表 **完整的数据库视图**,包含可过滤/可排序的列: - **Build Number**:Windows OS build 编号(例如 26100、22631) - **KB Number**:对应的 KB 更新(例如 KB5041585) - **Update Title**:更新描述 - **Release Date**:更新的正式发布日期 - **OS Version**:Windows 版本类别(Windows 11 24H2、Windows 10 22H2、Historical) #### 缓存智能功能 - **实时状态**:显示当前缓存状态和信息来源 - **性能指标**:缓存有效性的可见性 - **回退透明度**:使用回退时的清晰指示 - **历史数据**:访问每年的历史 KB mappings ## API 方法论与回退 ### 🎯 **主要方法:Device Management API** **需要**:`DeviceManagementManagedDevices.Read.All` 权限 **优点**: - 缺失更新的特定 KB 编号 - 详细的合规性信息 - Windows Update 状态跟踪 - 配置策略违规 **示例输出**: ``` Missing Updates: "2024-08 Cumulative Update voor Windows (KB5041585 of nieuwer)" Details: "Windows Update status: Recent gesynchroniseerd, geen problemen" ``` ### 🔄 **回退方法:Threat Hunting API** **需要**:`ThreatHunting.Read.All` 权限 **使用情况**: - Device Management API 不可用 - Device Management 权限不足 - 租户没有 Intune 许可证 **输出**: ``` Missing Updates: (leeg - geen specifieke KB info beschikbaar) Details: "Windows Update status: Controleer handmatig - Device niet in Intune beheer" ``` ### 🧠 **智能 OS 分析** **对于所有场景**: 无论使用哪种 API,脚本都会分析 OS 版本并: - 检测环境中最新的 Windows build - 识别具有过时 builds 的机器 - 为已知的 build 差异建议特定的 KB 更新 - 为 IT 管理员提供实用建议 **过时 OS 的示例**: ``` Missing Updates: "Waarschijnlijk ontbrekende cumulative update (build verschil: 294); 2024-08 Cumulative Update voor Windows (KB5041585 of nieuwer)" Update Status: "Verouderde OS versie" ``` ## 文件结构 ### 模板文件(随附) ``` Windows-Update-Report-MultiTenant/ ├── _credentials.json # Template voor credentials (hernoem naar credentials.json) ├── _config.json # Template voor configuratie (hernoem naar config.json) ├── CONFIG-UITLEG.md # Gedetailleerde configuratie uitleg ├── get-windows-update-report.ps1 └── readme.md ``` ### 配置并执行后 ``` Windows-Update-Report-MultiTenant/ ├── _credentials.json # Template bestand (blijft bestaan) ├── _config.json # Template bestand (blijft bestaan) ├── credentials.json # Jouw tenant configuratie ├── config.json # Jouw instellingen ├── CONFIG-UITLEG.md ├── get-windows-update-report.ps1 ├── exports/ # Configureerbare export directory │ ├── 20250822_KlantA_Windows_Update_report_Overview.csv │ ├── 20250822_KlantA_Windows_Update_report_ByUpdate.csv │ ├── 20250822_KlantB_Windows_Update_report_Overview.csv │ ├── 20250822_KlantB_Windows_Update_report_ByUpdate.csv │ └── Windows_Update_Overview.html └── archive/ # Oude bestanden worden hier gearchiveerd ├── 20250821_KlantA_Windows_Update_report_Overview.csv └── ... (oudere bestanden) ``` ## v3.0 中的新功能 ### 🎯 **KB 检测与更新智能** **特定 KB 编号**:识别缺失的更新,如 KB5041585 - **Build 差异分析**:分析当前和最新 OS builds 之间的差异 - **智能建议**:根据 build 差异提供实用建议 - **多 API 支持**:Device Management API 与 Threat Hunting 回退 ### 🗂️ **KnowledgeBase Mapping 数据库与智能缓存** - **在线 KB 数据库**:包含 Windows Update KB mappings 的广泛外部数据库 - **智能缓存**:每次会话一次性下载数据库,缓存 30 分钟(可配置) - **性能优化**:通过智能缓存管理减少 95%+ 的服务器负载 - **回退机制**:在网络问题中使用过期缓存以实现最大可靠性 - **缓存透明度**:KB Method 列显示每次 KB 查找的来源 - **多平台数据库**:支持 Windows 10、Windows 11 和包含 27+ KB mappings 的历史版本 - **Update Status 下拉菜单**:用下拉菜单替换文本过滤器以进行精确过滤 - **快速过滤按钮**:颜色编码按钮可直接访问常用过滤器 - **同步过滤**:下拉菜单和快速过滤器协同工作以获得最佳 UX - **过滤器持久性**:在会话期间保留过滤器设置 ### 📊 **增强的数据呈现** - **分离列**:"Missing Updates" 用于 KB 编号,"Details" 用于状态消息 - **改进的 Count 逻辑**:二进制指示器(0/1)用于清晰的状态指示 - **OS 版本分析**:环境中 Windows builds 的百分比细分 - **状态分类**:清晰的更新状态类别以获得更好的洞察 ## 备份功能 脚本支持自动备份导出、归档和配置文件: - **导出备份**:创建 exports 目录的 zip 文件 - **归档备份**:创建 archive 目录的 zip 文件 - **配置备份**:创建 config.json 和 credentials.json 的 zip 文件 - **保留**:每种类型保留的备份数量可设置 - **配置**:所有路径和设置均可通过 `config.json` 管理 ### 配置选项 在 `config.json` 文件中,您可以设置每种备份类型是否激活以及保留多少备份: ``` "backup": { "enableExportBackup": true, "enableArchiveBackup": true, "enableConfigBackup": true, "exportBackupRetention": 5, "archiveBackupRetention": 5, "configBackupRetention": 5, "backupRoot": "backup", "exportBackupSubfolder": "export_backup", "archiveBackupSubfolder": "archive_backup", "configBackupSubfolder": "config_backup" } ``` ## App Registration 状态 Dashboard HTML Dashboard 包含一个特殊的 "App Registrations" 标签页,显示所有 client secret 到期日期的概览: ### App Registration Dashboard 功能 - **集中概览**:所有租户及其 App Registration 状态在一个表中 - **状态指示器**:到期日期的颜色编码警告: - 🟢 **绿色**:有效期超过 30 天 - 🟠 **橙色**:7-30 天后到期(警告) - 🔴 **红色**:少于 7 天后到期(严重)或无访问权限 - **详细信息**: - 客户名称 - 状态消息 - 距离到期天数 - 确切到期日期(DD-MM-YYYY) - **可过滤表格**:通过 DataTables 在所有列中搜索和排序 - **导出功能**:可以将状态数据导出为 CSV ## 故障排除 ### ❌ **"Device Management API 不可用"** **原因**:缺少 `DeviceManagementManagedDevices.Read.All` 权限或没有 Intune 许可证 **解决方案**:脚本会自动回退到 Threat Hunting API - 无需操作 ### ❌ **"未找到有效的 client secret"** **原因**:缺少 `Application.Read.All` 权限 **解决方案**:在 Azure Portal 中添加权限并授予管理员同意 ### ❌ **Missing Updates 列为空** **原因**:机器确实是最新的或正在使用回退 API **预期**:这是正常的 - 具有 OS 过时的机器会自动获得 KB 建议 ### ✅ **权限验证** 在 Azure Portal 中检查您的 App Registration 是否具有以下权限: - ✅ `DeviceManagementManagedDevices.Read.All`(用于 KB 编号) - ✅ `ThreatHunting.Read.All`(用于回退) - ✅ `Application.Read.All`(用于 App Registration 监控) ## 注意事项 - 该脚本在使用 Device Management 权限时效果最佳,但也可以仅使用 Threat Hunting 权限运行 - KB 编号仅在具有 Device Management API 访问权限或检测到 OS 版本过时时显示 - 有关 App Registrations 的更多信息,请参阅 [Microsoft Docs](https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app) - 该脚本支持 Windows 10 和 Windows 11 环境 © 2025 by Maarten Schmeitz
标签:AI合规, Awesome, CISA项目, Homebrew安装, HTML仪表板, IPv6, IT运维, KB知识库, Libemu, Microsoft 365, Microsoft Graph, PowerShell, Socks5代理, Windows更新, 多模态安全, 多租户监控, 威胁狩猎API, 安全报告, 端点安全, 系统管理, 自动化报告, 补丁管理, 设备合规性, 跨租户管理, 配置备份