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"}