적용 대상
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

원래 게시 날짜: 2025년 11월 17일

KB ID: 5072718

샘플 보안 부팅 인벤토리 데이터 수집 스크립트

이 샘플 스크립트를 복사하여 붙여넣고 사용자 환경에 필요한 대로 수정합니다. 샘플 보안 부팅 인벤토리 데이터 수집 스크립트입니다.

Sample_Secure_Boot_Inventory_Data_Collection_script

# 1. HostName # PS 버전: 모두 | 관리: 아니요 | 시스템 요구 사항: 없음 try {     $hostname = $env:COMPUTERNAME     if ([string]::IsNullOrEmpty($hostname)) {         Write-Warning "호스트 이름을 확인할 수 없습니다."         $hostname = "알 수 없음"     }     Write-Host "호스트 이름: $hostname" } catch {     Write-Warning "호스트 이름을 검색하는 동안 오류가 발생했습니다. $_"     $hostname = "오류"     Write-Host "호스트 이름: $hostname" }

# 2. CollectionTime # PS 버전: 모두 | 관리: 아니요 | 시스템 요구 사항: 없음 try {     $collectionTime = Get-Date     if ($null -eq $collectionTime) {         Write-Warning "현재 날짜/시간을 검색할 수 없음"         $collectionTime = "알 수 없음"     }     Write-Host "컬렉션 시간: $collectionTime" } catch {     Write-Warning "날짜/시간 검색 오류: $_"     $collectionTime = "오류"     Write-Host "컬렉션 시간: $collectionTime" }

# Registry: Secure Boot Main Key (3 values)

# 3. SecureBootEnabled # PS 버전: 3.0 이상 | 관리: 필요할 수 있음 | 시스템 요구 사항: UEFI/보안 부팅 가능 시스템 try {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction 중지     Write-Host "보안 부팅 사용: $secureBootEnabled" } catch {     Write-Warning "cmdlet을 통해 보안 부팅 상태 확인할 수 없음: $_"     # 레지스트리 대체 시도     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) {         # 16진수 형식으로 변환         $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 UEFICA2023Capable -ErrorAction Stop     $uefica 2023Capable = $regValue.UEFICA2023Capable     Write-Host "UEFI CA 2023 지원: $uefica 2023Capable" } catch {     Write-Warning "UEFICA2023Capable 레지스트리 키를 찾을 수 없거나 액세스할 수 없음"     $uefica 2023Capable = $null     Write-Host "UEFI CA 2023 지원: 사용할 수 없음" }

# 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 "UEFICA2023Error 레지스트리 키를 찾을 수 없거나 액세스할 수 없음"     $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 = "알 수 없음"     }     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 = "알 수 없음"     }     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가 비어 있음"         $oemModelNumber = "알 수 없음"     }     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이 비어 있음"         $firmwareVersion = "알 수 없음"     }     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가 비어 있음"         $firmwareReleaseDate = "알 수 없음"     }     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 = "알 수 없음"     }     Write-Host "OS 아키텍처: $osArchitecture" } catch {     Write-Warning "OSArchitecture를 검색하는 동안 오류가 발생했습니다. $_"     $osArchitecture = "알 수 없음"     Write-Host "OS 아키텍처: $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 버전: 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 "최신 이벤트 ID: 사용할 수 없음"         Write-Host "버킷 ID: 사용할 수 없음"         Write-Host "신뢰도: 사용할 수 없음"         Write-Host "이벤트 1801 개수: 0"         Write-Host "이벤트 1808 개수: 0"     } else {         # 16. LatestEventId         $latestEvent = $events | Sort-Object TimeCreated -Descending | Select-Object -First 1         if ($null -eq $latestEvent) {             Write-Warning "최신 이벤트를 확인할 수 없음"             $latestEventId = $null             Write-Host "최신 이벤트 ID: 사용할 수 없음"         } else {             $latestEventId = $latestEvent.Id             Write-Host "최신 이벤트 ID: $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 "버킷 ID: $bucketId"             } else {                 Write-Warning "이벤트 메시지에서 BucketId를 찾을 수 없음"                 $bucketId = $null                 Write-Host "버킷 ID: 이벤트에서 찾을 수 없음"             }         } else {             Write-Warning "최신 이벤트 또는 메시지가 null이면 BucketId를 추출할 수 없습니다."             $bucketId = $null             Write-Host "버킷 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]. 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 "최신 이벤트 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 사용) | 관리: 아니요 | 시스템 요구 사항: 없음 try {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction 중지     if ($null -eq $osInfo -또는 [string]::IsNullOrEmpty($osInfo.Version)) {         Write-Warning "OS 버전을 검색할 수 없음"         $osVersion = "알 수 없음"     } else {         $osVersion = $osInfo.Version     }     Write-Host "OS 버전: $osVersion" } catch {     Write-Warning "OS 버전 검색 오류: $_"     $osVersion = "알 수 없음"     Write-Host "OS 버전: $osVersion" }

# 22. LastBootTime # PS 버전: 3.0 이상(2.0에 Get-WmiObject 사용) | 관리: 아니요 | 시스템 요구 사항: 없음 try {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction 중지     if ($null -eq $osInfo -또는 $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 이상(2.0에 Get-WmiObject 사용) | 관리: 아니요 | 시스템 요구 사항: 없음 try {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction 중지     if ($null -eq $baseBoard -또는 [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {         Write-Warning "베이스보드 제조업체를 검색할 수 없음"         $baseBoardManufacturer = "알 수 없음"     } else {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host "베이스보드 제조업체: $baseBoardManufacturer" } catch {     Write-Warning "베이스보드 제조업체를 검색하는 중 오류 발생: $_"     $baseBoardManufacturer = "알 수 없음"     Write-Host "베이스보드 제조업체: $baseBoardManufacturer" }

# 24. BaseBoardProduct # PS 버전: 3.0 이상(2.0에 Get-WmiObject 사용) | 관리: 아니요 | 시스템 요구 사항: 없음 try {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction 중지     if ($null -eq $baseBoard -또는 [string]::IsNullOrEmpty($baseBoard.Product)) {         Write-Warning "베이스보드 제품을 검색할 수 없음"         $baseBoardProduct = "알 수 없음"     } else {         $baseBoardProduct = $baseBoard.Product     }     Write-Host "베이스보드 제품: $baseBoardProduct" } catch {     Write-Warning "베이스보드 제품 검색 오류: $_"     $baseBoardProduct = "알 수 없음"     Write-Host "베이스보드 제품: $baseBoardProduct"}

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.