原始出版日期: 2025年11月17日
KB ID:5072718
安全啟動庫存資料收集腳本範例
複製貼上此範例腳本,並依照您的環境進行修改:Sample Secure Boot Inventory Data Collection 腳本。
Sample_Secure_Boot_Inventory_Data_Collection_script
# 1. HostName # PS 版本:全部 |管理員:不 |系統需求:無 試試看 { $hostname = $env:COMPUTERNAME 如果 ([string]::IsNullOrEmpty ($hostname) ) { Write-Warning「主機名稱無法確定」 $hostname = 「未知」 } Write-Host「主機名稱:$hostname」 } 抓 { Write-Warning 「錯誤取得主機名稱:$_」 $hostname = 「錯誤」 Write-Host 「主機名稱:$hostname」 }
# 2. CollectionTime # PS 版本:全部 |管理員:不 |系統需求:無 試試看 { $collectionTime = 取得日期 若 ($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+ |管理員:可能需要 |系統需求:支援 UEFI/安全開機的系統 試試看 { $secureBootEnabled = Confirm-SecureBootUEFI -錯誤行動停止 Write-Host「啟用安全開機:$secureBootEnabled」 } 抓 { Write-Warning「無法透過 cmdlet 判斷安全開機狀態:$_」 # 試試登記後備 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\State」 -名稱 UEFISecureBootEnabled -ErrorAction 停止 $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled Write-Host「安全開機啟用:$secureBootEnabled」 } 抓 { Write-Warning「無法透過登錄檔判斷安全開機狀態。 系統可能不支援 UEFI/安全開機。」 $secureBootEnabled = $null Write-Host「安全開機啟用:不可用」 } }
# 4. HighConfidenceOptOut # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot」-名稱 HighConfidenceOptOut -ErrorAction 停止 $highConfidenceOptOut = $regValue.HighConfidenceOptOut Write-Host「高信心選擇退出:$highConfidenceOptOut」 } 抓 { Write-Warning 「HighConfidenceOptOut 登錄金鑰未找到或無法存取」 $highConfidenceOptOut = $null Write-Host「高信心選擇退出:不可用」 }
# 5. AvailableUpdates # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot」-Name AvailableUpdates -ErrorAction 停止 $availableUpdates = $regValue.可用更新 如果 ($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 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\Servicing」 -名稱 UEFICA2023Status -ErrorAction 停止 $uefica 2023Status = $regValue.UEFICA2023Status Write-Host 「UEFI CA 2023 狀態:$uefica 2023 狀態」 } 抓 { Write-Warning「UEFICA2023狀態登錄檔金鑰未找到或無法存取」 $uefica 2023年狀態 = $null Write-Host 「UEFI CA 2023 狀態:不可用」 }
# 7. UEFICA2023Capable # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\Servicing」 -名稱 UEFICA2023Capable -ErrorAction 停止 $uefica 2023Capable = $regValue.UEFICA2023Capable Write-Host 「UEFI CA 2023 支援:$uefica 2023 支援」 } 抓 { Write-Warning 「UEFICA2023Capable 登錄檔金鑰未找到或無法存取」 $uefica 2023 能力 = $null Write-Host 「UEFI CA 2023 支援:不可用」 }
# 8. UEFICA2023Error # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\Servicing」 -名稱 UEFICA2023Error -ErrorAction 停止 $uefica 2023Error = $regValue.UEFICA2023Error Write-Host 「UEFI CA 2023 錯誤:$uefica 2023Error」 } 抓 { Write-Warning「UEFICA2023 錯誤登錄檔金鑰未找到或無法存取」 $uefica 2023Error = $null Write-Host「UEFI CA 2023 錯誤:不可用」 }
# Registry: Device Attributes (7 values)
# 9. OEMManufacturerName # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑 “HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\DeviceAttributes” -Name OEMManufacturerName -ErrorAction 停止 $oemManufacturerName = $regValue.OEMManufacturerName 如果 ([string]::IsNullOrEmpty ($oemManufacturerName) ) { Write-Warning 「OEMManufacturerName 是空的」 $oemManufacturerName = 「未知」 } Write-Host 「原廠製造商名稱:$oemManufacturerName」 } 抓 { Write-Warning 「OEMManufacturerName 登錄檔金鑰未找到或無法存取」 $oemManufacturerName = $null Write-Host 「原廠製造商名稱:無法取得」 }
# 10. OEMModelSystemFamily # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑 “HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\DeviceAttributes” -名稱 OEMModelSystemFamily -ErrorAction 停止 $oemModelSystemFamily = $regValue.OEMModelSystemFamily 如果 ([string]::IsNullOrEmpty ($oemModelSystemFamily) ) { Write-Warning 「OEMModelSystemFamily 是空的」 $oemModelSystemFamily = 「未知」 } Write-Host 「OEM 型號系統家族:$oemModelSystemFamily」 } 抓 { Write-Warning 「OEMModelSystemFamily 登錄金鑰未找到或無法存取」 $oemModelSystemFamily = $null Write-Host 「OEM 系統系列:無法取得」 }
# 11. OEMModelNumber # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\DeviceAttributes」 -名稱 OEMModelNumber -ErrorAction 停止 $oemModelNumber = $regValue.OEMModelNumber 如果 ([string]::IsNullOrEmpty ($oemModelNumber) ) { Write-Warning「OEMModelNumber 是空的」 $oemModelNumber = 「未知」 } Write-Host 「原廠型號:$oemModelNumber」 } 抓 { Write-Warning 「OEMModelNumber 登錄金鑰未找到或無法存取」 $oemModelNumber = $null Write-Host 「原廠型號:無法取得」 }
# 12. FirmwareVersion # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\DeviceAttributes」-名稱 FirmwareVersion -ErrorAction 停止 $firmwareVersion = $regValue.FirmwareVersion 如果 ([string]::IsNullOrEmpty ($firmwareVersion) ) { Write-Warning「韌體版本為空」 $firmwareVersion = 「未知」 } Write-Host 「韌體版本:$firmwareVersion」 } 抓 { Write-Warning「找不到或無法存取韌體版本登錄鍵」 $firmwareVersion = $null Write-Host 「韌體版本:無法使用」 }
# 13. FirmwareReleaseDate # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes」 -Name FirmwareReleaseDate -ErrorAction 停止 $firmwareReleaseDate = $regValue.FirmwareReleaseDate 如果 ([string]::IsNullOrEmpty ($firmwareReleaseDate) ) { Write-Warning「韌體發布日期為空」 $firmwareReleaseDate = 「未知」 } Write-Host 「韌體發行日期:$firmwareReleaseDate」 } 抓 { Write-Warning 「FirmwareReleaseDate 登錄金鑰未找到或無法存取」 $firmwareReleaseDate = $null Write-Host 「韌體發行日期:無法取得」 }
# 14. OSArchitecture # PS 版本:全部 |管理員:不 |系統需求:無 試試看 { $osArchitecture = $env:PROCESSOR_ARCHITECTURE 如果 ([string]::IsNullOrEmpty ($osArchitecture) ) { # 試試登記後備 $regValue = Get-ItemProperty -路徑「HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\DeviceAttributes」-名稱 OSArchitecture -ErrorAction 停止 $osArchitecture = $regValue.OSArchitecture } 如果 ([string]::IsNullOrEmpty ($osArchitecture) ) { Write-Warning 「OSArchitecture無法確定」 $osArchitecture = 「未知」 } Write-Host 「作業系統架構:$osArchitecture」 } 抓 { Write-Warning 「錯誤取回 OSArchitecture: $_」 $osArchitecture = 「未知」 Write-Host 「作業系統架構:$osArchitecture」 }
# 15. CanAttemptUpdateAfter (FILETIME) # PS 版本:全部 |管理員:可能需要 |系統需求:無 試試看 { $regValue = Get-ItemProperty -路徑 “HKLM:\SYSTEM\CurrentControlSet\Control\Control\SecureBoot\DeviceAttributes” -Name CanAttemptUpdateafter -ErrorAction 停止 $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter # 如果 FILETIME 是有效號碼,請將 FILETIME 轉換成 DateTime。 若 ($null -ne $canAttemptUpdateAfter -且 $canAttemptUpdateAfter -是 [long]) { 試試看 { $canAttemptUpdateAfter = [DateTime]::FromFileTime ($canAttemptUpdateAfter) } 抓 { Write-Warning 「無法將 CanAttemptUpdateAfter FILETIME 轉換為 DateTime」 } } Write-Host「可嘗試更新:$canAttemptUpdateAfter」 } 抓 { Write-Warning 「CanAttemptUpdateAfter 登錄檔金鑰未找到或無法存取」 $canAttemptUpdateAfter = $null Write-Host「可嘗試更新:無法使用」 }
# Event Logs: System Log (5 values)
# 16-20. Event Log queries # PS版本:3.0+ |管理員:可能需要用於系統日誌 |系統需求:無 試試看 { $allEventIds = @ (1801, 1808) $events = @ (Get-WinEvent -FilterHashtable @{LogName='System';ID=$allEventIds} -MaxEvents 20 -ErrorAction 停止)
if ($events.Count -eq 0) { Write-Warning「系統日誌中 (1801/1808) 無安全開機事件」 $latestEventId = $null $bucketId = $null $confidence = $null $event 1801 計數 = 0 $event 1808年計數 = 0 Write-Host「最新事件ID:無法取得」 Write-Host 「桶 ID:不可用」 Write-Host 「信心:不可得」 Write-Host 「事件1801 計數:0」 Write-Host 「事件1808 計數:0」 } 否則 { # 16. 最新事件ID $latestEvent = $events |Sort-Object 時間創造 -下降 |Select-Object -第一位 若 ($null -eq $latestEvent) { Write-Warning「無法確定最新事件」 $latestEventId = $null Write-Host 「最新事件 ID:無法取得」 } 否則 { $latestEventId = $latestEvent.Id Write-Host「最新事件ID:$latestEventId」 }
# 17. BucketID - Extracted from Event 1801/1808 如果 ($null -ne $latestEvent -且 $null -ne $latestEvent.訊息) { 如果 ($latestEvent.Message -match 'BucketId:\s* (.+) ') { $bucketId = $matches[1]。修剪 () Write-Host「桶ID:$bucketId」 } 否則 { Write-Warning「事件訊息中找不到 BucketId」 $bucketId = $null Write-Host 「桶 ID:事件中找不到」 } } 否則 { Write-Warning「最新事件或訊息為空,無法擷取 BucketId」 $bucketId = $null Write-Host 「桶 ID:無法使用」 }
# 18. Confidence - Extracted from Event 1801/1808 如果 ($null -ne $latestEvent -且 $null -ne $latestEvent.訊息) { 如果 ($latestEvent.Message -match 'BucketConfidenceLevel:\s* (.+) ') { $confidence = $matches[1]。修剪 () Write-Host 「信心:$confidence」 } 否則 { Write-Warning 「事件訊息中找不到信心水準」 $confidence = $null Write-Host 「自信:事件中找不到」 } } 否則 { Write-Warning「最新事件或訊息為空,無法取得信心」 $confidence = $null Write-Host 「信心:不可得」 }
# 19. Event1801Count $event 1801Array = @ ($events |Where-Object {$_.ID -eq 1801}) $event 1801Count = $event 1801Array.Count Write-Host 「事件1801年計數:$event 1801年計數」
# 20. Event1808Count $event 1808Array = @ ($events |Where-Object {$_.ID -eq 1808}) $event 1808Count = $event 1808Array.Count Write-Host 「事件1808計數:$event 1808計數」 } } 抓 { Write-Warning「取得事件日誌時發生錯誤。 可能需要管理員權限:$_” $latestEventId = $null $bucketId = $null $confidence = $null $event 1801 計數 = 0 $event 1808年計數 = 0 Write-Host「最新事件ID:錯誤」 Write-Host「桶 ID:錯誤」 Write-Host「信心:錯誤」 Write-Host「事件1801 計數:0」 Write-Host 「事件1808 計數:0」 }
# WMI/CIM Queries (4 values)
# 21. OSVersion # PS 版本:3.0+ (2.0 版本使用 Get-WmiObject) |管理員:不 |系統需求:無 試試看 { $osInfo = Get-CimInstance Win32_OperatingSystem -錯誤行動停止 若 ($null -eq $osInfo -或 [string]::IsNullOrEmpty ($osInfo.版本) ) { Write-Warning「無法取得作業系統版本」 $osVersion = 「未知」 } 否則 { $osVersion = $osInfo.版本 } Write-Host 「作業系統版本:$osVersion」 } 抓 { Write-Warning 「錯誤取得作業系統版本:$_」 $osVersion = 「未知」 Write-Host「作業系統版本:$osVersion」 }
# 22. LastBootTime # PS 版本:3.0+ (2.0 版本使用 Get-WmiObject) |管理員:不 |系統需求:無 試試看 { $osInfo = Get-CimInstance Win32_OperatingSystem -錯誤行動停止 如果 ($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+ (2.0 版本使用 Get-WmiObject) |管理員:不 |系統需求:無 試試看 { $baseBoard = Get-CimInstance Win32_BaseBoard -錯誤動作停止 若 ($null -eq $baseBoard -或 [string]::IsNullOrEmpty ($baseBoard.Manufacturer) ) { Write-Warning 「無法取得踢腳板製造商」 $baseBoardManufacturer = 「未知」 } 否則 { $baseBoardManufacturer = $baseBoard。製造商 } Write-Host 「踢腳板製造商:$baseBoardManufacturer」 } 抓 { Write-Warning「錯誤取回踢腳板製造商:$_」 $baseBoardManufacturer = 「未知」 Write-Host「踢腳板製造商:$baseBoardManufacturer」 }
# 24. BaseBoardProduct # PS 版本:3.0+ (2.0 版本使用 Get-WmiObject) |管理員:不 |系統需求:無 試試看 { $baseBoard = Get-CimInstance Win32_BaseBoard -錯誤動作停止 若 ($null -eq $baseBoard -或 [string]::IsNullOrEmpty ($baseBoard.Product) ) { Write-Warning「無法取回踢腳板產品」 $baseBoardProduct = 「未知」 } 否則 { $baseBoardProduct = $baseBoard.積 } Write-Host 「踢腳板產品:$baseBoardProduct」 } 抓 { Write-Warning 「檢索踢腳板產品錯誤:$_」 $baseBoardProduct = 「未知」 Write-Host 「踢腳板產品:$baseBoardProduct」}