Исходная дата публикации: 17 ноября 2025 г.
Идентификатор базы знаний: 5072718
Пример сценария сбора данных инвентаризации безопасной загрузки
Скопируйте и вставьте этот пример скрипта и измените его при необходимости для своей среды: пример сценария сбора данных инвентаризации безопасной загрузки.
Sample_Secure_Boot_Inventory_Data_Collection_script
# 1. HostName # Версия PS: Все | Администратор: Нет | Требования к системе: нет try { $hostname = $env:COMPUTERNAME if ([string]::IsNullOrEmpty($hostname)) { Write-Warning "Не удалось определить имя узла" $hostname = "Unknown" } Write-Host "Имя узла: $hostname" } catch { Write-Warning "Ошибка при получении имени узла: $_" $hostname = "Ошибка" Write-Host "Имя узла: $hostname" }
# 2. CollectionTime # Версия PS: Все | Администратор: Нет | Требования к системе: нет try { $collectionTime = Get-Date if ($null -eq $collectionTime) { Write-Warning "Не удалось получить текущую дату и время" $collectionTime = "Unknown" } Write-Host "Время сбора: $collectionTime" } catch { Write-Warning "Ошибка получения даты и времени: $_" $collectionTime = "Error" Write-Host "Время сбора: $collectionTime" }
# Registry: Secure Boot Main Key (3 values)
# 3. SecureBootEnabled # PS Version: 3.0+ | Администратор: может потребоваться | Требования к системе: система с поддержкой UEFI и безопасной загрузки try { $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop Write-Host "Безопасная загрузка включена: $secureBootEnabled" } catch { Write-Warning "Не удается определить состояние безопасной загрузки с помощью командлета: $_" # Попробуйте резервный реестр try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled Write-Host "Безопасная загрузка включена: $secureBootEnabled" } catch { Write-Warning "Не удается определить состояние безопасной загрузки с помощью реестра. Система может не поддерживать UEFI и безопасную загрузку". $secureBootEnabled = $null Write-Host "Безопасная загрузка включена: недоступна" } }
# 4. HighConfidenceOptOut # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop $highConfidenceOptOut = $regValue.HighConfidenceOptOut Write-Host "Отказ с высокой достоверностью: $highConfidenceOptOut" } catch { Write-Warning "Раздел реестра HighConfidenceOptOut не найден или недоступен" $highConfidenceOptOut = $null Write-Host "Отказ с высокой достоверностью: недоступно" }
# 5. AvailableUpdates # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop $availableUpdates = $regValue.AvailableUpdates if ($null -ne $availableUpdates) { # Преобразование в шестнадцатеричный формат $availableUpdatesHex = "0x{0:X}" -f $availableUpdates Write-Host "Доступные Обновления: $availableUpdatesHex" } else { Write-Host "Доступное Обновления: недоступно" } } catch { Write-Warning "AvailableUpdates раздел реестра не найден или недоступен" $availableUpdates = $null Write-Host "Доступное Обновления: недоступно" }
# Registry: Servicing Key (3 values)
# 6. UEFICA2023Status # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop $uefica 2023Status = $regValue.UEFICA2023Status Write-Host "Состояние UEFI CA 2023: $uefica 2023Status" } catch { Write-Warning "Раздел реестра UEFICA2023Status не найден или недоступен" $uefica 2023Status = $null Write-Host "Состояние UEFI CA 2023: недоступно" }
# 7. UEFICA2023Capable # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Able -ErrorAction Stop $uefica 2023Capable = $regValue.UEFICA2023Capable Write-Host "UEFI CA 2023 Capable: $uefica 2023Capable" } catch { Write-Warning "UEFICA2023Мечаемый раздел реестра не найден или недоступен" $uefica 2023Able = $null Write-Host "UEFI CA 2023 Capable: Not Available" }
# 8. UEFICA2023Error # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop $uefica 2023Error = $regValue.UEFICA2023Error Write-Host "Ошибка UEFI CA 2023: $uefica 2023Error" } catch { Write-Warning "UEFICA2023Сервер реестра не найден или недоступен" $uefica 2023Error = $null Write-Host "Ошибка UEFI CA 2023: недоступно" }
# Registry: Device Attributes (7 values)
# 9. OEMManufacturerName # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop $oemManufacturerName = $regValue.OEMManufacturerName if ([string]::IsNullOrEmpty($oemManufacturerName)) { Write-Warning "OEMManufacturerName является пустым" $oemManufacturerName = "Unknown" } Write-Host "Имя изготовителя oem: $oemManufacturerName" } catch { Write-Warning "КЛЮЧ реестра OEMManufacturerName не найден или недоступен" $oemManufacturerName = $null Write-Host "Имя изготовителя oem: недоступно" }
# 10. OEMModelSystemFamily # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop $oemModelSystemFamily = $regValue.OEMModelSystemFamily if ([string]::IsNullOrEmpty($oemModelSystemFamily)) { Write-Warning "OEMModelSystemFamily пусто" $oemModelSystemFamily = "Unknown" } Write-Host "Семейство систем моделей OEM: $oemModelSystemFamily" } catch { Write-Warning "РАЗДЕЛ реестра OEMModelSystemFamily не найден или недоступен" $oemModelSystemFamily = $null Write-Host "Семейство систем моделей oem: недоступно" }
# 11. OEMModelNumber # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $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 = "Unknown" } Write-Host "Номер модели OEM: $oemModelNumber" } catch { Write-Warning "Раздел реестра OEMModelNumber не найден или недоступен" $oemModelNumber = $null Write-Host "Номер модели OEM: недоступно" }
# 12. FirmwareVersion # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $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 = "Unknown" } Write-Host "Версия встроенного ПО: $firmwareVersion" } catch { Write-Warning "Раздел реестра FirmwareVersion не найден или недоступен" $firmwareVersion = $null Write-Host "Версия встроенного ПО: недоступна" }
# 13. FirmwareReleaseDate # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $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 = "Unknown" } Write-Host "Дата выпуска встроенного ПО: $firmwareReleaseDate" } catch { Write-Warning "FirmwareReleaseDate раздел реестра не найден или недоступен" $firmwareReleaseDate = $null Write-Host "Дата выпуска встроенного ПО: недоступно" }
# 14. OSArchitecture # Версия PS: Все | Администратор: Нет | Требования к системе: нет try { $osArchitecture = $env:PROCESSOR_ARCHITECTURE if ([string]::IsNullOrEmpty($osArchitecture)) { # Попробуйте резервный реестр $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop $osArchitecture = $regValue.OSArchitecture } if ([string]::IsNullOrEmpty($osArchitecture)) { Write-Warning "Не удалось определить OSArchitecture" $osArchitecture = "Unknown" } Write-Host "Архитектура ОС: $osArchitecture" } catch { Write-Warning "Ошибка при получении OSArchitecture: $_" $osArchitecture = "Unknown" Write-Host "Архитектура ОС: $osArchitecture" }
# 15. CanAttemptUpdateAfter (FILETIME) # Версия PS: Все | Администратор: может потребоваться | Требования к системе: нет try { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter # Преобразование FILETIME в DateTime, если это допустимое число if ($null -ne $canAttemptUpdateAfter -and $canAttemptUpdateAfter -is [long]) { try { $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter) } catch { Write-Warning "Не удалось преобразовать CanAttemptUpdateAfter FILETIME в DateTime" } } Write-Host "Можно выполнить попытку обновления после: $canAttemptUpdateAfter" } catch { Write-Warning "CanAttemptUpdateAfter раздел реестра не найден или недоступен" $canAttemptUpdateAfter = $null Write-Host "Можно выполнить попытку обновления после: недоступно" }
# Event Logs: System Log (5 values)
# 16-20. Event Log queries # PS Version: 3.0+ | Администратор: может потребоваться для системного журнала | Требования к системе: нет try { $allEventIds = @(1801, 1808) $events = @(Get-WinEvent -FilterHashtable @{LogName='System'; ID=$allEventIds} -MaxEvents 20 -ErrorAction Stop)
if ($events.Count -eq 0) { Write-Warning "Нет событий безопасной загрузки (1801/1808) в системном журнале" $latestEventId = $null $bucketId = $null $confidence = $null $event 1801Count = 0 $event 1808Count = 0 Write-Host "Последнее событие: недоступно" Write-Host "Идентификатор контейнера: недоступно" Write-Host "Достоверность: недоступно" Write-Host "Число событий 1801: 0" Write-Host "Число событий 1808: 0" } else { # 16. LatestEventId $latestEvent = $events | Sort-Object TimeCreated -убывание | Select-Object -Первый 1 if ($null -eq $latestEvent) { Write-Warning "Не удалось определить последнее событие" $latestEventId = $null Write-Host "Последнее событие: недоступно" } else { $latestEventId = $latestEvent.Id Write-Host "Последнее событие: $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 "Идентификатор контейнера: $bucketId" } else { Write-Warning "BucketId не найден в сообщении о событии" $bucketId = $null Write-Host "Идентификатор контейнера: не найден в событии" } } else { Write-Warning "Последнее событие или сообщение имеет значение NULL, не удается извлечь BucketId" $bucketId = $null Write-Host "Идентификатор контейнера: недоступно" }
# 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 "Доверие: $confidence" } else { Write-Warning "Уровень достоверности не найден в сообщении о событии" $confidence = $null Write-Host "Достоверность: не найдена в событии" } } else { Write-Warning "Последнее событие или сообщение имеет значение NULL, не удается извлечь достоверность" $confidence = $null Write-Host "Достоверность: недоступно" }
# 19. Event1801Count $event 1801Array = @($events | Where-Object {$_. Id -eq 1801}) $event 1801Count = $event 1801Array.Count Write-Host "Число событий 1801: $event 1801Count"
# 20. Event1808Count $event 1808Array = @($events | Where-Object {$_. Id -eq 1808}) $event 1808Count = $event 1808Array.Count Write-Host "Число событий 1808: $event 1808Count" } } catch { Write-Warning "Ошибка получения журналов событий. Могут потребоваться права администратора: $_" $latestEventId = $null $bucketId = $null $confidence = $null $event 1801Count = 0 $event 1808Count = 0 Write-Host "Последнее событие: ошибка" Write-Host "Идентификатор контейнера: ошибка" Write-Host "Достоверность: ошибка" Write-Host "Число событий 1801: 0" Write-Host "Число событий 1808: 0" }
# WMI/CIM Queries (4 values)
# 21. OSVersion # ВЕРСИЯ PS: 3.0+ (используйте Get-WmiObject для версии 2.0) | Администратор: Нет | Требования к системе: нет try { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop if ($null -eq $osInfo -or [string]::IsNullOrEmpty($osInfo.Version)) { Write-Warning "Не удалось получить версию ОС" $osVersion = "Unknown" } else { $osVersion = $osInfo.Version } Write-Host "Версия ОС: $osVersion" } catch { Write-Warning "Ошибка при получении версии ОС: $_" $osVersion = "Unknown" Write-Host "Версия ОС: $osVersion" }
# 22. LastBootTime # ВЕРСИЯ PS: 3.0+ (используйте Get-WmiObject для версии 2.0) | Администратор: Нет | Требования к системе: нет try { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop if ($null -eq $osInfo -or $null -eq $osInfo.LastBootUpTime) { Write-Warning "Не удалось получить время последней загрузки" $lastBootTime = $null Write-Host "Время последней загрузки: недоступно" } else { $lastBootTime = $osInfo.LastBootUpTime Write-Host "Время последней загрузки: $lastBootTime" } } catch { Write-Warning "Ошибка при получении времени последней загрузки: $_" $lastBootTime = $null Write-Host "Время последней загрузки: недоступно" }
# 23. BaseBoardManufacturer # ВЕРСИЯ PS: 3.0+ (используйте Get-WmiObject для версии 2.0) | Администратор: Нет | Требования к системе: нет try { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) { Write-Warning "Не удалось получить изготовителя основной платы" $baseBoardManufacturer = "Unknown" } else { $baseBoardManufacturer = $baseBoard.Manufacturer } Write-Host "Изготовитель основной платы: $baseBoardManufacturer" } catch { Write-Warning "Ошибка получения изготовителя основной платы: $_" $baseBoardManufacturer = "Unknown" Write-Host "Изготовитель основной платы: $baseBoardManufacturer" }
# 24. BaseBoardProduct # ВЕРСИЯ PS: 3.0+ (используйте Get-WmiObject для версии 2.0) | Администратор: Нет | Требования к системе: нет try { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Product)) { Write-Warning "Не удалось получить продукт основной платы" $baseBoardProduct = "Unknown" } else { $baseBoardProduct = $baseBoard.Product } Write-Host "Продукт основной платы: $baseBoardProduct" } catch { Write-Warning "Ошибка получения продукта основной платы: $_" $baseBoardProduct = "Unknown" Write-Host "Продукт основной платы: $baseBoardProduct"}