Fecha de publicación original: 17 de noviembre de 2025
KB ID: 5072718
Script de recopilación de datos de inventario de arranque seguro de ejemplo
Copie y pegue este script de ejemplo y modifíquelo según sea necesario para su entorno: el script de recopilación de datos de inventario de arranque seguro de ejemplo.
Sample_Secure_Boot_Inventory_Data_Collection_script
# 1. HostName # Versión PS: Todo | Administración: No | Requisitos del sistema: Ninguno prueba { $hostname = $env:NOMBREEQUIPO if ([string]::IsNullOrEmpty($hostname)) { Write-Warning "No se pudo determinar el nombre de host" $hostname = "Desconocido" } Write-Host "Nombre de host: $hostname" } captura { Write-Warning "Error al recuperar el nombre de host: $_" $hostname = "Error" Write-Host "Nombre de host: $hostname" }
# 2. CollectionTime # Versión PS: Todo | Administración: No | Requisitos del sistema: Ninguno prueba { $collectionTime = Get-Date if ($null -eq $collectionTime) { Write-Warning "No se pudo recuperar la fecha y hora actuales" $collectionTime = "Desconocido" } Write-Host "Hora de recogida: $collectionTime" } captura { Write-Warning "Error al recuperar la fecha y hora: $_" $collectionTime = "Error" Write-Host "Hora de recogida: $collectionTime" }
# Registry: Secure Boot Main Key (3 values)
# 3. SecureBootEnabled # Versión PS: 3.0+ | Administración: puede ser necesario | Requisitos del sistema: sistema compatible con UEFI/Arranque seguro prueba { $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop Write-Host "Arranque seguro habilitado: $secureBootEnabled" } captura { Write-Warning "No se puede determinar el estado de arranque seguro a través del cmdlet: $_" # Prueba la reserva del Registro prueba { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled Write-Host "Arranque seguro habilitado: $secureBootEnabled" } captura { Write-Warning "No se puede determinar el estado de arranque seguro a través del Registro. Es posible que el sistema no admita UEFI/arranque seguro". $secureBootEnabled = $null Write-Host "Arranque seguro habilitado: no disponible" } }
# 4. HighConfidenceOptOut # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop $highConfidenceOptOut = $regValue.HighConfidenceOptOut Write-Host "Rechazo de confianza alta: $highConfidenceOptOut" } captura { Write-Warning "No se encuentra o no se puede acceder a la clave del Registro HighConfidenceOptOut" $highConfidenceOptOut = $null Write-Host "Rechazo de confianza alta: no disponible" }
# 5. AvailableUpdates # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop $availableUpdates = $regValue.AvailableUpdates if ($null -ne $availableUpdates) { # Convertir a formato hexadecimal $availableUpdatesHex = "0x{0:X}" -f $availableUpdates Write-Host "Novedades disponible: $availableUpdatesHex" } else { Write-Host "Novedades disponible: no disponible" } } captura { Write-Warning "No se encuentra o no se puede acceder a la clave del registro AvailableUpdates" $availableUpdates = $null Write-Host "Novedades disponible: no disponible" }
# Registry: Servicing Key (3 values)
# 6. UEFICA2023Status # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop $uefica 2023Status = $regValue.UEFICA2023Status Write-Host "Estado de UEFI CA 2023: $uefica 2023Status" } captura { Write-Warning "No se encuentra o no se puede acceder a la clave del Registro UEFICA2023Status" $uefica 2023Status = $null Write-Host "Estado de UEFI CA 2023: no disponible" }
# 7. UEFICA2023Capable # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Capable -ErrorAction Stop $uefica 2023Capable = $regValue.UEFICA2023Capable Write-Host "UEFI CA 2023 capaz: $uefica 2023Capable" } captura { Write-Warning "NO se encuentra o no se puede acceder a la clave del Registro UEFICA2023Capable" $uefica 2023Capable = $null Write-Host "UEFI CA 2023 compatible: no disponible" }
# 8. UEFICA2023Error # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop $uefica 2023Error = $regValue.UEFICA2023Error Write-Host "Error de UEFI CA 2023: $uefica 2023Error" } captura { Write-Warning "Clave de registro UEFICA2023Error no encontrada o inaccesible" $uefica 2023Error = $null Write-Host "Error de UEFI CA 2023: no disponible" }
# Registry: Device Attributes (7 values)
# 9. OEMManufacturerName # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $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á vacío" $oemManufacturerName = "Desconocido" } Write-Host "Nombre del fabricante OEM: $oemManufacturerName" } captura { Write-Warning "No se encuentra o no se puede acceder a la clave del Registro OEMManufacturerName" $oemManufacturerName = $null Write-Host "Nombre del fabricante OEM: no disponible" }
# 10. OEMModelSystemFamily # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $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á vacío" $oemModelSystemFamily = "Desconocido" } Write-Host "Familia de modelos OEM: $oemModelSystemFamily" } captura { Write-Warning "NO se encuentra o no se puede acceder a la clave del registro OEMModelSystemFamily" $oemModelSystemFamily = $null Write-Host "Familia de modelos oem: no disponible" }
# 11. OEMModelNumber # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $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á vacío" $oemModelNumber = "Desconocido" } Write-Host "Número de modelo oem: $oemModelNumber" } captura { Write-Warning "NO se encuentra o no se puede acceder a la clave del registro OEMModelNumber" $oemModelNumber = $null Write-Host "Número de modelo OEM: no disponible" }
# 12. FirmwareVersion # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $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á vacío" $firmwareVersion = "Desconocido" } Write-Host "Versión de firmware: $firmwareVersion" } captura { Write-Warning "No se encuentra o no se puede acceder a la clave del Registro firmwareVersion" $firmwareVersion = $null Write-Host "Versión de firmware: no disponible" }
# 13. FirmwareReleaseDate # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $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á vacío" $firmwareReleaseDate = "Desconocido" } Write-Host "Fecha de lanzamiento del firmware: $firmwareReleaseDate" } captura { Write-Warning "No se encuentra o no se puede acceder a la clave del Registro FirmwareReleaseDate" $firmwareReleaseDate = $null Write-Host "Fecha de lanzamiento del firmware: no disponible" }
# 14. OSArchitecture # Versión PS: Todo | Administración: No | Requisitos del sistema: Ninguno prueba { $osArchitecture = $env:PROCESSOR_ARCHITECTURE if ([string]::IsNullOrEmpty($osArchitecture)) { # Prueba la reserva del Registro $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop $osArchitecture = $regValue.OSArchitecture } if ([string]::IsNullOrEmpty($osArchitecture)) { Write-Warning "No se pudo determinar la OSArchitecture" $osArchitecture = "Desconocido" } Write-Host "Arquitectura del SO: $osArchitecture" } captura { Write-Warning "Error al recuperar OSArchitecture: $_" $osArchitecture = "Desconocido" Write-Host "Arquitectura del SO: $osArchitecture" }
# 15. CanAttemptUpdateAfter (FILETIME) # Versión PS: Todo | Administración: puede ser necesario | Requisitos del sistema: Ninguno prueba { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter # Convertir FILETIME a DateTime si es un número válido if ($null -ne $canAttemptUpdateAfter -and $canAttemptUpdateAfter -is [long]) { prueba { $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter) } captura { Write-Warning "No se pudo convertir CanAttemptUpdateAfter FILETIME a DateTime" } } Write-Host "Puede intentar actualizar después de: $canAttemptUpdateAfter" } captura { Write-Warning "CanAttemptUpdateAfter clave del registro no encontrada o inaccesible" $canAttemptUpdateAfter = $null Write-Host "Puede intentar actualizar después de: no disponible" }
# Event Logs: System Log (5 values)
# 16-20. Event Log queries # Versión PS: 3.0+ | Administración: puede ser necesario para el registro del sistema | Requisitos del sistema: Ninguno prueba { $allEventIds = @(1801, 1808) $events = @(Get-WinEvent -FilterHashtable @{LogName='System'; ID=$allEventIds} -MaxEvents 20 -ErrorAction Stop)
if ($events.Count -eq 0) { Write-Warning "No se encontraron eventos de arranque seguro (1801/1808) en el registro del sistema" $latestEventId = $null $bucketId = $null $confidence = $null $event 1801Count = 0 $event 1808Count = 0 Write-Host "Id. de evento más reciente: no disponible" Write-Host "Id. del cubo: no disponible" Write-Host "Confianza: No disponible" Write-Host "Recuento de eventos 1801: 0" Write-Host "Recuento de eventos 1808: 0" } else { # 16. LatestEventId $latestEvent = $events | Sort-Object TimeCreated -Descending | Select-Object - Primeros 1 if ($null -eq $latestEvent) { Write-Warning "No se pudo determinar el evento más reciente" $latestEventId = $null Write-Host "Id. de evento más reciente: no disponible" } else { $latestEventId = $latestEvent.Id Write-Host "Id. de evento más reciente: $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. del cubo: $bucketId" } else { Write-Warning "BucketId no se encuentra en el mensaje de evento" $bucketId = $null Write-Host "Id. del cubo: no se encuentra en el evento" } } else { Write-Warning "El último evento o mensaje es nulo, no se puede extraer BucketId" $bucketId = $null Write-Host "Id. del cubo: no disponible" }
# 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 "Confianza: $confidence" } else { Write-Warning "Nivel de confianza no se encuentra en el mensaje de evento" $confidence = $null Write-Host "Confianza: No se encuentra en el evento" } } else { Write-Warning "El último evento o mensaje es nulo, no se puede extraer la confianza" $confidence = $null Write-Host "Confidence: Not Available" }
# 19. Event1801Count $event 1801Array = @($events | Where-Object {$_. Id -eq 1801}) $event 1801Count = $event 1801Array.Count Write-Host "Recuento de eventos 1801: $event 1801Count"
# 20. Event1808Count $event 1808Array = @($events | Where-Object {$_. Id -eq 1808}) $event 1808Count = $event 1808Array.Count Write-Host "Recuento de eventos 1808: $event 1808Count" } } captura { Write-Warning "Error al recuperar registros de eventos. Puede requerir privilegios de administrador: $_" $latestEventId = $null $bucketId = $null $confidence = $null $event 1801Count = 0 $event 1808Count = 0 Write-Host "Id. de evento más reciente: error" Write-Host "Bucket ID: Error" Write-Host "Confianza: Error" Write-Host "Recuento de eventos 1801: 0" Write-Host "Recuento del evento 1808: 0" }
# WMI/CIM Queries (4 values)
# 21. OSVersion # Versión PS: 3.0+ (use Get-WmiObject para 2.0) | Administración: No | Requisitos del sistema: Ninguno prueba { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop if ($null -eq $osInfo -o [string]::IsNullOrEmpty($osInfo.Version)) { Write-Warning "No se pudo recuperar la versión del SO" $osVersion = "Desconocido" } else { $osVersion = $osInfo.Version } Write-Host "Versión del SO: $osVersion" } captura { Write-Warning "Error al recuperar la versión del sistema operativo: $_" $osVersion = "Desconocido" Write-Host "Versión del SO: $osVersion" }
# 22. LastBootTime # Versión PS: 3.0+ (use Get-WmiObject para 2.0) | Administración: No | Requisitos del sistema: Ninguno prueba { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop if ($null -eq $osInfo -o $null -eq $osInfo.LastBootUpTime) { Write-Warning "No se pudo recuperar el último tiempo de arranque" $lastBootTime = $null Write-Host "Hora del último arranque: no disponible" } else { $lastBootTime = $osInfo.LastBootUpTime Write-Host "Hora del último arranque: $lastBootTime" } } captura { Write-Warning "Error al recuperar el último tiempo de arranque: $_" $lastBootTime = $null Write-Host "Hora del último arranque: no disponible" }
# 23. BaseBoardManufacturer # Versión PS: 3.0+ (use Get-WmiObject para 2.0) | Administración: No | Requisitos del sistema: Ninguno prueba { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) { Write-Warning "No se pudo recuperar el fabricante de la base" $baseBoardManufacturer = "Desconocido" } else { $baseBoardManufacturer = $baseBoard.Manufacturer } Write-Host "Fabricante de placa base: $baseBoardManufacturer" } captura { Write-Warning "Error al recuperar el fabricante de la placa base: $_" $baseBoardManufacturer = "Desconocido" Write-Host "Fabricante de placa base: $baseBoardManufacturer" }
# 24. BaseBoardProduct # Versión PS: 3.0+ (use Get-WmiObject para 2.0) | Administración: No | Requisitos del sistema: Ninguno prueba { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop if ($null -eq $baseBoard -o [string]::IsNullOrEmpty($baseBoard.Product)) { Write-Warning "No se pudo recuperar el producto de la base" $baseBoardProduct = "Desconocido" } else { $baseBoardProduct = $baseBoard.Product } Write-Host "Producto de placa base: $baseBoardProduct" } captura { Write-Warning "Error al recuperar el producto de placa base: $_" $baseBoardProduct = "Desconocido" Write-Host "Producto de placa base: $baseBoardProduct"}