วันที่เผยแพร่ต้นฉบับ: วันที่ 17 พฤศจิกายน 2568
KB ID: 5072718
ตัวอย่างสคริปต์การเก็บรวบรวมข้อมูลการบูตแบบปลอดภัย
คัดลอกและวางสคริปต์ตัวอย่างนี้และปรับเปลี่ยนตามที่จําเป็นสําหรับสภาพแวดล้อมของคุณ: สคริปต์การเก็บรวบรวมข้อมูลสินค้าคงคลัง Secure Boot ตัวอย่าง
Sample_Secure_Boot_Inventory_Data_Collection_script
# 1. HostName # เวอร์ชัน PS: ทั้งหมด | Admin: ไม่ใช่ | '|1' ความต้องการของระบบ: ไม่มี ลอง { $hostname = $env:COMPUTERNAME if ([string]::IsNullOrEmpty($hostname)) { Write-Warning "ไม่สามารถระบุ Hostname ได้" $hostname = "ไม่รู้จัก" } Write-Host "Hostname: $hostname" } จับ { Write-Warning "เกิดข้อผิดพลาดในการดึงข้อมูลชื่อโฮสต์: $_" $hostname = "ข้อผิดพลาด" Write-Host "Hostname: $hostname" }
# 2. CollectionTime # เวอร์ชัน PS: ทั้งหมด | Admin: ไม่ใช่ | '|1' ความต้องการของระบบ: ไม่มี ลอง { $collectionTime = Get-Date if ($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/Secure Boot ลอง { $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop Write-Host "เปิดใช้งานการบูตแบบปลอดภัย: $secureBootEnabled" } จับ { Write-Warning "ไม่สามารถตรวจสอบสถานะการบูตแบบปลอดภัยผ่าน cmdlet: $_" # ลองใช้การย้อนกลับของรีจิสทรี ลอง { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled Write-Host "เปิดใช้งานการบูตแบบปลอดภัย: $secureBootEnabled" } จับ { Write-Warning "ไม่สามารถระบุสถานะการบูตแบบปลอดภัยผ่านรีจิสทรีได้ ระบบอาจไม่สนับสนุน UEFI/Secure Boot" $secureBootEnabled = $null Write-Host "เปิดใช้งานการบูตแบบปลอดภัย: ไม่พร้อมใช้งาน" } }
# 4. HighConfidenceOptOut # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $regValue = Get-ItemProperty -Path "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 -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 "Updates ที่พร้อมใช้งาน: $availableUpdatesHex" } อื่น { Write-Host "Updates ที่พร้อมใช้งาน: ไม่พร้อมใช้งาน" } } จับ { Write-Warning "ไม่พบรีจิสทรีคีย์ AvailableUpdates หรือไม่สามารถเข้าถึงได้" $availableUpdates = $null Write-Host "Updates ที่พร้อมใช้งาน: ไม่พร้อมใช้งาน" }
# Registry: Servicing Key (3 values)
# 6. UEFICA2023Status # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $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" } จับ { Write-Warning "ไม่พบรีจิสทรีคีย์ UEFICA2023Status หรือไม่สามารถเข้าถึงได้" $uefica 2023Status = $null Write-Host "สถานะ UEFI CA 2023: ไม่พร้อมใช้งาน" }
# 7. UEFICA2023Capable # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Capable -ErrorAction Stop $uefica 2023Capable = $regValue.UEFICA2023Capable Write-Host "UEFI CA 2023 สามารถใช้งาน: $uefica 2023 สามารถเก็บได้" } จับ { Write-Warning "ไม่พบรีจิสทรีคีย์ UEFICA2023Capable หรือไม่สามารถเข้าถึงได้" $uefica 2023Capable = $null Write-Host "ความสามารถ UEFI CA 2023: ไม่พร้อมใช้งาน" }
# 8. UEFICA2023Error # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $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" } จับ { Write-Warning "UEFICA2023Error รีจิสทรีคีย์ไม่พบหรือไม่สามารถเข้าถึงได้" $uefica 2023Error = $null Write-Host "ข้อผิดพลาด UEFI CA 2023: ไม่พร้อมใช้งาน" }
# Registry: Device Attributes (7 values)
# 9. OEMManufacturerName # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $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 = "ไม่รู้จัก" } Write-Host "ชื่อผู้ผลิต OEM: $oemManufacturerName" } จับ { Write-Warning "ไม่พบรีจิสทรีคีย์ OEMManufacturerName หรือไม่สามารถเข้าถึงได้" $oemManufacturerName = $null Write-Host "ชื่อผู้ผลิต OEM: ไม่พร้อมใช้งาน" }
# 10. OEMModelSystemFamily # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $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 = "ไม่รู้จัก" } Write-Host "ตระกูลระบบรุ่น OEM: $oemModelSystemFamily" } จับ { Write-Warning "ไม่พบรีจิสทรีคีย์ OEMModelSystemFamily หรือไม่สามารถเข้าถึงได้" $oemModelSystemFamily = $null Write-Host "ตระกูลระบบรุ่น OEM: ไม่พร้อมใช้งาน" }
# 11. OEMModelNumber # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop $oemModelNumber = $regValue.OEMModelNumber if ([string]::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 -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop $firmwareVersion = $regValue.FirmwareVersion if ([string]::IsNullOrEmpty($firmwareVersion)) { Write-Warning "FirmwareVersion ว่างเปล่า" $firmwareVersion = "ไม่รู้จัก" } Write-Host "เวอร์ชันเฟิร์มแวร์: $firmwareVersion" } จับ { Write-Warning "ไม่พบรีจิสทรีคีย์ FirmwareVersion หรือไม่สามารถเข้าถึงได้" $firmwareVersion = $null Write-Host "เวอร์ชันเฟิร์มแวร์: ไม่พร้อมใช้งาน" }
# 13. FirmwareReleaseDate # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop $firmwareReleaseDate = $regValue.FirmwareReleaseDate if ([string]::IsNullOrEmpty($firmwareReleaseDate)) { Write-Warning "FirmwareReleaseDate ว่างเปล่า" $firmwareReleaseDate = "ไม่รู้จัก" } Write-Host "วันที่เผยแพร่เฟิร์มแวร์: $firmwareReleaseDate" } จับ { Write-Warning "ไม่พบรีจิสทรีคีย์ FirmwareReleaseDate หรือไม่สามารถเข้าถึงได้" $firmwareReleaseDate = $null Write-Host "วันที่เผยแพร่เฟิร์มแวร์: ไม่พร้อมใช้งาน" }
# 14. OSArchitecture # เวอร์ชัน PS: ทั้งหมด | Admin: ไม่ใช่ | '|1' ความต้องการของระบบ: ไม่มี ลอง { $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 = "ไม่รู้จัก" } Write-Host "สถาปัตยกรรมของระบบปฏิบัติการ: $osArchitecture" } จับ { Write-Warning "ข้อผิดพลาดในการเรียก OSArchitecture: $_" $osArchitecture = "ไม่รู้จัก" Write-Host "สถาปัตยกรรมของระบบปฏิบัติการ: $osArchitecture" }
# 15. CanAttemptUpdateAfter (FILETIME) # เวอร์ชัน PS: ทั้งหมด | Admin: อาจจําเป็นต้องมี | ความต้องการของระบบ: ไม่มี ลอง { $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]) { ลอง { $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+ | Admin: อาจจําเป็นสําหรับบันทึกของระบบ | Windows 10 ความต้องการของระบบ: ไม่มี ลอง { $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 1801 บัญชี = 0 $event 1808 จํานวน = 0 Write-Host "ID เหตุการณ์ล่าสุด: ไม่พร้อมใช้งาน" Write-Host "Bucket ID: ไม่พร้อมใช้งาน" Write-Host "ความเชื่อมั่น: ไม่พร้อมใช้งาน" Write-Host "กิจกรรม 1801 นับ: 0" Write-Host "จํานวนเหตุการณ์ 1808: 0" } อื่น { # 16. LatestEventId $latestEvent = $events | Sort-Object TimeCreated -จากมากไปหาน้อย | TimeCreated | TimeCreated Select-Object -First 1 if ($null -eq $latestEvent) { Write-Warning "ไม่สามารถระบุเหตุการณ์ล่าสุดได้" $latestEventId = $null Write-Host "ID เหตุการณ์ล่าสุด: ไม่พร้อมใช้งาน" } อื่น { $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] ตัดแต่ง() Write-Host "Bucket ID: $bucketId" } อื่น { Write-Warning "ไม่พบ BucketId ในข้อความเหตุการณ์" $bucketId = $null Write-Host "Bucket ID: ไม่พบในเหตุการณ์" } } อื่น { Write-Warning "เหตุการณ์หรือข้อความล่าสุดเป็น Null ไม่สามารถแยก BucketId" $bucketId = $null Write-Host "Bucket ID: ไม่พร้อมใช้งาน" }
# 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] ตัดแต่ง() 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 1801 นับ = $event 1801Array.Count Write-Host "จํานวนเหตุการณ์ 1801: $event 1801 นับจํานวน"
# 20. Event1808Count $event 1808Array = @($events | Where-Object {$_. Id -eq 1808}) $event 1808 นับ = $event 1808Array.Count Write-Host "จํานวนเหตุการณ์ 1808: $event 1808 นับจํานวน" } } จับ { Write-Warning "ข้อผิดพลาดในการเรียกบันทึกเหตุการณ์ อาจต้องการสิทธิ์ระดับผู้ดูแลระบบ: $_" $latestEventId = $null $bucketId = $null $confidence = $null $event 1801 บัญชี = 0 $event 1808 จํานวน = 0 Write-Host "รหัสเหตุการณ์ล่าสุด: ข้อผิดพลาด" Write-Host "Bucket ID: ข้อผิดพลาด" Write-Host "ความเชื่อมั่น: ข้อผิดพลาด" Write-Host "จํานวนเหตุการณ์ 1801: 0" Write-Host "จํานวนเหตุการณ์ 1808: 0" }
# WMI/CIM Queries (4 values)
# 21. OSVersion # PS เวอร์ชัน: 3.0+ (ใช้ Get-WmiObject สําหรับ 2.0) | Admin: ไม่ใช่ | '|1' ความต้องการของระบบ: ไม่มี ลอง { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop if ($null -eq $osInfo -or [string]::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: ไม่ใช่ | '|1' ความต้องการของระบบ: ไม่มี ลอง { $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop if ($null -eq $osInfo -or $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: ไม่ใช่ | '|1' ความต้องการของระบบ: ไม่มี ลอง { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) { Write-Warning "ไม่สามารถเรียกข้อมูลผู้ผลิต Baseboard ได้" $baseBoardManufacturer = "ไม่รู้จัก" } อื่น { $baseBoardManufacturer = $baseBoard.Manufacturer } Write-Host "ผู้ผลิตฐาน: $baseBoardManufacturer" } จับ { Write-Warning "ข้อผิดพลาดในการเรียกข้อมูลผู้ผลิต Baseboard: $_" $baseBoardManufacturer = "ไม่รู้จัก" Write-Host "ผู้ผลิตฐาน: $baseBoardManufacturer" }
# 24. BaseBoardProduct # PS เวอร์ชัน: 3.0+ (ใช้ Get-WmiObject สําหรับ 2.0) | Admin: ไม่ใช่ | '|1' ความต้องการของระบบ: ไม่มี ลอง { $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Product)) { Write-Warning "ไม่สามารถเรียกข้อมูลผลิตภัณฑ์ Baseboard ได้" $baseBoardProduct = "ไม่รู้จัก" } อื่น { $baseBoardProduct = $baseBoard.Product } Write-Host "ผลิตภัณฑ์ Baseboard: $baseBoardProduct" } จับ { Write-Warning "ข้อผิดพลาดในการเรียกข้อมูลผลิตภัณฑ์ Baseboard: $_" $baseBoardProduct = "ไม่รู้จัก" Write-Host "ผลิตภัณฑ์ Baseboard: $baseBoardProduct"}