应用对象
Windows 10 Windows 10, version 1607, all editions Win 10 Ent LTSC 2019 Win 10 IoT Ent LTSC 2019 Windows 10 IoT Core LTSC Windows 10 Enterprise LTSC 2021 Windows 10 IoT Enterprise LTSC 2021 Windows 10, version 22H2, all editions Windows 11 Home and Pro, version 21H2 Windows 11 Enterprise Multi-Session, version 21H2 Windows 11 Enterprise and Education, version 21H2 Windows 11 IoT Enterprise, version 21H2 Windows 11 Home and Pro, version 22H2 Windows 11 Enterprise Multi-Session, version 22H2 Windows 11 Enterprise and Education, version 22H2 Windows 11 IoT Enterprise, version 22H2 Windows 11 SE, version 23H2 Windows 11 Home and Pro, version 23H2 Windows 11 Enterprise and Education, version 23H2 Windows 11 Enterprise Multi-Session, version 23H2 Windows 11 SE, version 24H2 Windows 11 Enterprise and Education, version 24H2 Windows 11 Enterprise Multi-Session, version 24H2 Windows 11 Home and Pro, version 24H2 Windows 11 IoT Enterprise, version 24H2 Windows Server 2012 ESU Windows Server 2012 R2 ESU Windows Server 2016 Windows Server 2019 Windows Server 2022 Windows Server 2025

原始发布日期: 2025 年 11 月 17 日

KB ID:5072718

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

复制并粘贴此示例脚本,并根据需要修改环境:示例安全启动清单数据收集脚本。

Sample_Secure_Boot_Inventory_Data_Collection_script

# 1. HostName # PS 版本:全部 |管理员:否 |系统要求:无 try {     $hostname = $env:COMPUTERNAME     if ([string]::IsNullOrEmpty ($hostname) ) {         Write-Warning“无法确定主机名”         $hostname = “Unknown”     }     Write-Host“主机名: $hostname” } catch {     Write-Warning“检索主机名时出错: $_”     $hostname = “Error”     Write-Host“主机名: $hostname” }

# 2. CollectionTime # PS 版本:全部 |管理员:否 |系统要求:无 try {     $collectionTime = Get-Date     如果 ($null -eq $collectionTime) {         Write-Warning“无法检索当前日期/时间”         $collectionTime = “Unknown”     }     Write-Host“收集时间:$collectionTime” } catch {     Write-Warning“检索日期/时间时出错: $_”     $collectionTime = “Error”     Write-Host“收集时间:$collectionTime” }

# Registry: Secure Boot Main Key (3 values)

# 3. SecureBootEnabled # PS 版本:3.0+ |管理员:可能是必需的 |系统要求:支持 UEFI/安全启动的系统 try {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop     Write-Host“已启用安全启动:$secureBootEnabled” } catch {     Write-Warning“无法通过 cmdlet 确定安全启动状态: $_”     # 尝试注册表回退     try {         $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State” -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host“已启用安全启动:$secureBootEnabled”     } catch {         Write-Warning“无法通过注册表确定安全启动状态。 系统可能不支持 UEFI/安全启动。”         $secureBootEnabled = $null         Write-Host“已启用安全启动:不可用”     } }

# 4. HighConfidenceOptOut # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot” -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host“高置信度选择退出:$highConfidenceOptOut” } catch {     Write-Warning“找不到或无法访问 HighConfidenceOptOut 注册表项”     $highConfidenceOptOut = $null     Write-Host“高置信度选择退出:不可用” }

# 5. AvailableUpdates # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot” -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     如果 ($null -ne $availableUpdates) {         # 转换为十六进制格式         $availableUpdatesHex = “0x{0:X}” -f $availableUpdates         Write-Host“可用汇报:$availableUpdatesHex”     } else {         Write-Host“可用汇报:不可用”     } } catch {     Write-Warning“AvailableUpdates 注册表项未找到或无法访问”     $availableUpdates = $null     Write-Host“可用汇报:不可用” }

# Registry: Servicing Key (3 values)

# 6. UEFICA2023Status # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing” -Name UEFICA2023Status -ErrorAction Stop     $uefica 2023Status = $regValue.UEFICA2023Status     Write-Host“UEFI CA 2023 状态: $uefica 2023Status” } catch {     Write-Warning“找不到或无法访问 UEFICA2023Status 注册表项”     $uefica 2023Status = $null     Write-Host“UEFI CA 2023 状态:不可用” }

# 7. UEFICA2023Capable # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing” -Name UEFICA2023Capable -ErrorAction Stop     $uefica 2023Capable = $regValue.UEFICA2023Capable     Write-Host“UEFI CA 2023 支持:$uefica 2023Capable” } catch {     Write-Warning“找不到或无法访问 UEFICA2023Capable 注册表项”     $uefica 2023Capable = $null     Write-Host“UEFI CA 2023 支持:不可用” }

# 8. UEFICA2023Error # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing” -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host“UEFI CA 2023 错误: $uefica 2023Error” } catch {     Write-Warning“找不到或无法访问 UEFICA2023Error 注册表项”     $uefica 2023Error = $null     Write-Host“UEFI CA 2023 错误:不可用” }

# Registry: Device Attributes (7 values)

# 9. OEMManufacturerName # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes” -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     if ([string]::IsNullOrEmpty ($oemManufacturerName) ) {         Write-Warning“OEMManufacturerName 为空”         $oemManufacturerName = “Unknown”     }     Write-Host“OEM 制造商名称: $oemManufacturerName” } catch {     Write-Warning“找不到或无法访问 OEMManufacturerName 注册表项”     $oemManufacturerName = $null     Write-Host“OEM 制造商名称:不可用” }

# 10. OEMModelSystemFamily # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes” -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     if ([string]::IsNullOrEmpty ($oemModelSystemFamily) ) {         Write-Warning“OEMModelSystemFamily 为空”         $oemModelSystemFamily = “Unknown”     }     Write-Host“OEM 模型系统系列:$oemModelSystemFamily” } catch {     Write-Warning“找不到或无法访问 OEMModelSystemFamily 注册表项”     $oemModelSystemFamily = $null     Write-Host“OEM 模型系统系列:不可用” }

# 11. OEMModelNumber # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes” -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     if ([string]::IsNullOrEmpty ($oemModelNumber) ) {         Write-Warning“OEMModelNumber 为空”         $oemModelNumber = “Unknown”     }     Write-Host“OEM 型号:$oemModelNumber” } catch {     Write-Warning“找不到或无法访问 OEMModelNumber 注册表项”     $oemModelNumber = $null     Write-Host“OEM 型号:不可用” }

# 12. FirmwareVersion # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes” -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     if ([string]::IsNullOrEmpty ($firmwareVersion) ) {         Write-Warning“FirmwareVersion 为空”         $firmwareVersion = “Unknown”     }     Write-Host“固件版本: $firmwareVersion” } catch {     Write-Warning“找不到或无法访问 FirmwareVersion 注册表项”     $firmwareVersion = $null     Write-Host“固件版本:不可用” }

# 13. FirmwareReleaseDate # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes” -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     if ([string]::IsNullOrEmpty ($firmwareReleaseDate) ) {         Write-Warning“FirmwareReleaseDate 为空”         $firmwareReleaseDate = “Unknown”     }     Write-Host“固件发布日期:$firmwareReleaseDate” } catch {     Write-Warning“FirmwareReleaseDate 注册表项未找到或无法访问”     $firmwareReleaseDate = $null     Write-Host“固件发布日期:不可用” }

# 14. OSArchitecture # PS 版本:全部 |管理员:否 |系统要求:无 try {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([string]::IsNullOrEmpty ($osArchitecture) ) {         # 尝试注册表回退         $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes” -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([string]::IsNullOrEmpty ($osArchitecture) ) {         Write-Warning“无法确定 OSArchitecture”         $osArchitecture = “Unknown”     }     Write-Host“OS 体系结构:$osArchitecture” } catch {     Write-Warning“检索 OSArchitecture 时出错: $_”     $osArchitecture = “Unknown”     Write-Host“OS 体系结构:$osArchitecture” }

# 15. CanAttemptUpdateAfter (FILETIME) # PS 版本:全部 |管理员:可能是必需的 |系统要求:无 try {     $regValue = Get-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes” -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # 如果 FILETIME 是有效数字,请将 FILETIME 转换为 DateTime     如果 ($null -ne $canAttemptUpdateAfter -and $canAttemptUpdateAfter -is [long]) {         try {             $canAttemptUpdateAfter = [DateTime]::FromFileTime ($canAttemptUpdateAfter)         } catch {             Write-Warning“无法将 CanAttemptUpdateAfter FILETIME 转换为 DateTime”         }     }     Write-Host“可以尝试更新后:$canAttemptUpdateAfter” } catch {     Write-Warning“CanAttemptUpdateAfter 注册表项未找到或无法访问”     $canAttemptUpdateAfter = $null     Write-Host“可以尝试更新之后:不可用” }

# Event Logs: System Log (5 values)

# 16-20. Event Log queries # PS 版本:3.0+ |管理员:系统日志可能需要 |系统要求:无 try {     $allEventIds = @ (1801、1808)     $events = @ (Get-WinEvent -FilterHashtable @{LogName='System';ID=$allEventIds} -MaxEvents 20 -ErrorAction Stop)

    if ($events.Count -eq 0) {         Write-Warning“系统日志中找不到安全启动事件 (1801/1808) ”         $latestEventId = $null         $bucketId = $null         $confidence = $null         $event 1801Count = 0         $event 1808Count = 0         Write-Host“最新事件 ID: 不可用”         Write-Host“存储桶 ID:不可用”         Write-Host“置信度:不可用”         Write-Host“事件 1801 计数: 0”         Write-Host“事件 1808 计数: 0”     } else {         # 16. LatestEventId         $latestEvent = $events |Sort-Object TimeCreated -Descending |Select-Object -First 1         如果 ($null -eq $latestEvent) {             Write-Warning“无法确定最新事件”             $latestEventId = $null             Write-Host“最新事件 ID: 不可用”         } else {             $latestEventId = $latestEvent.Id             Write-Host“最新事件 ID: $latestEventId”         }

        # 17. BucketID - Extracted from Event 1801/1808 如果 ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             如果 ($latestEvent.Message -match 'BucketId:\s* (.+) ') {                 $bucketId = $matches[1]。剪裁 ()                 Write-Host“存储桶 ID: $bucketId”             } else {                 Write-Warning“在事件消息中找不到 BucketId”                 $bucketId = $null                 Write-Host“存储桶 ID:在事件中找不到”             }         } else {             Write-Warning“最新事件或消息为 null,无法提取 BucketId”             $bucketId = $null             Write-Host“存储桶 ID: 不可用”         }

        # 18. Confidence - Extracted from Event 1801/1808 如果 ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             如果 ($latestEvent.Message -match 'BucketConfidenceLevel:\s* (.+) ') {                 $confidence = $matches[1]。剪裁 ()                 Write-Host“信心:$confidence”             } else {                 Write-Warning“在事件消息中找不到置信度级别”                 $confidence = $null                 Write-Host“置信度:在事件中找不到”             }         } else {             Write-Warning“最新事件或消息为 null,无法提取置信度”             $confidence = $null             Write-Host“置信度:不可用”         }

        # 19. Event1801Count $event 1801Array = @ ($events |Where-Object {$_。Id -eq 1801})         $event 1801Count = $event 1801Array.Count         Write-Host“事件 1801 计数: $event 1801Count”

        # 20. Event1808Count $event 1808Array = @ ($events |Where-Object {$_。Id -eq 1808})         $event 1808Count = $event 1808Array.Count         Write-Host“事件 1808 计数:$event 1808Count”     } } catch {     Write-Warning“检索事件日志时出错。 可能需要管理员权限:$_”     $latestEventId = $null     $bucketId = $null     $confidence = $null     $event 1801Count = 0     $event 1808Count = 0     Write-Host“最新事件 ID: 错误”     Write-Host“存储桶 ID: 错误”     Write-Host“置信度:错误”     Write-Host“事件 1801 计数: 0”     Write-Host“事件 1808 计数: 0” }

# WMI/CIM Queries (4 values)

# 21. OSVersion # PS 版本:3.0+ (将 Get-WmiObject 用于 2.0) |管理员:否 |系统要求:无 try {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     如果 ($null -eq $osInfo -或 [string]::IsNullOrEmpty ($osInfo.Version) ) {         Write-Warning“无法检索 OS 版本”         $osVersion = “Unknown”     } else {         $osVersion = $osInfo.Version     }     Write-Host“OS 版本:$osVersion” } catch {     Write-Warning“检索 OS 版本时出错: $_”     $osVersion = “Unknown”     Write-Host“OS 版本:$osVersion” }

# 22. LastBootTime # PS 版本:3.0+ (将 Get-WmiObject 用于 2.0) |管理员:否 |系统要求:无 try {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     如果 ($null -eq $osInfo -或 $null -eq $osInfo.LastBootUpTime) {         Write-Warning“无法检索上次启动时间”         $lastBootTime = $null         Write-Host“上次启动时间:不可用”     } else {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host“上次启动时间:$lastBootTime”     } } catch {     Write-Warning“检索上次启动时间时出错: $_”     $lastBootTime = $null     Write-Host“上次启动时间:不可用” }

# 23. BaseBoardManufacturer # PS 版本:3.0+ (将 Get-WmiObject 用于 2.0) |管理员:否 |系统要求:无 try {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty ($baseBoard.Manufacturer) ) {         Write-Warning“无法检索基板制造商”         $baseBoardManufacturer = “Unknown”     } else {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host“基板制造商:$baseBoardManufacturer” } catch {     Write-Warning“检索基板制造商时出错: $_”     $baseBoardManufacturer = “Unknown”     Write-Host“基板制造商: $baseBoardManufacturer” }

# 24. BaseBoardProduct # PS 版本:3.0+ (将 Get-WmiObject 用于 2.0) |管理员:否 |系统要求:无 try {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty ($baseBoard.Product) ) {         Write-Warning“无法检索基板产品”         $baseBoardProduct = “Unknown”     } else {         $baseBoardProduct = $baseBoard.Product     }     Write-Host“基板产品: $baseBoardProduct” } catch {     Write-Warning“检索基板产品时出错: $_”     $baseBoardProduct = “Unknown”     Write-Host“基板产品: $baseBoardProduct”}

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。