Применяется к
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

Исходная дата публикации: 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"}

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.