示例安全启动 E2E 自动化指南

应用对象
Windows 10, version 1607, all editions Win 10 Ent LTSB 2016 Win 10 IoT Ent LTSB 2016 Windows 10, version 1809, all editions Win 10 Ent LTSC 2019 Win 10 IoT Ent LTSC 2019 Windows 10 ESU Windows 10 Enterprise LTSC 2021 Windows 10 IoT Enterprise LTSC 2021 Windows 11 version 23H2, all editions Windows 11 version 24H2, all editions Windows 11 version 25H2, all editions Windows 11 version 26H1, all editions Windows Server 2016 Windows Server 2019 Windows Server 2022 Windows Server, version 23H2 Windows Server 2025

注意

原始发布日期: 2026 年 3 月 16 日
上次更新日期: 2026 年 5 月 12 日
KB ID: 5084567

本文内容

概述

本指南介绍使用组策略和渐进式推出波次更新 Windows Secure Boot DB 证书的自动部署系统。

安全启动证书推出自动化是基于 PowerShell 的系统,它以受控的分级方式将 Windows Secure Boot DB 证书更新部署到已加入域的计算机。

返回到顶部

关键功能

功能 说明
分级推出 1 > 2 > 4 > 8... 每个存储桶的设备数
自动阻止 排除具有无法访问设备的存储桶
自动 GPO 部署 单个业务流程协调程序脚本处理所有内容
计划任务执行 无需交互式提示
实时监视 带有进度栏的状态查看器

返回到顶部

证书汇报设置参考

本节内容

AvailableUpdatesPolicy 组策略

注册表位置 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecureBoot
名称 AvailableUpdatesPolicy
0x5944 (DWORD)

这是 GPO/ADMX 控制的密钥,可:

  • 在重新启动时保留
  • 由 组策略/MDM 设置
  • 不会导致重试循环 (通过 ClearRolloutFlags) 清除
  • 策略驱动部署的正确密钥

参考:组策略 对象 (GPO) 具有 IT 托管更新的 Windows 设备安全启动方法

返回到“证书汇报设置参考”

WinCSFlags - Windows 配置系统标志

域管理员可以使用随 Windows OS 更新一起发布的 Windows 配置系统 (WinCS) 跨已加入域的 Windows 客户端和服务器部署安全启动更新。 它包含命令行 接口 (CLI) 实用工具 ,用于在本地查询安全启动配置并将其应用于计算机。

功能名称 WinCS 密钥 说明
Feature_AllKeysAndBootMgrByWinCS F33E0C8E002 启用此密钥可在设备上安装以下Microsoft提供的安全启动新证书。
  • Microsoft Corporation KEK 2K CA 2023
  • Windows UEFI CA 2023
  • Microsoft UEFI CA 2023
  • Microsoft 选项 UEFI ROM CA 2023

参考: 用于安全启动的 Windows 配置系统 (WinCS) API

返回到“证书汇报设置参考”

返回到顶部

体系结构

体系结构工作流

返回到顶部

阶段 1:企业级别的检测和状态监视

本节内容

阶段 1 所需的脚本

安全启动清单数据收集脚本示例

注意

重要 包含示例脚本的以下文章已停用。 如果已安装在 2026 年 5 月 12 日或之后发布的 Windows 更新,则可以在设备上的 %systemroot%\SecureBoot\ExampleRolloutScripts 文件夹中找到示例脚本。

示例脚本名称 用途 运行在
示例 Detect-SecureBootCertUpdateStatus.ps1 脚本 收集设备状态数据 每个终结点通过 GPO) (
示例 Aggregate-SecureBootData.ps1 脚本 生成报表和仪表板 管理员工作站
示例 Deploy-GPO-SecureBootCollection.ps1 脚本 自动创建用于数据收集的 GPO 域控制器
上述阶段 1 脚本的示例输出

安全启动证书状态仪表板

返回到“阶段 1:企业级别的检测和状态监视”

本地测试

在通过 GPO 进行部署之前,请在单台计算机上测试收集脚本以验证功能。

  • 在本地运行集合脚本

    打开提升的 PowerShell 提示符并执行:

    注意

    & .\Detect-SecureBootCertUpdateStatus.ps1 -OutputPath "C:\Temp\SecureBootTest"

  • 验证 JSON 输出

    注意

    # View the collected data 
    Get-Content“C:\Temp\SecureBootTest\*_latest.json” |ConvertFrom-Json |Format-List

    要验证的键字段  
    SecureBootEnabled - 应为 True 或 False
    OverallStatus – Complete、ReadyForUpdate、NeedsData 或 Error
    BucketHash - 用于置信度数据匹配的设备存储桶
    SecureBootTaskEnabled - 显示安全启动更新任务的状态。

  • 测试聚合脚本

    注意

    # Generate reports from collected data 
    &“.\Aggregate-SecureBootData.ps1”
        -InputPath “C:\Temp\SecureBootTest” '
        -OutputPath “C:\Temp\SecureBootReports”
     

    打开 HTML 仪表板

    Start-Process“C:\Temp\SecureBootReports\SecureBoot_Dashboard_*.html”

返回到“阶段 1:企业级别的检测和状态监视”

网络共享设置

  • 创建网络共享

    在文件服务器上,为收集数据创建专用共享:

    注意

    # Run on file server as Administrator 
    $SharePath = “D:\SecureBootCollection”
    $ShareName = “SecureBootData$”
     

    创建文件夹

    New-Item -ItemType 目录 -Path $SharePath -Force
     

    创建隐藏共享 ($ 后缀隐藏浏览列表)

    New-SmbShare -Name $ShareName -Path $SharePath '
        -Description “安全启动证书状态集合” '
        -FullAccess “域管理员”
        -ChangeAccess “域计算机”

  • 配置 NTFS 权限

    注意

    # Get current ACL 
    $Acl = Get-Acl $SharePath
     

    允许经过身份验证的用户写入文件

    $WriteRule = New-Object System.Security.AccessControl.FileSystemAccessRule (
    “域计算机”和
    “Modify”,
        “ContainerInherit,ObjectInherit”,
        "None",
        “允许”
    )
    $Acl.AddAccessRule ($WriteRule)
     

    允许域管理员完全控制聚合) (

    $AdminRule = New-Object System.Security.AccessControl.FileSystemAccessRule (
        “域管理员”,
        “FullControl”,
        “ContainerInherit,ObjectInherit”,
        "None",
        “允许”
    )
    $Acl.AddAccessRule ($AdminRule)
     

    应用权限

    Set-Acl -Path $SharePath -AclObject $Acl

  • 验证共享访问

    注意

    # Test from a domain-joined workstation 
    Test-Path“\\fileserver\SecureBootData$”

    应返回:True

返回到“阶段 1:企业级别的检测和状态监视”

GPO 部署

使用从域控制器提供的自动化脚本:

注意

作为交互式 OU 节的域管理员在域控制器上运行 - 推荐

将“Contoso.com”、“Contoso”替换为域的名称

将 FILESERVER 替换为文件服务器名称。  脚本显示要部署 GPO 的 OU 列表

.\Deploy-GPO-SecureBootCollection.ps1 '
    -DomainName “contoso.com” '
    -AutoDetectOU '
    -CollectionSharePath “\\FILESERVER\SecureBootData$”
    -ScriptSourcePath “.\Detect-SecureBootCertUpdateStatus.ps1” '
    -Schedule “Daily” '
    -ScheduleTime “14:00” '
    -RandomDelayHours 4

此脚本将执行以下操作:

  • 使用指定名称创建新的 GPO
  • 将集合脚本复制到 SYSVOL 以实现高可用性
  • 配置计算机启动脚本
  • 将 GPO 链接到目标 OU
  • (可选)为定期收集创建计划任务

下表提供了基于队列大小的延迟时长的指导。

机群大小 延迟范围
1-10K 台设备 4 小时
10K-50K 设备 8 小时
50K+ 台设备 12-24 小时

返回到“阶段 1:企业级别的检测和状态监视”

GPO 设置摘要

设置 位置
启动脚本 计算机配置→脚本 Detect-SecureBootCertUpdateStatus.ps1
脚本参数 (相同的) -OutputPath “\\server\share$”
执行策略 PowerShell →计算机配置→ 管理员模板 允许本地和远程签名
计划任务 计算机配置→首选项→计划任务 每日/每周集合

返回到“阶段 1:企业级别的检测和状态监视”

验证

  • 在测试加工 e 上强制更新 GPO

    注意

    ## On a test workstation 
    gpupdate /force
     

    重新启动客户端计算机以启动脚本,否则将在下一个计划触发。

    Restart-Computer -Force

  • 验证数据收集

    注意

    检查数据是否 (文件服务器或任何计算机)

    Get-ChildItem“\\fileserver\SecureBootData$”|
        Sort-Object LastWriteTime -Descending |
        Select-Object -First 10
     

    验证 JSON 内容

    Get-Content“\\fileserver\SecureBootData$\TESTPC_latest.json” |ConvertFrom-Json

  • 检查 GPO 应用程序

    注意

    验证 GPO 是否已应用于计算机

    Select-String“SecureBoot”
    该脚本还会保存本地副本,以便实现冗余:
    Get-ChildItem“C:\ProgramData\SecureBootCollection\”

返回到“阶段 1:企业级别的检测和状态监视”

返回到顶部

阶段 2:安全启动证书更新业务流程脚本

重要

确保阶段 1 已完成,包括每个终结点上的数据收集到远程服务器共享。

本节内容

阶段 2 所需的脚本

安全启动清单数据收集脚本示例

注意

重要 包含示例脚本的以下文章已停用。 如果已安装在 2026 年 5 月 12 日或之后发布的 Windows 更新,则可以在设备上的 %systemroot%\SecureBoot\ExampleRolloutScripts 文件夹中找到示例脚本。

示例脚本名称 用途 在以下位置上运行:
示例 Detect-SecureBootCertUpdateStatus.ps1 脚本 收集设备状态数据 每个终结点通过 GPO) (
示例 Aggregate-SecureBootData.ps1 脚本 生成报表和仪表板 管理员工作站
示例 Deploy-GPO-SecureBootCollection.ps1 脚本 自动创建用于数据收集的 GPO 域控制器
示例 Start-SecureBootRolloutOrchestrator.ps1 脚本 使用自动 GPO 部署实现证书安装的完全自动化、连续的业务流程 管理员工作站
示例 Deploy-OrchestratorTask.ps1 脚本 将 Orchestrator 脚本部署为计划任务,以便自动推出 域控制器
示例 Get-SecureBootRolloutStatus.ps1 脚本 从任何工作站查看安全启动证书推出状态 管理员工作站
示例 Enable-SecureBootUpdateTask.ps1 脚本 启用安全启动更新任务 在禁用任务的终结点上, (仅运行一次以启用任务(如果禁用)

返回到“阶段 2:安全启动证书更新业务流程脚本”

Start-SecureBootRolloutOrchestrator.ps1

  • 目的: 使用自动 GPO 部署实现完全自动化的连续业务流程。

  • 作用

    • 设备状态的调用 Aggregate-SecureBootData.ps1

    • 使用渐进式翻倍生成推出波

    • 使用以下方法之一创建用于证书部署的 GPO

      • 安全启动组策略 AvailableUpdatesPolicy = 0x5944 (默认)
      • WinCS 方法 (参数 – UseWinCS)
    • 创建用于目标的 AD 安全组

    • 将计算机帐户添加到安全组

    • 配置 GPO 安全筛选

    • 将 GPO 链接到目标 OU

    • 监视阻止的存储桶 (无法访问的设备)

    • 设备恢复时自动取消阻止

  • 使用

    注意

    # Interactive (testing)
    .\Start-SecureBootRolloutOrchestrator.ps1 '
        -AggregationInputPath “\\fileserver\SecureBootData$” '
        -ReportBasePath “C:\SecureBootReports” '
        -PollIntervalMinutes 30

    注意

    # Interactive (testing), leveraging WinCS method
    .\Start-SecureBootRolloutOrchestrator.ps1 '
        -AggregationInputPath “\\fileserver\SecureBootData$” '
        -ReportBasePath “C:\SecureBootReports” '
        -PollIntervalMinutes 30 '
        -UseWinCS

  • 管理员命令

    注意

    # List blocked buckets
    .\Start-SecureBootRolloutOrchestrator.ps1 -ReportBasePath “C:\SecureBootReports” -ListBlockedBuckets

    注意

    # Unblock specific bucket
    .\Start-SecureBootRolloutOrchestrator.ps1 -ReportBasePath “C:\SecureBootReports” -UnblockBucket “Dell|Latitude5520 |BIOS1.2”

    注意

    # Unblock all
    .\Start-SecureBootRolloutOrchestrator.ps1 -ReportBasePath “C:\SecureBootReports” -UnblockAll

  • 参数

    参数 默认 说明
    AggregationInputPath 必需 终结点 JSON 文件的 UNC 路径
    ReportBasePath 必需 报表和状态的本地路径
    TargetOU 域根 用于链接 GPO 的 OU
    WavePrefix SecureBoot-Rollout GPO/组命名前缀
    MaxWaitHours 72 检查设备可访问性前的小时数
    PollIntervalMinutes 1440 状态检查之间的分钟数
    DryRun 显示在没有更改的情况下将发生的情况

    注意

    有关 PollIntervalMinutes 的注释: 直接运行业务流程协调程序时,默认值为 1440 分钟 (24 小时) 。 通过 Deploy-OrchestratorTask.ps1 部署时,默认值为 30 分钟。 部署脚本将其自己的默认值传递给业务流程协调程序。 使用 30 分钟进行主动推出,使用 1440 分钟进行维护监视。

    可选参数

    参数 默认 说明
    UseWinCS 使用 WinCS 方法而不是 AvailableUpdatesPolicy GPO
    WinCSKey F33E0C8E002 用于安全启动配置的 WinCS 密钥
    AllowListPath (无) 将主机名设置为允许进行定向/试点推出的文件的路径。 支持 .txt 或 .csv。
    AllowADGroup (无) 将计算机帐户的 AD 安全组设置为 ALLOW。 示例:“SecureBoot-Pilot-Computers”
    ExclusionListPath (无) 从推出 (VIP/执行设备) 中排除主机名的文件路径
    ExcludeADGroup (无) 要排除的计算机帐户的 AD 安全组。 示例:“VIP-Computers”
    ListBlockedBuckets 显示当前阻止的设备存储桶
    UnblockBucket (无) 取消阻止特定存储桶。 格式:“制造商|模型 |BIOS”
    UnblockAll 取消阻止所有被阻止的设备存储桶

返回到“阶段 2:安全启动证书更新业务流程脚本”

Deploy-OrchestratorTask.ps1

  • 目的: 将业务流程协调程序部署为 Windows 计划任务。

  • 优点

    • 没有 PowerShell 安全提示 (ExecutionPolicy 绕过)
    • 在后台连续运行
    • 无需用户交互
    • 在重新启动后幸存下来
  • 使用

    • 使用域服务帐户进行部署 (建议)

      • 使用 AvailableUpdates 组策略 (默认方法)

        注意

        .\Deploy-OrchestratorTask.ps1 '
            -AggregationInputPath “\\server\SecureBootData$” '
            -ReportBasePath “C:\SecureBootReports” '
            -ServiceAccount“DOMAIN\svc_secureboot”

      • 使用 WinCS 方法

        注意

        .\Deploy-OrchestratorTask.ps1 '
            -AggregationInputPath “\\server\SecureBootData$” '
            -ReportBasePath “C:\SecureBootReports” '
            -ServiceAccount “DOMAIN\svc_secureboot” -UseWinCS

    • 使用 SYSTEM 帐户进行部署

      • 使用 AvailableUpdates 组策略 (默认方法)

        注意

        .\Deploy-OrchestratorTask.ps1 '
            -AggregationInputPath “\\server\SecureBootData$” '
            -ReportBasePath “C:\SecureBootReports”

      • 使用 WinCS method.\Deploy-OrchestratorTask.ps1

        注意

        -AggregationInputPath “\\server\SecureBootData$” '
            -ReportBasePath “C:\SecureBootReports” -UseWinCS

      • 服务帐户要求

        • New-GPO、New-ADGroup、Add-ADGroupMember) 的域管理员 (
        • 对 JSON 文件共享的读取访问权限
        • 对 ReportBasePath 的写入访问权限

返回到“阶段 2:安全启动证书更新业务流程脚本”

Get-SecureBootRolloutStatus.ps1

  • 目的: 查看任何工作站的推出进度。

  • 显示的内容

    • 计划任务状态 (正在运行/就绪/已停止)
    • 当前波形号
    • 面向的设备与更新的设备
    • 视觉进度栏
    • 阻止的存储桶摘要
    • 链接到最新的 HTML 仪表板
  • 使用

    注意

    # Quick status check
    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath “C:\SecureBootReports”

    注意

    # Continuous monitoring (refreshes every 30 seconds)
    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath “C:\SecureBootReports” -Watch 30

    注意

    # View blocked buckets
    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath “C:\SecureBootReports” -ShowBlocked

    注意

    # View wave history
    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath “C:\SecureBootReports” -ShowWaves

    注意

    # View recent log
    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath “C:\SecureBootReports” -ShowLog

    注意

    # Open dashboard in browser
    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath “C:\SecureBootReports” -OpenDashboard

  • 参数

    参数 必填? 默认 说明
    ReportBasePath 必填 报表和状态文件的本地路径
    ShowLog 显示最近的业务流程协调程序日志条目
    ShowBlocked 显示阻止的存储桶详细信息
    ShowWaves 显示波形历史记录
    查看数 0 (禁用) 自动刷新间隔(秒)。 示例:-观看每 30 秒刷新 30 次。
    OpenDashboard 在默认浏览器中打开最新的 HTML 仪表板
  • 示例输出

    注意

    • ==============================================================
         安全启动推出状态
         2026-02-17 19:30:00
      ======================================================
    • Scheduled Task: Running
    • ROLLOUT PROGRESS

    状态:InProgress
    当前波形:5
    目标总数:1250
    更新总数: 847

    • Progress: [█████████████████████░░░░░░░░░░░░░░░░░░░] 67.8%
    • BLOCKED BUCKETS: 2 buckets need attention
        使用 -ShowBlocked 运行了解详细信息
    • LATEST DASHBOARD
      C:\SecureBootReports\Aggregation_20260217_193000\SecureBoot_Dashboard.html
      __________________________________________________________________________________________

返回到“阶段 2:安全启动证书更新业务流程脚本”

返回到顶部

E2E 部署步骤 (快速参考指南)

本节内容

阶段 1:检测基础结构

  • 步骤 1:创建集合共享

    注意

    # On file server
    $sharePath = “D:\SecureBootData”
    New-Item -ItemType Directory -Path $sharePath -Force
    New-SmbShare -Name “SecureBootData$” -Path $sharePath -FullAccess “域管理员” -ChangeAccess “域计算机”

    注意

    # Set NTFS permissions
    $acl = Get-Acl $sharePath
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule (“域计算机”,“修改”,“允许”)
    $acl。AddAccessRule ($rule)
    Set-Acl $sharePath $acl

  • 步骤 2:部署检测 GPO

    注意

    .\Deploy-GPO-SecureBootCollection.ps1 `
        -DomainName “contoso.com” '
        -OUPath “OU=Workstations,DC=contoso,DC=com” '
        -CollectionSharePath “\\server\SecureBootData$”

  • 步骤 3:等待终结点报告 (24-48 小时)

    注意

    检查收集进度

    (Get-ChildItem “\\server\SecureBootData$” -Filter “*.json”) 。计数

返回到“E2E 部署步骤 (快速参考指南) ”

阶段 2:精心安排的推出

  • 步骤 4:先决条件检查

    • 检测 gpo 部署 (步骤 2)
    • 至少 50 多个终结点报告 JSON
    • 具有域管理员权限的服务帐户
    • 使用 PowerShell 5.1+ 的管理服务器
  • 步骤 5:将 Orchestrator 部署为计划任务

    注意

    .\Deploy-OrchestratorTask.ps1 `
        -AggregationInputPath “\\server\SecureBootData$” '
        -ReportBasePath “C:\SecureBootReports” '
        -ServiceAccount“DOMAIN\svc_secureboot”

  • 步骤 6:监视进度

    注意

    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath "C:\SecureBootReports"

  • 步骤 7:查看仪表板

    注意

    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath "C:\SecureBootReports" -OpenDashboard

  • 步骤 8:管理阻止的存储桶

    注意

    # List blocked
    .\Start-SecureBootRolloutOrchestrator.ps1 -ReportBasePath “C:\SecureBootReports” -ListBlockedBuckets

    注意

    # Investigate and unblock
    .\Start-SecureBootRolloutOrchestrator.ps1 -ReportBasePath “C:\SecureBootReports” -UnblockBucket “Manufacturer|模型 |BIOS”

  • 步骤 9:验证完成

    注意

    .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath "C:\SecureBootReports"

    状态应显示“已完成”

返回到“E2E 部署步骤 (快速参考指南) ”

状态Files

业务流程协调程序维护 ReportBasePath\RolloutState\:

文件 说明
RolloutState.json 波形历史记录、目标设备、状态
BlockedBuckets.json 需要调查的存储桶
DeviceHistory.json 按主机名进行设备跟踪
Orchestrator_YYYYMMDD.log 每日活动日志

返回到“E2E 部署步骤 (快速参考指南) ”

返回到顶部

疑难解答

本节内容

业务流程协调程序未进行

  1. 检查计划的任务

    注意

    Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator"

  2. 检查日志

    注意

    Get-Content "C:\SecureBootReports\RolloutState\Orchestrator_*.log" -Tail 50

  3. 验证 JSON 数据新鲜度

    注意

    (Get-ChildItem "\\server\SecureBootData$" -Filter "*.json" | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-1) }).Count

返回到“故障排除”

阻止的存储桶

  1. 列表已阻止。

    注意

    .\Start-SecureBootRolloutOrchestrator.ps1 -ReportBasePath "C:\SecureBootReports" -ListBlockedBuckets

  2. 调查设备可访问性。

  3. 检查固件问题。

  4. 调查后解除阻止。

返回到“故障排除”

GPO 未应用

  1. 验证 GPO 是否存在。

    注意

    Get-GPO -Name "SecureBoot-Rollout-Wave*"

  2. 检查安全筛选。

    注意

    Get-GPPermission -Name "GPO-Name" -All

  3. 验证计算机是否在安全组中。

  4. 在目标上应用 GPO。

    注意

    gpupdate /force

返回到“故障排除”

返回到顶部

更改日志

更改日期 更改说明
2026 年 5 月 12 日 以前,每个示例脚本文件都作为单个文章发布,你可以从中复制和粘贴脚本。 从 2026 年 5 月 12 日及之后发布的 Windows 更新开始,示例脚本位于设备上的 %systemroot%\SecureBoot\ExampleRolloutScripts 文件夹中。