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