Вихідна дата публікації: 17 листопада 2025 р.
Ідентифікатор KB: 5072718
Зразок сценарію збирання даних реєстру безпечного завантаження
Скопіюйте та вставте цей зразок сценарію та змініть його, якщо потрібно, для середовища: Зразок сценарію збирання даних реєстру безпечного завантаження.
Sample_Secure_Boot_Inventory_Data_Collection_script
# 1. HostName # ВЕРСІЯ PS: Всі | Admin: Ні | Вимоги до системи: немає спробуйте { $hostname = $env:ІМ'Я КОМП'ЮТЕРА якщо ([рядок]::IsNullOrEmpty($hostname)) { Write-Warning "Не вдалося визначити ім'я хоста" $hostname = "Невідомо" } (}) Write-Host "Ім'я хоста: $hostname" } зловити { Write-Warning "Помилка отримання імені хоста: $_" $hostname = "Помилка" Write-Host "Ім'я хоста: $hostname" }
# 2. CollectionTime # ВЕРСІЯ PS: Всі | Admin: Ні | Вимоги до системи: немає спробуйте { $collectionTime = Get-Date якщо ($null -eq $collectionTime) { Write-Warning "Не вдалося отримати поточну дату й час" $collectionTime = "Невідомо" } (}) Write-Host "Час збирання: $collectionTime" } зловити { Write-Warning "Помилка отримання дати й часу: $_" $collectionTime = "Помилка" Write-Host "Час збирання: $collectionTime" }
# Registry: Secure Boot Main Key (3 values)
# 3. SecureBootEnabled # ВЕРСІЯ PS: 3.0+ | Admin: може знадобитися | Системні вимоги: система з підтримкою UEFI/безпечного завантаження спробуйте { $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop Write-Host "Безпечне завантаження ввімкнуто: $secureBootEnabled" } зловити { Write-Warning "Не вдалося визначити стан безпечного завантаження за допомогою командлета: $_" # Спробуйте резервний реєстр спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled Write-Host "Безпечне завантаження ввімкнуто: $secureBootEnabled" } зловити { Write-Warning "Не вдалося визначити стан безпечного завантаження за допомогою реєстру. Система може не підтримувати UEFI/безпечне завантаження." $secureBootEnabled = $null Write-Host "Безпечне завантаження ввімкнуто: недоступно" } (}) }
# 4. HighConfidenceOptOut # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop $highConfidenceOptOut = $regValue.HighConfidenceOptOut Write-Host "Висока впевненість відмовитися: $highConfidenceOptOut" } зловити { Write-Warning "Розділ реєстру HighConfidenceOptOut не знайдено або недоступний" $highConfidenceOptOut = $null Write-Host "Висока впевненість відмовитися: недоступно" }
# 5. AvailableUpdates # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop $availableUpdates = $regValue.AvailableUpdates якщо ($null -ne $availableUpdates) { # Перетворити на шістнадцятковий формат $availableUpdatesHex = "0x{0:X}" -f $availableUpdates Write-Host "Доступні Оновлення: $availableUpdatesHex" } інакше { Write-Host "Доступний Оновлення: недоступно" } (}) } зловити { Write-Warning "Розділ реєстру AvailableUpdates не знайдено або недоступний" $availableUpdates = $null Write-Host "Доступний Оновлення: недоступний" }
# Registry: Servicing Key (3 values)
# 6. UEFICA2023Status # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop $uefica 2023Status = $regValue.UEFICA2023Status Write-Host "Стан UEFI CA 2023: $uefica 2023Status" } зловити { Write-Warning "Розділ реєстру UEFICA2023Status не знайдено або недоступний" $uefica 2023Status = $null Write-Host "Стан UEFI CA 2023: недоступний" }
# 7. UEFICA2023Capable # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Capable -ErrorAction Stop $uefica 2023Capable = $regValue.UEFICA2023Capable Write-Host "UEFI CA 2023 Здатний: $uefica 2023Capable" } зловити { Write-Warning "Розділ реєстру UEFICA2023Capable не знайдено або недоступний" $uefica 2023Capable = $null Write-Host "UEFI CA 2023 здатний: недоступний" }
# 8. UEFICA2023Error # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop $uefica 2023Error = $regValue.UEFICA2023Error Write-Host "Помилка UEFI CA 2023: $uefica 2023Помилка" } зловити { Write-Warning "Розділ реєстру UEFICA2023Error не знайдено або недоступний" $uefica 2023Помилка = $null Write-Host "Помилка UEFI CA 2023: недоступно" }
# Registry: Device Attributes (7 values)
# 9. OEMManufacturerName # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop $oemManufacturerName = $regValue.OEMManufacturerName якщо ([рядок]::IsNullOrEmpty($oemManufacturerName)) { Write-Warning "OEMManufacturerName пусте" $oemManufacturerName = "Невідомо" } (}) Write-Host "Назва виробника оригінального обладнання: $oemManufacturerName" } зловити { Write-Warning "Розділ реєстру OEMManufacturerName не знайдено або недоступний" $oemManufacturerName = $null Write-Host "Назва виробника оригінального обладнання: недоступний" }
# 10. OEMModelSystemFamily # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop $oemModelSystemFamily = $regValue.OEMModelSystemFamily якщо ([рядок]::IsNullOrEmpty($oemModelSystemFamily)) { Write-Warning "OEMModelSystemFamily пустий" $oemModelSystemFamily = "Невідомо" } (}) Write-Host "Сімейство системи моделі OEM: $oemModelSystemFamily" } зловити { Write-Warning "Розділ реєстру OEMModelSystemFamily не знайдено або недоступний" $oemModelSystemFamily = $null Write-Host "Сімейство системи моделі OEM: недоступно" }
# 11. OEMModelNumber # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop $oemModelNumber = $regValue.OEMModelNumber якщо ([рядок]::IsNullOrEmpty($oemModelNumber)) { Write-Warning "OEMModelNumber пустий" $oemModelNumber = "Невідомо" } (}) Write-Host "Номер моделі OEM: $oemModelNumber" } зловити { Write-Warning "Розділ реєстру OEMModelNumber не знайдено або недоступний" $oemModelNumber = $null Write-Host "Номер моделі OEM: недоступно" }
# 12. FirmwareVersion # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop $firmwareVersion = $regValue.FirmwareVersion якщо ([рядок]::IsNullOrEmpty($firmwareVersion)) { Write-Warning "FirmwareVersion пустий" $firmwareVersion = "Невідомо" } (}) Write-Host "Версія мікропрограми: $firmwareVersion" } зловити { Write-Warning "Розділ реєстру FirmwareVersion не знайдено або недоступний" $firmwareVersion = $null Write-Host "Версія мікропрограми: недоступна" }
# 13. FirmwareReleaseDate # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop $firmwareReleaseDate = $regValue.FirmwareReleaseDate якщо ([рядок]::IsNullOrEmpty($firmwareReleaseDate)) { Write-Warning "FirmwareReleaseDate пустий" $firmwareReleaseDate = "Невідомо" } (}) Write-Host "Дата випуску мікропрограми: $firmwareReleaseDate" } зловити { Write-Warning "Розділ реєстру FirmwareReleaseDate не знайдено або недоступний" $firmwareReleaseDate = $null Write-Host "Дата випуску мікропрограми: недоступний" }
# 14. OSArchitecture # ВЕРСІЯ PS: Всі | Admin: Ні | Вимоги до системи: немає спробуйте { $osArchitecture = $env:PROCESSOR_ARCHITECTURE якщо ([рядок]::IsNullOrEmpty($osArchitecture)) { # Спробуйте резервний реєстр $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop $osArchitecture = $regValue.OSArchitecture } (}) якщо ([рядок]::IsNullOrEmpty($osArchitecture)) { Write-Warning "Не вдалося визначити параметр OSArchitecture" $osArchitecture = "Невідомо" } (}) Write-Host "Архітектура ОС: $osArchitecture" } зловити { Write-Warning "Помилка отриманняархівації ОС: $_" $osArchitecture = "Невідомо" Write-Host "Архітектура ОС: $osArchitecture" }
# 15. CanAttemptUpdateAfter (FILETIME) # ВЕРСІЯ PS: Всі | Admin: може знадобитися | Вимоги до системи: немає спробуйте { $regValue = Get-ItemProperty -шлях "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter # Перетворити FILETIME на dateTime, якщо це припустиме число якщо ($null -ne $canAttemptUpdateAfter -і $canAttemptUpdateAfter -is [long]) { спробуйте { $canAttemptUpdateAfter = [Дата й час]::FromFileTime($canAttemptUpdateAfter) } зловити { Write-Warning "Не вдалося перетворити CanAttemptUpdateAfter FILETIME на DateTime" } (}) } (}) Write-Host "Може спробувати оновити після: $canAttemptUpdateAfter" } зловити { Write-Warning "CanAttemptUpdateAfter registry key not found or inaccessible" $canAttemptUpdateAfter = $null Write-Host "Може спробувати оновити після: недоступний" }
# Event Logs: System Log (5 values)
# 16-20. Event Log queries # ВЕРСІЯ PS: 3.0+ | Admin: може знадобитися для системного журналу | Вимоги до системи: немає спробуйте { $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 Count: 0" Write-Host "Подія 1808 Count: 0" } інакше { # 16. LatestEventId (Найновіший ідентифікатор) $latestEvent = $events | Sort-Object час, створений за спаданням | Select-Object –перший 1 якщо ($null -eq $latestEvent) { Write-Warning "Не вдалося визначити останню подію" $latestEventId = $null Write-Host "Найновіший ідентифікатор події: недоступно" } інакше { $latestEventId = $latestEvent.Id Write-Host "Найновіший ідентифікатор події: $latestEventId" }
# 17. BucketID - Extracted from Event 1801/1808 якщо ($null -ne $latestEvent -and $null -ne $latestEvent.Message) { якщо ($latestEvent.Message -match 'BucketId:\s*(.+)') { $bucketId = $matches[1]. Trim() Write-Host "Код сегмента: $bucketId" } інакше { Write-Warning "Код bucketId не знайдено в повідомленні про подію" $bucketId = $null Write-Host "Код сегмента: не знайдено у події" } (}) } інакше { Write-Warning "Остання подія або повідомлення має null-значення, не вдалося видобути BucketId" $bucketId = $null Write-Host "Код сегмента: недоступний" }
# 18. Confidence - Extracted from Event 1801/1808 якщо ($null -ne $latestEvent -and $null -ne $latestEvent.Message) { якщо ($latestEvent.Message -match 'BucketConfidenceLevel:\s*(.+)') { $confidence = $matches[1]. Trim() Write-Host "Впевненість: $confidence" } інакше { Write-Warning "У повідомленні про подію не знайдено довірчий рівень" $confidence = $null Write-Host "Впевненість: не знайдено у події" } (}) } інакше { 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" } (}) } зловити { Write-Warning "Помилка отримання журналів подій. Може вимагати права адміністратора: $_" $latestEventId = $null $bucketId = $null $confidence = $null $event 1801Count = 0 $event 1808Count = 0 Write-Host "Найновіший ідентифікатор події: помилка" Write-Host "Код сегмента: помилка" Write-Host "Впевненість: помилка" Write-Host "Подія 1801 Count: 0" Write-Host "Подія 1808 Count: 0" }
# WMI/CIM Queries (4 values)
# 21. OSVersion # ВЕРСІЯ PS: 3.0+ (використовуйте Get-WmiObject для 2.0) | Admin: Ні | Вимоги до системи: немає спробуйте { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop якщо ($null -eq $osInfo -або [рядок]::IsNullOrEmpty($osInfo.Version)) { Write-Warning "Не вдалося отримати версію ОС" $osVersion = "Невідомо" } інакше { $osVersion = $osInfo.Version } (}) Write-Host "Версія ОС: $osVersion" } зловити { Write-Warning "Помилка отримання версії ОС: $_" $osVersion = "Невідомо" Write-Host "Версія ОС: $osVersion" }
# 22. LastBootTime # ВЕРСІЯ PS: 3.0+ (використовуйте Get-WmiObject для 2.0) | Admin: Ні | Вимоги до системи: немає спробуйте { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop якщо ($null -eq $osInfo -або $null -eq $osInfo.LastBootUpTime) { Write-Warning "Не вдалося отримати час останнього завантаження" $lastBootTime = $null Write-Host "Час останнього завантаження: недоступний" } інакше { $lastBootTime = $osInfo.LastBootUpTime Write-Host "Час останнього завантаження: $lastBootTime" } (}) } зловити { Write-Warning "Помилка отримання часу останнього завантаження: $_" $lastBootTime = $null Write-Host "Час останнього завантаження: недоступний" }
# 23. BaseBoardManufacturer # ВЕРСІЯ PS: 3.0+ (використовуйте Get-WmiObject для 2.0) | Admin: Ні | Вимоги до системи: немає спробуйте { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop якщо ($null -eq $baseBoard -або [рядок]::IsNullOrEmpty($baseBoard.Manufacturer)) { Write-Warning "Не вдалося отримати виробника базової плати" $baseBoardManufacturer = "Невідомо" } інакше { $baseBoardManufacturer = $baseBoard.Manufacturer } (}) Write-Host "Виробник базової плати: $baseBoardManufacturer" } зловити { Write-Warning "Помилка отримання базового виробника: $_" $baseBoardManufacturer = "Невідомо" Write-Host "Виробник базової плати: $baseBoardManufacturer" }
# 24. BaseBoardProduct # ВЕРСІЯ PS: 3.0+ (використовуйте Get-WmiObject для 2.0) | Admin: Ні | Вимоги до системи: немає спробуйте { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop якщо ($null -eq $baseBoard -або [рядок]::IsNullOrEmpty($baseBoard.Product)) { Write-Warning "Не вдалося отримати базовий продукт" $baseBoardProduct = "Невідомо" } інакше { $baseBoardProduct = $baseBoard.Product } (}) Write-Host "Базовий продукт: $baseBoardProduct" } зловити { Write-Warning "Помилка отримання базового продукту: $_" $baseBoardProduct = "Невідомо" Write-Host "Базовий продукт: $baseBoardProduct"}