Si applica 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 di pubblicazione originale: 17 novembre 2025

ID KB: 5072718

Script di esempio per la raccolta dei dati dell'inventario di avvio protetto

Copiare e incollare questo script di esempio e modificarlo in base alle esigenze per l'ambiente: script di raccolta dati di esempio per l'inventario di avvio protetto.

Sample_Secure_Boot_Inventory_Data_Collection_script

# 1. HostName # PS Version: All | Amministrazione: No | Requisiti di sistema: Nessuno prova {     $hostname = $env:NOMECOMPUTER     if ([string]::IsNullOrEmpty($hostname)) {         Write-Warning "Impossibile determinare hostname"         $hostname = "Sconosciuto"     }     Write-Host "Hostname: $hostname" } catch {     Write-Warning "Errore durante il recupero di hostname: $_"     $hostname = "Errore"     Write-Host "Hostname: $hostname" }

# 2. CollectionTime # PS Version: All | Amministrazione: No | Requisiti di sistema: Nessuno prova {     $collectionTime = Get-Date     if ($null -eq $collectionTime) {         Write-Warning "Impossibile recuperare la data/ora corrente"         $collectionTime = "Sconosciuto"     }     Write-Host "Tempo di raccolta: $collectionTime" } catch {     Write-Warning "Errore durante il recupero di data/ora: $_"     $collectionTime = "Errore"     Write-Host "Tempo di raccolta: $collectionTime" }

# Registry: Secure Boot Main Key (3 values)

# 3. SecureBootEnabled # VERSIONE PS: 3.0+ | Amministrazione: può essere richiesto | Requisiti di sistema: sistema che supporta UEFI/Avvio protetto prova {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop     Write-Host "Avvio protetto abilitato: $secureBootEnabled" } catch {     Write-Warning "Impossibile determinare lo stato di avvio protetto tramite cmdlet: $_"     # Prova il fallback del Registro di sistema     prova {         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host "Avvio protetto abilitato: $secureBootEnabled"     } catch {         Write-Warning "Impossibile determinare lo stato di avvio protetto tramite il Registro di sistema. Il sistema potrebbe non supportare UEFI/Avvio protetto".         $secureBootEnabled = $null         Write-Host "Avvio protetto abilitato: non disponibile"     } }

# 4. HighConfidenceOptOut # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host "Rifiuto esplicito con confidenza elevata: $highConfidenceOptOut" } catch {     Write-Warning "HighConfidenceOptOut chiave del Registro di sistema non trovata o non accessibile"     $highConfidenceOptOut = $null     Write-Host "Rifiuto esplicito con probabilità elevata: non disponibile" }

# 5. AvailableUpdates # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     if ($null -ne $availableUpdates) {         # Converti in formato esadecimale         $availableUpdatesHex = "0x{0:X}" -f $availableUpdates         Write-Host "Aggiornamenti disponibile: $availableUpdatesHex"     } else {         Write-Host "Disponibile Aggiornamenti: Non disponibile"     } } catch {     Write-Warning "AvailableUpdates registry key not found or inaccessible"     $availableUpdates = $null     Write-Host "Disponibile Aggiornamenti: Non disponibile" }

# Registry: Servicing Key (3 values)

# 6. UEFICA2023Status # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop     $uefica 2023Status = $regValue.UEFICA2023Status     Write-Host "Stato UEFI CA 2023: $uefica 2023Status" } catch {     Write-Warning "Chiave del Registro di sistema UEFICA2023Status non trovata o non accessibile"     $uefica 2023Status = $null     Write-Host "Stato UEFI CA 2023: non disponibile" }

# 7. UEFICA2023Capable # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Capable -ErrorAction Stop     $uefica 2023Capable = $regValue.UEFICA2023Capable     Write-Host "Supporto UEFI CA 2023: $uefica 2023Capable" } catch {     Write-Warning "UEFICA2023Capable registry key not found or inaccessible"     $uefica 2023Capable = $null     Write-Host "Supporto UEFI CA 2023: non disponibile" }

# 8. UEFICA2023Error # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host "Errore UEFI CA 2023: $uefica 2023Errore" } catch {     Write-Warning "UEFICA2023Error key del Registro di sistema non trovata o non accessibile"     $uefica 2023Error = $null     Write-Host "Errore UEFI CA 2023: non disponibile" }

# Registry: Device Attributes (7 values)

# 9. OEMManufacturerName # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     if ([string]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName è vuoto"         $oemManufacturerName = "Sconosciuto"     }     Write-Host "Nome produttore OEM: $oemManufacturerName" } catch {     Write-Warning "OEMManufacturerName chiave del Registro di sistema non trovata o non accessibile"     $oemManufacturerName = $null     Write-Host "Nome produttore OEM: non disponibile" }

# 10. OEMModelSystemFamily # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     if ([string]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily è vuoto"         $oemModelSystemFamily = "Sconosciuto"     }     Write-Host "Famiglia di sistemi MODELLO OEM: $oemModelSystemFamily" } catch {     Write-Warning "Chiave del Registro di sistema OEMModelSystemFamily non trovata o inaccessibile"     $oemModelSystemFamily = $null     Write-Host "Famiglia di sistemi modello OEM: non disponibile" }

# 11. OEMModelNumber # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     if ([string]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber is empty"         $oemModelNumber = "Sconosciuto"     }     Write-Host "Numero modello OEM: $oemModelNumber" } catch {     Write-Warning "CHIAVE OEMModelNumber del Registro di sistema non trovata o non accessibile"     $oemModelNumber = $null     Write-Host "Numero modello OEM: Non disponibile" }

# 12. FirmwareVersion # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     if ([string]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning "FirmwareVersion is empty"         $firmwareVersion = "Sconosciuto"     }     Write-Host "Versione firmware: $firmwareVersion" } catch {     Write-Warning "FirmwareVersion registry key not found or inaccessible"     $firmwareVersion = $null     Write-Host "Versione firmware: Non disponibile" }

# 13. FirmwareReleaseDate # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     if ([string]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning "FirmwareReleaseDate is empty"         $firmwareReleaseDate = "Sconosciuto"     }     Write-Host "Data di rilascio del firmware: $firmwareReleaseDate" } catch {     Write-Warning "FirmwareReleaseDate registry key not found or inaccessible"     $firmwareReleaseDate = $null     Write-Host "Data di rilascio del firmware: non disponibile" }

# 14. OSArchitecture # PS Version: All | Amministrazione: No | Requisiti di sistema: Nessuno prova {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([string]::IsNullOrEmpty($osArchitecture)) {         # Prova il fallback del Registro di sistema         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([string]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "Impossibile determinare OSArchitecture"         $osArchitecture = "Sconosciuto"     }     Write-Host "Architettura del sistema operativo: $osArchitecture" } catch {     Write-Warning "Errore durante il recupero dell'architettura OS: $_"     $osArchitecture = "Sconosciuto"     Write-Host "Architettura del sistema operativo: $osArchitecture" }

# 15. CanAttemptUpdateAfter (FILETIME) # PS Version: All | Amministrazione: può essere richiesto | Requisiti di sistema: Nessuno prova {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Convert FILETIME in DateTime se si tratta di un numero valido     if ($null -ne $canAttemptUpdateAfter -and $canAttemptUpdateAfter -is [long]) {         prova {             $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter)         } catch {             Write-Warning "Impossibile convertire CanAttemptUpdateAfter FILETIME in DateTime"         }     }     Write-Host "Può tentare l'aggiornamento dopo: $canAttemptUpdateAfter" } catch {     Write-Warning "CanAttemptUpdateAfter chiave del Registro di sistema non trovata o inaccessibile"     $canAttemptUpdateAfter = $null     Write-Host "Può tentare l'aggiornamento dopo: Non disponibile" }

# Event Logs: System Log (5 values)

# 16-20. Event Log queries # VERSIONE PS: 3.0+ | Amministrazione: potrebbe essere necessario per il registro di sistema | Requisiti di sistema: Nessuno prova {     $allEventIds = @(1801, 1808)     $events = @(Get-WinEvent -FilterHashtable @{LogName='System'; ID=$allEventIds} -MaxEvents 20 -ErrorAction Stop)

    if ($events.Count -eq 0) {         Write-Warning "Nessun evento di avvio protetto (1801/1808) trovato nel registro di sistema"         $latestEventId = $null         $bucketId = $null         $confidence = $null         $event 1801Count = 0         $event 1808Count = 0         Write-Host "ID evento più recente: non disponibile"         Write-Host "ID contenitore: non disponibile"         Write-Host "Confidenza: non disponibile"         Write-Host "Evento 1801 Conteggio: 0"         Write-Host "Numero evento 1808: 0"     } else {         # 16. LatestEventId         $latestEvent = $events | Sort-Object TempoCreato -Decrescente | Select-Object -Primo 1         if ($null -eq $latestEvent) {             Write-Warning "Impossibile determinare l'evento più recente"             $latestEventId = $null             Write-Host "ID evento più recente: Non disponibile"         } else {             $latestEventId = $latestEvent.Id             Write-Host "ID evento più 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]. Trim()                 Write-Host "ID bucket: $bucketId"             } else {                 Write-Warning "BucketId non trovato nel messaggio dell'evento"                 $bucketId = $null                 Write-Host "ID bucket: non trovato nell'evento"             }         } else {             Write-Warning "L'evento o il messaggio più recente è Null, non è possibile estrarre BucketId"             $bucketId = $null             Write-Host "ID bucket: non disponibile"         }

        # 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]. Trim()                 Write-Host "Confidenza: $confidence"             } else {                 Write-Warning "Livello di probabilità non trovato nel messaggio dell'evento"                 $confidence = $null                 Write-Host "Confidenza: non trovato nell'evento"             }         } else {             Write-Warning "L'evento o il messaggio più recente è Null, non è possibile estrarre confidenza"             $confidence = $null             Write-Host "Confidenza: non disponibile"         }

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

        # 20. Event1808Count $event 1808Array = @($events | Where-Object {$_. Id -eq 1808})         $event 1808Count = $event 1808Array.Count         Write-Host "Numero evento 1808: $event 1808Count"     } } catch {     Write-Warning "Errore durante il recupero dei registri eventi. Può richiedere privilegi di amministratore: $_"     $latestEventId = $null     $bucketId = $null     $confidence = $null     $event 1801Count = 0     $event 1808Count = 0     Write-Host "ID evento più recente: errore"     Write-Host "ID bucket: errore"     Write-Host "Confidenza: errore"     Write-Host "Numero evento 1801: 0"     Write-Host "Numero evento 1808: 0" }

# WMI/CIM Queries (4 values)

# 21. OSVersion # Versione PS: 3.0+ (usare Get-WmiObject per 2.0) | Amministrazione: No | Requisiti di sistema: Nessuno prova {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     if ($null -eq $osInfo -or [string]::IsNullOrEmpty($osInfo.Version)) {         Write-Warning "Impossibile recuperare la versione del sistema operativo"         $osVersion = "Sconosciuto"     } else {         $osVersion = $osInfo.Version     }     Write-Host "Versione del sistema operativo: $osVersion" } catch {     Write-Warning "Errore durante il recupero della versione del sistema operativo: $_"     $osVersion = "Sconosciuto"     Write-Host "Versione sistema operativo: $osVersion" }

# 22. LastBootTime # Versione PS: 3.0+ (usare Get-WmiObject per 2.0) | Amministrazione: No | Requisiti di sistema: Nessuno prova {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     if ($null -eq $osInfo -o $null -eq $osInfo.LastBootUpTime) {         Write-Warning "Impossibile recuperare l'ora dell'ultimo avvio"         $lastBootTime = $null         Write-Host "Ora ultimo avvio: non disponibile"     } else {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host "Ora ultimo avvio: $lastBootTime"     } } catch {     Write-Warning "Errore durante il recupero dell'ultima ora di avvio: $_"     $lastBootTime = $null     Write-Host "Ora ultimo avvio: non disponibile" }

# 23. BaseBoardManufacturer # Versione PS: 3.0+ (usare Get-WmiObject per 2.0) | Amministrazione: No | Requisiti di sistema: Nessuno prova {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {         Write-Warning "Impossibile recuperare il produttore della lavagna"         $baseBoardManufacturer = "Sconosciuto"     } else {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host "Produttore lavagna: $baseBoardManufacturer" } catch {     Write-Warning "Errore durante il recupero del produttore della scheda base: $_"     $baseBoardManufacturer = "Sconosciuto"     Write-Host "Produttore lavagna: $baseBoardManufacturer" }

# 24. BaseBoardProduct # Versione PS: 3.0+ (usare Get-WmiObject per 2.0) | Amministrazione: No | Requisiti di sistema: Nessuno prova {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Product)) {         Write-Warning "Impossibile recuperare il prodotto baseboard"         $baseBoardProduct = "Sconosciuto"     } else {         $baseBoardProduct = $baseBoard.Prodotto     }     Write-Host "Prodotto Baseboard: $baseBoardProduct" } catch {     Write-Warning "Errore durante il recupero del prodotto baseboard: $_"     $baseBoardProduct = "Sconosciuto"     Write-Host "Prodotto Baseboard: $baseBoardProduct"}

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.