Aplica-se A
Windows 10 Windows 10, version 1607, all editions Windows 10 Enterprise 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 da BDC: 5072718

Script de Recolha de Dados de Inventário de Arranque Seguro de Exemplo

Copie e cole este script de exemplo e modifique conforme necessário para o seu ambiente: o script de Recolha de Dados de Inventário de Arranque Seguro de Exemplo.

Sample_Secure_Boot_Inventory_Data_Collection_script

# 1. HostName # PS Version: All | Administração: Não | Requisitos de Sistema: Nenhum experimente {     $hostname = $env:COMPUTERNAME     if ([string]::IsNullOrEmpty($hostname)) {         Write-Warning "Não foi possível determinar o nome do anfitrião"         $hostname = "Desconhecido"     }     Write-Host "Hostname: $hostname" } captura {     Write-Warning "Erro ao obter o nome do anfitrião: $_"     $hostname = "Erro"     Write-Host "Hostname: $hostname" }

# 2. CollectionTime # PS Version: All | Administração: Não | Requisitos de Sistema: Nenhum experimente {     $collectionTime = Get-Date     if ($null -eq $collectionTime) {         Write-Warning "Não foi possível obter a data/hora atuais"         $collectionTime = "Desconhecido"     }     Write-Host "Tempo da Coleção: $collectionTime" } captura {     Write-Warning "Erro ao obter a data/hora: $_"     $collectionTime = "Erro"     Write-Host "Tempo da Coleção: $collectionTime" }

# Registry: Secure Boot Main Key (3 values)

# 3. SecureBootEnabled # PS Version: 3.0+ | Administração: Pode ser necessário | Requisitos de Sistema: sistema compatível com UEFI/Arranque Seguro experimente {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop     Write-Host "Arranque Seguro Ativado: $secureBootEnabled" } captura {     Write-Warning "Não é possível determinar o estado de Arranque Seguro através do cmdlet: $_"     # Experimente a contingência do registo     experimente {         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host "Arranque Seguro Ativado: $secureBootEnabled"     } captura {         Write-Warning "Não é possível determinar o estado de Arranque Seguro através do registo. O sistema pode não suportar UEFI/Arranque Seguro."         $secureBootEnabled = $null         Write-Host "Arranque Seguro Ativado: Não Disponível"     } }

# 4. HighConfidenceOptOut # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host "Opção de Exclusão de Confiança Elevada: $highConfidenceOptOut" } captura {     Write-Warning "HighConfidenceOptOut registry key not found or inaccessible"     $highConfidenceOptOut = $null     Write-Host "Opção de Exclusão de Confiança Elevada: Não Disponível" }

# 5. AvailableUpdates # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     if ($null -ne $availableUpdates) {         # Converter em formato hexadecimal         $availableUpdatesHex = "0x{0:X}" -f $availableUpdates         Write-Host "Atualizações Disponível: $availableUpdatesHex"     } senão {         Write-Host "Disponível Atualizações: Não Disponível"     } } captura {     Write-Warning "Chave de registo AvailableUpdates não encontrada ou inacessível"     $availableUpdates = $null     Write-Host "Disponível Atualizações: Não Disponível" }

# Registry: Servicing Key (3 values)

# 6. UEFICA2023Status # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop     $uefica 2023Status = $regValue.UEFICA2023Status     Write-Host "Estado da AC UEFI 2023: $uefica 2023Status" } captura {     Write-Warning "Chave de registo UEFICA2023Status não encontrada ou inacessível"     $uefica 2023Status = $null     Write-Host "Estado da AC UEFI 2023: Não Disponível" }

# 7. UEFICA2023Capable # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Capable -ErrorAction Stop     $uefica 2023Capable = $regValue.UEFICA2023Capable     Write-Host "Compatível com UEFI CA 2023: $uefica 2023Capable" } captura {     Write-Warning "CHAVE de registo UEFICA2023Capable não encontrada ou inacessível"     $uefica 2023Capable = $null     Write-Host "UeFI CA 2023 Com Capacidade: Não Disponível" }

# 8. UEFICA2023Error # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host "Erro UEFI CA 2023: $uefica 2023Error" } captura {     Write-Warning "Chave de registo UEFICA2023Erro não encontrada ou inacessível"     $uefica 2023Error = $null     Write-Host "Erro UEFI CA 2023: Não Disponível" }

# Registry: Device Attributes (7 values)

# 9. OEMManufacturerName # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     if ([string]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName está vazio"         $oemManufacturerName = "Desconhecido"     }     Write-Host "Nome do Fabricante OEM: $oemManufacturerName" } captura {     Write-Warning "Chave de registo OEMManufacturerName não encontrada ou inacessível"     $oemManufacturerName = $null     Write-Host "Nome do Fabricante OEM: Não Disponível" }

# 10. OEMModelSystemFamily # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     if ([string]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily está vazio"         $oemModelSystemFamily = "Desconhecido"     }     Write-Host "OEM Model System Family: $oemModelSystemFamily" } captura {     Write-Warning "Chave de registo OEMModelSystemFamily não encontrada ou inacessível"     $oemModelSystemFamily = $null     Write-Host "Família do Sistema do Modelo OEM: Não Disponível" }

# 11. OEMModelNumber # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     if ([string]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber está vazio"         $oemModelNumber = "Desconhecido"     }     Write-Host "Número do Modelo OEM: $oemModelNumber" } captura {     Write-Warning "Chave de registo OEMModelNumber não encontrada ou inacessível"     $oemModelNumber = $null     Write-Host "Número do Modelo OEM: Não Disponível" }

# 12. FirmwareVersion # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     if ([string]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning "FirmwareVersion está vazio"         $firmwareVersion = "Desconhecido"     }     Write-Host "Versão de Firmware: $firmwareVersion" } captura {     Write-Warning "FirmwareVersion registry key not found or inaccessible"     $firmwareVersion = $null     Write-Host "Versão de Firmware: Não Disponível" }

# 13. FirmwareReleaseDate # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     if ([string]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning "FirmwareReleaseDate está vazio"         $firmwareReleaseDate = "Desconhecido"     }     Write-Host "Data de Lançamento do Firmware: $firmwareReleaseDate" } captura {     Write-Warning "FirmwareReleaseDate registry key not found or inaccessible"     $firmwareReleaseDate = $null     Write-Host "Data de Lançamento do Firmware: Não Disponível" }

# 14. OSArchitecture # PS Version: All | Administração: Não | Requisitos de Sistema: Nenhum experimente {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([string]::IsNullOrEmpty($osArchitecture)) {         # Experimente a contingência do registo         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([string]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "Não foi possível determinar a OSArchitecture"         $osArchitecture = "Desconhecido"     }     Write-Host "Arquitetura do SO: $osArchitecture" } captura {     Write-Warning "Erro ao obter OSArchitecture: $_"     $osArchitecture = "Desconhecido"     Write-Host "Arquitetura do SO: $osArchitecture" }

# 15. CanAttemptUpdateAfter (FILETIME) # PS Version: All | Administração: Pode ser necessário | Requisitos de Sistema: Nenhum experimente {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Convert FILETIME to DateTime if it's a valid number     if ($null -ne $canAttemptUpdateAfter -and $canAttemptUpdateAfter -is [long]) {         experimente {             $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter)         } captura {             Write-Warning "Não foi possível converter CanAttemptUpdateAfter FILETIME em DateTime"         }     }     Write-Host "Pode Tentar Atualizar Após: $canAttemptUpdateAfter" } captura {     Write-Warning "CanAttemptUpdateAfter registry key not found or inaccessible"     $canAttemptUpdateAfter = $null     Write-Host "Pode Tentar Atualizar Após: Não Disponível" }

# Event Logs: System Log (5 values)

# 16-20. Event Log queries # PS Version: 3.0+ | Administração: Pode ser necessário para o Registo do sistema | Requisitos de Sistema: Nenhum experimente {     $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 Arranque Seguro (1801/1808) encontrado no Registo do sistema"         $latestEventId = $null         $bucketId = $null         $confidence = $null         $event 1801Count = 0         $event 1808Count = 0         Write-Host "ID do Evento Mais Recente: Não Disponível"         Write-Host "ID do Registo: Não Disponível"         Write-Host "Confiança: Não Disponível"         Write-Host "Contagem de Eventos 1801: 0"         Write-Host "Contagem de Eventos 1808: 0"     } senão {         # 16. LatestEventId         $latestEvent = $events | Sort-Object TimeCreated -Descending | Select-Object -Primeiro 1         if ($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"         } senão {             $latestEventId = $latestEvent.Id             Write-Host "ID do Evento Mais Recente: $latestEventId"         }

        # 17. BucketID - Extracted from Event 1801/1808 if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match 'BucketId:\s*(.+)') {                 $bucketId = $matches[1]. Cortar()                 Write-Host "ID do Registo: $bucketId"             } senão {                 Write-Warning "BucketId não encontrado na mensagem de evento"                 $bucketId = $null                 Write-Host "ID do Registo: Não Encontrado no Evento"             }         } senão {             Write-Warning "O evento ou mensagem mais recente é nulo, não é possível extrair BucketId"             $bucketId = $null             Write-Host "ID do Registo: Não Disponível"         }

        # 18. Confidence - Extracted from Event 1801/1808 if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match 'BucketConfidenceLevel:\s*(.+)') {                 $confidence = $matches[1]. Cortar()                 Write-Host "Confiança: $confidence"             } senão {                 Write-Warning "Nível de confiança não encontrado na mensagem de evento"                 $confidence = $null                 Write-Host "Confiança: Não Encontrado no Evento"             }         } senão {             Write-Warning "O evento ou mensagem mais recente é 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 de Eventos 1801: $event 1801Count"

        # 20. Event1808Count $event 1808Array = @($events | Where-Object {$_. ID -eq 1808})         $event 1808Count = $event 1808Array.Count         Write-Host "Contagem de Eventos 1808: $event 1808Count"     } } captura {     Write-Warning "Erro ao obter registos de eventos. 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 Registo: Erro"     Write-Host "Confiança: Erro"     Write-Host "Contagem de Eventos 1801: 0"     Write-Host "Contagem de Eventos 1808: 0" }

# WMI/CIM Queries (4 values)

# 21. OSVersion # PS Versão: 3.0+ (utilize Get-WmiObject para 2.0) | Administração: Não | Requisitos de Sistema: Nenhum experimente {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     if ($null -eq $osInfo -or [string]::IsNullOrEmpty($osInfo.Version)) {         Write-Warning "Não foi possível obter a versão do SO"         $osVersion = "Desconhecido"     } senão {         $osVersion = $osInfo.Version     }     Write-Host "Versão do SO: $osVersion" } captura {     Write-Warning "Erro ao obter a versão do SO: $_"     $osVersion = "Desconhecido"     Write-Host "Versão do SO: $osVersion" }

# 22. LastBootTime # PS Versão: 3.0+ (utilize Get-WmiObject para 2.0) | Administração: Não | Requisitos de Sistema: Nenhum experimente {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     if ($null -eq $osInfo -or $null -eq $osInfo.LastBootUpTime) {         Write-Warning "Não foi possível obter a hora do último arranque"         $lastBootTime = $null         Write-Host "Hora do Último Arranque: Não Disponível"     } senão {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host "Hora do Último Arranque: $lastBootTime"     } } captura {     Write-Warning "Erro ao obter a hora do último arranque: $_"     $lastBootTime = $null     Write-Host "Hora do Último Arranque: Não Disponível" }

# 23. BaseBoardManufacturer # PS Versão: 3.0+ (utilize Get-WmiObject para 2.0) | Administração: Não | Requisitos de Sistema: Nenhum experimente {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {         Write-Warning "Não foi possível obter o fabricante da placa base"         $baseBoardManufacturer = "Desconhecido"     } senão {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host "Fabricante da Placa Base: $baseBoardManufacturer" } captura {     Write-Warning "Erro ao obter o fabricante da placa base: $_"     $baseBoardManufacturer = "Desconhecido"     Write-Host "Fabricante da Placa Base: $baseBoardManufacturer" }

# 24. BaseBoardProduct # PS Versão: 3.0+ (utilize Get-WmiObject para 2.0) | Administração: Não | Requisitos de Sistema: Nenhum experimente {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Product)) {         Write-Warning "Não foi possível obter o produto da placa base"         $baseBoardProduct = "Desconhecido"     } senão {         $baseBoardProduct = $baseBoard.Product     }     Write-Host "Baseboard Product: $baseBoardProduct" } captura {     Write-Warning "Erro ao obter o produto da placa base: $_"     $baseBoardProduct = "Desconhecido"     Write-Host "Baseboard Product: $baseBoardProduct"}

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.