Aplica-se a
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

Data de publicação original: 17 de novembro de 2025

ID do KB: 5072718

Data da alteração

Alterar descrição

13 de fevereiro de 2026

  • Atualizado o script de Coleta de Dados de Inventário de Inicialização Segura de Exemplo

Script de coleta de dados de inventário de inicialização segura de exemplo

Copie e cole este script de exemplo e modifique conforme necessário para seu ambiente: o script de Coleta de Dados de Inventário de Inicialização Segura de Exemplo.

<# . SINOPSE     Detecta status de atualização de certificado de Inicialização Segura para monitoramento em toda a frota.

.DESCRIPTION     Este script de detecção coleta status de inicialização segura, valores de registro de atualização de certificado,     e informações do dispositivo. Ele gera uma cadeia de caracteres JSON para monitoramento e relatórios.

    Compatible with Intune Remediations, GPO-based collection, and other management tools. Nenhum script de correção é necessário – isso é apenas monitoramento.

    Exit 0 = "Without issue"  (certificates updated)     Saída 1 = "Com problema" (certificados não atualizados – somente informativos)

    Source: https://support.microsoft.com/en-us/topic/sample-secure-boot-inventory-data-collection-script-d02971d2-d4b5-42c9-b58a-8527f0ffa30b     ID do KB: 5072718

.NOTES     Caminhos de registro por https://aka.ms/securebootplaybook:       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR     IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO,     FITNESS PARA UM PROPÓSITO ESPECÍFICO E NÃO VIOLAÇÃO. EM NENHUM EVENTO DEVE O     AUTORES OU DETENTORES DE DIREITOS AUTORAIS SÃO RESPONSÁVEIS POR QUALQUER DECLARAÇÃO, DANOS OU OUTROS     RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, TORT OU DE OUTRA FORMA, DECORRENTE DE,     FORA OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS TRANSAÇÕES NO     SOFTWARE.#>

# 1. HostName Versão # PS: Tudo | Administração: Não | Requisitos do sistema: nenhum try {     $hostname = $env:COMPUTERNAME     if ([string]::IsNullOrEmpty($hostname)) {         Write-Warning "Nome do host não pôde ser determinado"         $hostname = "Desconhecido"     }     Write-Host "Nome do host: $hostname" } catch {     Write-Warning "Nome do host de recuperação de erro: $_"     $hostname = "Erro"     Write-Host "Nome do host: $hostname" }

# 2. CollectionTime Versão # PS: Tudo | Administração: Não | Requisitos do sistema: nenhum try {     $collectionTime = Get-Date     se ($null -eq $collectionTime) {         Write-Warning "Não foi possível recuperar a data/hora atual"         $collectionTime = "Desconhecido"     }     Write-Host "Hora da Coleção: $collectionTime" } catch {     Write-Warning "Data/hora de recuperação de erro: $_"     $collectionTime = "Erro"     Write-Host "Hora da Coleção: $collectionTime" }

# Registry: Secure Boot Main Key (3 values)

# 3. SecureBootEnabled # Versão PS: 3.0+ | Administração: pode ser necessário | Requisitos do sistema: uefi/sistema capaz de inicialização segura try {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop     Write-Host "Inicialização segura habilitada: $secureBootEnabled" } catch {     Write-Warning "Não é possível determinar status de inicialização segura por meio de cmdlet: $_"     # Tente o fallback do registro     try {         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host "Inicialização segura habilitada: $secureBootEnabled"     } catch {         Write-Warning "Não é possível determinar o status de Inicialização Segura por meio do registro. O sistema pode não dar suporte a UEFI/Inicialização Segura.".         $secureBootEnabled = $null         Write-Host "Inicialização segura habilitada: não disponível"     } }

# 4. HighConfidenceOptOut Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host "Alta Confiança Opt Out: $highConfidenceOptOut" } catch {     Write-Warning "Chave de registro HighConfidenceOptOut não encontrada ou inacessível"     $highConfidenceOptOut = $null     Write-Host "Alta confiança opt out: Not Available" }

# 5. AvailableUpdates Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     se ($null -ne $availableUpdates) {         # Converter em formato hexadecimal         $availableUpdatesHex = "0x{0:X}" -f $availableUpdates         Write-Host "Atualizações disponível: $availableUpdatesHex"     } else {         Write-Host "Disponível Atualizações: Não Disponível"     } } catch {     Write-Warning "AvailableUpdates registry key not found or inaccessible"     $availableUpdates = $null     Write-Host "Atualizações disponível: não disponível" }

# Registry: Servicing Key (3 values)

# 6. UEFICA2023Status Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop     $uefica 2023Status = $regValue.UEFICA2023Status     Write-Host "Windows UEFI CA 2023 Status: $uefica 2023Status" } catch {     Write-Warning "Chave do Registro de Status da UEFI do Windows UEFI 2023 não encontrada ou inacessível"     $uefica 2023Status = $null     Write-Host "Windows UEFI CA 2023 Status: Não Disponível" }

# 7. UEFICA2023Error Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host "Erro da UEFI CA 2023: $uefica 2023Error" } catch {     Write-Warning "UEFICA2023Error registry key not found or inaccessible"     $uefica 2023Error = $null     Write-Host "Erro da UEFI CA 2023: não disponível" }

# 9. UEFICA2023ErrorEvent Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023ErrorEvent -ErrorAction Stop     $uefica 2023ErrorEvent = $regValue.UEFICA2023ErrorEvent     Write-Host "Evento de Erro da UEFI CA 2023: $uefica 2023ErrorEvent" } catch {     $uefica 2023ErrorEvent = $null     Write-Host "Evento de erro UEFI CA 2023: não disponível" }

# Registry: Device Attributes (7 values)

# 10. OEMManufacturerName Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     se ([string]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName está vazio"         $oemManufacturerName = "Desconhecido"     }     Write-Host "Nome do fabricante do OEM: $oemManufacturerName" } catch {     Write-Warning "Chave de registro OEMManufacturerName não encontrada ou inacessível"     $oemManufacturerName = $null     Write-Host "Nome do fabricante do OEM: não disponível" }

# 10. OEMModelSystemFamily Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     se ([string]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily está vazio"         $oemModelSystemFamily = "Desconhecido"     }     Write-Host "Família do Sistema de ModeloS OEM: $oemModelSystemFamily" } catch {     Write-Warning "Chave do registro OEMModelSystemFamily não encontrada ou inacessível"     $oemModelSystemFamily = $null     Write-Host "Família do Sistema de ModeloS OEM: Não Disponível" }

# 11. OEMModelNumber Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     se ([string]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber está vazio"         $oemModelNumber = "Desconhecido"     }     Write-Host "Número do modelo OEM: $oemModelNumber" } catch {     Write-Warning "Chave do registro OEMModelNumber não encontrada ou inacessível"     $oemModelNumber = $null     Write-Host "Número do modelo OEM: não disponível" }

# 12. FirmwareVersion Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     se ([string]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning "FirmwareVersion está vazio"         $firmwareVersion = "Desconhecido"     }     Write-Host "Versão do firmware: $firmwareVersion" } catch {     Write-Warning "Chave de registro firmwareVersion não encontrada ou inacessível"     $firmwareVersion = $null     Write-Host "Versão do firmware: não disponível" }

# 13. FirmwareReleaseDate Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     se ([string]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning "FirmwareReleaseDate está vazio"         $firmwareReleaseDate = "Desconhecido"     }     Write-Host "Data de lançamento do firmware: $firmwareReleaseDate" } catch {     Write-Warning "Chave de registro FirmwareReleaseDate não encontrada ou inacessível"     $firmwareReleaseDate = $null     Write-Host "Data de lançamento do firmware: não disponível" }

# 14. OSArchitecture Versão # PS: Tudo | Administração: Não | Requisitos do sistema: nenhum try {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([string]::IsNullOrEmpty($osArchitecture)) {         # Tente o fallback do registro         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([string]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "OSArchitecture não pôde ser determinada"         $osArchitecture = "Desconhecido"     }     Write-Host "Arquitetura do sistema operacional: $osArchitecture" } catch {     Write-Warning "Erro ao recuperar OSArchitecture: $_"     $osArchitecture = "Desconhecido"     Write-Host "Arquitetura do sistema operacional: $osArchitecture" }

# 15. CanAttemptUpdateAfter (FILETIME) Versão # PS: Tudo | Administração: pode ser necessário | Requisitos do sistema: nenhum try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Converter FILETIME em UTC DateTime — o registro armazena como REG_BINARY (byte[]) ou REG_QWORD (long)     se ($null -ne $canAttemptUpdateAfter) {         try {             se ($canAttemptUpdateAfter -is [byte[]]) {                 $fileTime = [BitConverter]::ToInt64($canAttemptUpdateAfter, 0)                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($fileTime). ToUniversalTime()             } elseif ($canAttemptUpdateAfter -is [long]) {                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter). ToUniversalTime()             }         } catch {             Write-Warning "Não foi possível converter CanAttemptUpdateAfter FILETIME em DateTime"         }     }     Write-Host "Pode tentar atualizar após: $canAttemptUpdateAfter" } catch {     Write-Warning "Chave de registro CanAttemptUpdateAfter não encontrada ou inacessível"     $canAttemptUpdateAfter = $null     Write-Host "Pode tentar atualizar depois: não disponível" }

# Event Logs: System Log (5 values)

# 16-20. Event Log queries # Versão PS: 3.0+ | Administração: pode ser necessário para o log do sistema | Requisitos do sistema: nenhum try {     $allEventIds = @(1801, 1808)     $events = @(Get-WinEvent -FilterHashtable @{LogName='System'; ID=$allEventIds} -MaxEvents 20 -ErrorAction Stop)

    if ($events.Count -eq 0) {         Write-Warning "Nenhum evento de Inicialização Segura (1801/1808) encontrado no log do sistema"         $latestEventId = $null         $bucketId = $null         $confidence = $null         $event 1801Count = 0         $event 1808Count = 0         Write-Host "ID de evento mais recente: não disponível"         Write-Host "ID do bucket: não disponível"         Write-Host "Confiança: Não Disponível"         Write-Host "Contagem do Evento 1801: 0"         Write-Host "Contagem do Evento 1808: 0"     } else {         # 16. LatestEventId         $latestEvent = $events | Sort-Object TimeCreated -Descending | Select-Object -Primeiro 1         se ($null -eq $latestEvent) {             Write-Warning "Não foi possível determinar o evento mais recente"             $latestEventId = $null             Write-Host "ID do evento mais recente: não disponível"         } else {             $latestEventId = $latestEvent.Id             Write-Host "ID do evento mais recente: $latestEventId"         }

        # 17. BucketID - Extracted from Event 1801/1808 se ($null -ne $latestEvent -e $null -ne $latestEvent.Message) {             se ($latestEvent.Message -match 'BucketId:\s*(.+)') {                 $bucketId = $matches[1]. Trim()                 Write-Host "ID do bucket: $bucketId"             } else {                 Write-Warning "BucketId não encontrado na mensagem de evento"                 $bucketId = $null                 Write-Host "ID do bucket: não encontrada no evento"             }         } else {             Write-Warning "O último evento ou mensagem é nulo, não é possível extrair BucketId"             $bucketId = $null             Write-Host "ID do bucket: não disponível"         }

        # 18. Confidence - Extracted from Event 1801/1808 se ($null -ne $latestEvent -e $null -ne $latestEvent.Message) {             se ($latestEvent.Message -match 'BucketConfidenceLevel:\s*(.+)') {                 $confidence = $matches[1]. Trim()                 Write-Host "Confiança: $confidence"             } else {                 Write-Warning "nível de confiança não encontrado na mensagem de evento"                 $confidence = $null                 Write-Host "Confiança: não encontrada no evento"             }         } else {             Write-Warning "O último evento ou mensagem é nulo, não é possível extrair Confiança"             $confidence = $null             Write-Host "Confiança: Não Disponível"         }

        # 19. Event1801Count $event 1801Array = @($events | Where-Object {$_. Id -eq 1801})         $event 1801Count = $event 1801Array.Count         Write-Host "Contagem do Evento 1801: $event 1801Count"

        # 20. Event1808Count $event 1808Array = @($events | Where-Object {$_. Id -eq 1808})         $event 1808Count = $event 1808Array.Count         Write-Host "Contagem do Evento 1808: $event 1808Count"     } } catch {     Write-Warning "Logs de eventos de recuperação de erro. Pode exigir privilégios de administrador: $_"     $latestEventId = $null     $bucketId = $null     $confidence = $null     $event 1801Count = 0     $event 1808Count = 0     Write-Host "ID do evento mais recente: erro"     Write-Host "ID do bucket: erro"     Write-Host "Confiança: Erro"     Write-Host "Contagem do Evento 1801: 0"     Write-Host "Contagem do Evento 1808: 0" }

# WMI/CIM Queries (4 values)

# 21. OSVersion # Versão PS: 3.0+ (use Get-WmiObject para 2.0) | Administração: Não | Requisitos do sistema: nenhum try {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     se ($null -eq $osInfo -ou [string]::IsNullOrEmpty($osInfo.Version)) { {         Write-Warning "Não foi possível recuperar a versão do sistema operacional"         $osVersion = "Desconhecido"     } else {         $osVersion = $osInfo.Version     }     Write-Host "Versão do sistema operacional: $osVersion" } catch {     Write-Warning "Versão do sistema operacional de recuperação de erro: $_"     $osVersion = "Desconhecido"     Write-Host "Versão do sistema operacional: $osVersion" }

# 22. LastBootTime # Versão PS: 3.0+ (use Get-WmiObject para 2.0) | Administração: Não | Requisitos do sistema: nenhum try {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     se ($null -eq $osInfo -ou $null -eq $osInfo.LastBootUpTime) {         Write-Warning "Não foi possível recuperar a última hora de inicialização"         $lastBootTime = $null         Write-Host "Última hora de inicialização: não disponível"     } else {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host "Última Hora de Inicialização: $lastBootTime"     } } catch {     Write-Warning "Recuperação de erro na última hora de inicialização: $_"     $lastBootTime = $null     Write-Host "Última Hora de Inicialização: Não Disponível" }

# 23. BaseBoardManufacturer # Versão PS: 3.0+ (use Get-WmiObject para 2.0) | Administração: Não | Requisitos do sistema: nenhum try {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     se ($null -eq $baseBoard -ou [string]::IsNullOrEmpty($baseBoard.Manufacturer)) { {         Write-Warning "Não foi possível recuperar o fabricante do quadro de base"         $baseBoardManufacturer = "Desconhecido"     } else {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host "Fabricante do Quadro de Base: $baseBoardManufacturer" } catch {     Write-Warning "Fabricante de base de recuperação de erro: $_"     $baseBoardManufacturer = "Desconhecido"     Write-Host "Fabricante do Quadro de Base: $baseBoardManufacturer" }

# 24. BaseBoardProduct # Versão PS: 3.0+ (use Get-WmiObject para 2.0) | Administração: Não | Requisitos do sistema: nenhum try {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     se ($null -eq $baseBoard -ou [string]::IsNullOrEmpty($baseBoard.Product)) { {         Write-Warning "Não foi possível recuperar o produto de baseboard"         $baseBoardProduct = "Desconhecido"     } else {         $baseBoardProduct = $baseBoard.Product     }     Write-Host "Produto de Base: $baseBoardProduct" } catch {     Write-Warning "Produto de base de recuperação de erro: $_"     $baseBoardProduct = "Desconhecido"     Write-Host "Produto de base: $baseBoardProduct" }

# ============================================================================= # Detecção de correção – Código de saída & saída de saída de status # =============================================================================

# Build status object from all collected inventory data $status = [ordenado]@{     UEFICA2023Status = $uefica 2023Status     UEFICA2023Error = $uefica 2023Error     UEFICA2023ErrorEvent = $uefica 2023ErrorEvent     AvailableUpdates = if ($null -ne $availableUpdates) { $availableUpdatesHex } else { $null }     Nome do host = $hostname     CollectionTime = if ($collectionTime -is [datetime]) { $collectionTime.ToString("o") } else { "$collectionTime" } }     SecureBootEnabled = $secureBootEnabled     HighConfidenceOptOut = $highConfidenceOptOut     OEMManufacturerName = $oemManufacturerName     OEMModelSystemFamily = $oemModelSystemFamily     OEMModelNumber = $oemModelNumber     FirmwareVersion = $firmwareVersion     FirmwareReleaseDate = $firmwareReleaseDate     OSArchitecture = $osArchitecture     CanAttemptUpdateAfter = if ($canAttemptUpdateAfter -is [datetime]) { $canAttemptUpdateAfter.ToString("o") } else { "$canAttemptUpdateAfter" }     LatestEventId = $latestEventId     BucketId = $bucketId     Confiança = $confidence     Event1801Count = $event 1801Count     Event1808Count = $event 1808Count     OSVersion = $osVersion     LastBootTime = if ($lastBootTime -is [datetime]) { $lastBootTime.ToString("o") } else { "$lastBootTime" }     BaseBoardManufacturer = $baseBoardManufacturer     BaseBoardProduct = $baseBoardProduct }

# Output the status - For data aggregation Write-Output ($status | ConvertTo-Json -Compress)

# Exit code: "Updated" is the success value per the playbook se ($secureBootEnabled -e $uefica 2023Status -eq "Atualizado") {     saída 0 # Sem problemas } else {     saída 1 # Com problema }

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.