Rakenduskoht
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

Avaldamise algne kuupäev: 17. november 2025

KB ID: 5072718

Muuda kuupäeva

Muuda kirjeldust

24. veebruar 2026

  • Värskendatud on secure Boot Inventory Data Collectioni näidisskripti.

22. veebruar 2026

  • Värskendatud on secure Boot Inventory Data Collectioni näidisskripti.

13. veebruar 2026

  • Värskendatud on secure Boot Inventory Data Collectioni näidisskripti.

Secure Boot Inventory Data Collectioni skripti näidis

Kopeerige ja kleepige see näidisskript ning muutke seda vastavalt oma keskkonnale: turvalise algkäivituse inventuuri andmete kogumise näidisskript.

<# . SÜNOPSIS     Tuvastab turvalise algkäivituse serdi värskenduse oleku kogu laevastikuülese jälgimise jaoks.

. KIRJELDUS     See tuvastusskript kogub secure Booti olekut, serdi värskendamise registriväärtusi,     ja seadme teave. See väljastab JSON-stringi seireks ja aruandluseks.

    Ühildub Intune paranduste, GPO-põhise kogumi ja muude haldustööriistadega.Parandusskripti pole vaja – see on ainult jälgimine.

    Exit 0 = "Without issue" (serdid värskendatud)     Exit 1 = "With issue" (serdid pole värskendatud – ainult informaalne)

. PARAMETER OutputPath     Vabatahtlik. JSON-faili salvestuskausta tee.Kui see on esitatud, salvestab HOSTNAME_latest.json sellesse kausta.Kui seda ei esitata, väljastab JSON-i stdout (algne käitumine).

. NÄIDE     # Väljund stdout (Intune/SCCM tuvastamine)     .\Detect-SecureBootCertUpdateStatus.ps1

. NÄIDE     # Salvesta võrgukettale (GPO juurutus)     .\Detect-SecureBootCertUpdateStatus.ps1 -OutputPath "\\server\SecureBootLogs$"

. MÄRKMED     Registriteed https://aka.ms/securebootplaybook kohta:       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing

    TARKVARA PAKUTAKSE "NAGU ON", ILMA IGASUGUSE GARANTIITA, EXPRESS VÕI     KAUDSED, SEALHULGAS, KUID MITTE AINULT, KAUBASTATAVUSE GARANTIID,     SOBIV KONKREETSEKS OTSTARBEKS JA MITTEINFRINGEMENTIMISEKS. MITTE MINGIL JUHUL EI TOHI     AUTORID VÕI AUTORIÕIGUSE OMANIKUD VASTUTAVAD MIS TAHES NÕUETE, KAHJUDE VÕI MUUDE KAHJUDE EEST     VASTUTUS, MIS TULENEB LEPINGULISEST TEGEVUSEST, LEPINGUVÄLISEST KAHJUST VÕI MUUL VIISIL, MIS TULENEB     VÕI SEOSES TARKVARAGA VÕI SELLE KASUTAMISEGA VÕI MUUDE TEHINGUTEGA     TARKVARA.#> param(     [Parameter(Mandatory = $false)]     [string]$OutputPath )

# Allalaadimise URL: https://aka.ms/getsecureboot -> "Deployment and Monitoring Samples" # Märkus. See skript töötab lõpp-punktides Secure Booti olekuandmete kogumiseks.

# 1. Hostname PS-i versioon: kõik | Haldus: ei | Süsteeminõuded: pole proovige {     $hostname = $env:COMPUTERNAME     if ([string]::IsNullOrEmpty($hostname)) {         Write-Warning "Hostinime ei saanud määratleda"         $hostname = "Tundmatu"     }     Write-Host "Hostname: $hostname" (Hostinimi: $hostname) } püüdmine {     Write-Warning "Hostinime toomisel ilmnes tõrge: $_"     $hostname = "Tõrge"     Write-Host "Hostname: $hostname" }

# 2. Kogumisaeg PS-i versioon: kõik | Haldus: ei | Süsteeminõuded: pole proovige {     $collectionTime = toomiskuupäev     if ($null -eq $collectionTime) {         Write-Warning "Praegust kuupäeva/kellaaega ei saanud tuua"         $collectionTime = "Tundmatu"     }     Write-Host "Kogumisaeg: $collectionTime" } püüdmine {     Write-Warning "Kuupäeva/kellaaja toomisel ilmnes tõrge: $_"     $collectionTime = "Tõrge"     Write-Host "Kogumisaeg: $collectionTime" }

# Registry: Secure Boot Main Key (3 väärtust)

# 3. SecureBootEnabled # PS versioon: 3.0+ | Haldus: võib olla vajalik | Süsteeminõuded: UEFI/Secure Booti toega süsteem proovige {     $secureBootEnabled = Confirm-SecureBootUEFI –ErrorAction Stop     Write-Host "Secure Boot Enabled: $secureBootEnabled" } püüdmine {     Write-Warning "Secure Booti olekut ei saa cmdlet-käsu kaudu määratleda: $_"     # Proovige registri taandeid     proovige {         $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host "Secure Boot Enabled: $secureBootEnabled"     } püüdmine {         Write-Warning "Secure Booti olekut ei saa registri kaudu määratleda. Süsteem ei pruugi UEFI-liidese/secure Booti toetada."         $secureBootEnabled = $null         Write-Host "Turvaline käivitamine lubatud: pole saadaval"     } }

# 4. HighConfidenceOptOut PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut –ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host "Väga kindlustundega loobumine: $highConfidenceOptOut" } püüdmine {     # HighConfidenceOptOut on valikuline – pole enamikus süsteemides saadaval     $highConfidenceOptOut = $null     Write-Host "Väga kindlustundega loobumine: pole määratud" }

# 4b. MicrosoftUpdateManagedOptIn PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name MicrosoftUpdateManagedOptIn -ErrorAction Stop     $microsoftUpdateManagedOptIn = $regValue.MicrosoftUpdateManagedOptIn     Write-Host "Microsoft Update'i hallatav lubamine: $microsoftUpdateManagedOptIn" } püüdmine {     # MicrosoftUpdateManagedOptIn on valikuline – pole enamikus süsteemides saadaval     $microsoftUpdateManagedOptIn = $null     Write-Host "Microsoft Update'i hallatav lubamine: pole määratud" }

# 5. AvailableUpdates PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     if ($null -ne $availableUpdates) {         # Teisenda kuueteistkümnendvormingusse         $availableUpdatesHex = "0x{0:X}" -f $availableUpdates         Write-Host "Saadaolevad Teabevärskendused: $availableUpdatesHex"     } else {         Write-Host "Saadaval Teabevärskendused: pole saadaval"     } } püüdmine {     Write-Warning "AvailableUpdates registrivõtit ei leitud või puudub juurdepääs"     $availableUpdates = $null     Write-Host "Saadaval Teabevärskendused: pole saadaval" }

# 5b. AvailableUpdatesPolicy (GPO kontrollitud püsiv väärtus) PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdatesPolicy –ErrorAction Stop     $availableUpdatesPolicy = $regValue.AvailableUpdatesPolicy     if ($null -ne $availableUpdatesPolicy) {         # Teisenda kuueteistkümnendvormingusse         $availableUpdatesPolicyHex = "0x{0:X}" -f $availableUpdatesPolicy         Write-Host "Saadaolev Teabevärskendused poliitika: $availableUpdatesPolicyHex"     } else {         Write-Host "Saadaval Teabevärskendused poliitika: määramata"     } } püüdmine {     # AvailableUpdatesPolicy on valikuline – määratud ainult siis, kui GPO on rakendatud     $availableUpdatesPolicy = $null     Write-Host "Saadaval Teabevärskendused poliitika: määramata" }

# Registry: Teenindusvõti (3 väärtust)

# 6. UEFICA2023Status PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status –ErrorAction Stop     $uefica 2023Status = $regValue.UEFICA2023Status     Write-Host "Windows UEFI CA 2023 olek: $uefica 2023Status" } püüdmine {     Write-Warning "Windows UEFI CA 2023 oleku registrivõtit ei leitud või puudub juurdepääs"     $uefica 2023Status = $null     Write-Host "Windows UEFI CA 2023 olek: pole saadaval" }

# 7. UEFICA2023Error PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host "UEFI CA 2023 tõrge: $uefica 2023Error" } püüdmine {     # UEFICA2023Tõrge on olemas ainult siis, kui ilmnes tõrge – puudumine on hea     $uefica 2023Error = $null     Write-Host "UEFI CA 2023 tõrge: none" }

# 8. UEFICA2023ErrorEvent PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023ErrorEvent –ErrorAction Stop     $uefica 2023ErrorEvent = $regValue.UEFICA2023ErrorEvent     Write-Host "UEFI CA 2023 tõrkesündmus: $uefica 2023ErrorEvent" } püüdmine {     $uefica 2023ErrorEvent = $null     Write-Host "UEFI CA 2023 tõrkesündmus: pole saadaval" }

# Registry: Device Attributes (7 väärtust: 9-15)

# 9. OEMManufacturerName PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMManufacturerName –ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     if ([string]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName is empty" ("OEMManufacturerName is empty")         $oemManufacturerName = "Tundmatu"     }     Write-Host "OEM-i tootja nimi: $oemManufacturerName" } püüdmine {     Write-Warning "OEMManufacturerName registrivõtit ei leitud või puudub juurdepääs"     $oemManufacturerName = $null     Write-Host "OEM-i tootja nimi: pole saadaval" }

# 10. OEMModelSystemFamily PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelSystemFamily –ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     if ([string]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily is empty" (OEMModelSystemFamily on tühi)         $oemModelSystemFamily = "Tundmatu"     }     Write-Host "OEM-i mudeli süsteemipere: $oemModelSystemFamily" } püüdmine {     Write-Warning "OEMModelSystemFamily registrivõtit ei leitud või puudub juurdepääs"     $oemModelSystemFamily = $null     Write-Host "OEM-i mudeli süsteemipere: pole saadaval" }

# 11. OEMModelNumber PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelNumber –ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     if ([string]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber on tühi"         $oemModelNumber = "Tundmatu"     }     Write-Host "OEM-mudeli number: $oemModelNumber" } püüdmine {     Write-Warning "OEMModelNumber registrivõtit ei leitud või puudub juurdepääs"     $oemModelNumber = $null     Write-Host "OEM-i mudeli number: pole saadaval" }

# 12. FirmwareVersion PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     if ([string]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning "FirmwareVersion is empty" (Püsivaraversioon on tühi)         $firmwareVersion = "Tundmatu"     }     Write-Host "Püsivara versioon: $firmwareVersion" } püüdmine {     Write-Warning "FirmwareVersion registrivõtit ei leitud või puudub juurdepääs"     $firmwareVersion = $null     Write-Host "Püsivara versioon: pole saadaval" }

# 13. FirmwareReleaseDate PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareReleaseDate –ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     if ([string]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning "FirmwareReleaseDate is empty" (PüsivaraReleaseDate on tühi)         $firmwareReleaseDate = "Tundmatu"     }     Write-Host "Püsivara väljaandmiskuupäev: $firmwareReleaseDate" } püüdmine {     Write-Warning "FirmwareReleaseDate registry key not found or inaccessible"     $firmwareReleaseDate = $null     Write-Host "Püsivara väljaandmiskuupäev: pole saadaval" }

# 14. OSArchitecture PS-i versioon: kõik | Haldus: ei | Süsteeminõuded: pole proovige {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([string]::IsNullOrEmpty($osArchitecture)) {         # Proovige registri taandeid         $regValue = Get-ItemProperty -Tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OSArchitecture –ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([string]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "OSArchitecture'i ei saanud määratleda"         $osArchitecture = "Tundmatu"     }     Write-Host "OS-i arhitektuur: $osArchitecture" } püüdmine {     Write-Warning "OSArchitecture toomisel ilmnes tõrge: $_"     $osArchitecture = "Tundmatu"     Write-Host "OS-i arhitektuur: $osArchitecture" }

# 15. CanAttemptUpdateAfter (FILETIME) PS-i versioon: kõik | Haldus: võib olla vajalik | Süsteeminõuded: pole proovige {     $regValue = Get-ItemProperty -tee "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Convert FILETIME to UTC DateTime – registris talletatakse REG_BINARY (bait[]) või REG_QWORD (pikk)     if ($null -ne $canAttemptUpdateAfter) {         proovige {             if ($canAttemptUpdateAfter -is [bait[]]) {                 $fileTime = [BitConverter]::ToInt64($canAttemptUpdateAfter; 0)                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($fileTime). ToUniversalTime()             } elseif ($canAttemptUpdateAfter -on [pikk]) {                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter). ToUniversalTime()             }         } püüdmine {             Write-Warning "CanAttemptUpdateAfter FILETIME'i ei saanud kuupäevaks DateTime teisendada"         }     }     Write-Host "Võib proovida värskendamist pärast: $canAttemptUpdateAfter" } püüdmine {     Write-Warning "CanAttemptUpdateAfter registry key not found or inaccessible"     $canAttemptUpdateAfter = $null     Write-Host "Võib proovida värskendamist pärast: pole saadaval" }

# Sündmuselogid: süsteemilogi (10 väärtust: 16-25)

# 16-25. Sündmuselogi päringud # Sündmuse ID-sid: # 1801 – värskendamine algatati, taaskäivitamine on nõutav # 1808 – värskendamine on lõpule viidud # 1795 – püsivara tagastas tõrke (hõive tõrkekood) # 1796 – tõrge logituna tõrkekoodiga (hõivekood) # 1800 – taaskäivitamine on vajalik (POLE viga – värskendamine jätkub pärast taaskäivitamist) # 1802 – teadaolev püsivaraprobleem blokeeris värskenduse (hõiva KI_<number> SkipReasonist) # 1803 – vastavat KEK-i värskendust ei leitud (OEM peab esitama PK allkirjastatud KEK-i) # PS versioon: 3.0+ | Haldus: võib olla vajalik süsteemilogi | Süsteeminõuded: pole proovige {     # Päring kõigi asjakohaste Secure Booti sündmuste ID-dega     $allEventIds = @(1795; 1796; 1800; 1801; 1802; 1803; 1808)     $events = @(Get-WinEvent -FilterHashtable @{LogName='System'; ID=$allEventIds} -MaxEvents 50 -ErrorAction Stop)

    if ($events. Count -eq 0) {         Write-Warning "Süsteemilogist ei leitud secure Booti sündmusi"         $latestEventId = $null         $bucketId = $null         $confidence = $null         $skipReasonKnownIssue = $null         $event 1801Kogum = 0         $event 1808Count = 0         $event 1795Kogus = 0         $event 1795ErrorCode = $null         $event 1796Count = 0         $event 1796ErrorCode = $null         $event 1800Count = 0         $rebootPending = $false         $event 1802Count = 0         $knownIssueId = $null         $event 1803Kogum = 0         $missingKEK = $false         Write-Host "Uusim sündmuse ID: pole saadaval"         Write-Host "Salve ID: pole saadaval"         Write-Host "Usaldus: pole saadaval"         Write-Host "Sündmuse 1801 arv: 0"         Write-Host "Sündmuse 1808 arv: 0"     } else {         # 16. LatestEventId         $latestEvent = $events | Sort-Object – laskuv järjestus | Select-Object –esimene 1         if ($null -eq $latestEvent) {             Write-Warning "Uusimat sündmust ei saanud määratleda"             $latestEventId = $null             Write-Host "Uusim sündmuse ID: pole saadaval"         } else {             $latestEventId = $latestEvent.Id             Write-Host "Uusim sündmuse ID: $latestEventId"         }

        # 17. BucketID – ekstraktitud sündmusest 1801/1808         if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match 'BucketId:\s*(.+)') {                 $bucketId = $matches[1]. Trimmi()                 Write-Host "Salve ID: $bucketId"             } else {                 Write-Warning "BucketId-d ei leitud sündmusesõnumist"                 $bucketId = $null                 Write-Host "Salve ID: sündmusest ei leitud"             }         } else {             Write-Warning "Uusim sündmus või sõnum on nullväärtusega, ei saa ekstraktida BucketId-d"             $bucketId = $null             Write-Host "Salve ID: pole saadaval"         }

        # 18. Usaldus – saadud sündmusest 1801/1808         if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match 'BucketConfidenceLevel:\s*(.+)') {                 $confidence = $matches[1]. Trimmi()                 Write-Host "Usaldus: $confidence"             } else {                 Write-Warning "Sündmusesõnumist ei leitud usaldustaset"                 $confidence = $null                 Write-Host "Usaldus: sündmusest ei leitud"             }         } else {             Write-Warning "Viimane sündmus või sõnum on nullväärtusega, ei saa ekstraktida usaldust"             $confidence = $null             Write-Host "Usaldus: pole saadaval"         }

        # 18b. SkipReason – KI_<numbri> ekstraktimine SkipReasonist samal sündmusel nagu BucketId         # See jäädvustab teadaolevad probleemi ID-d, mis kuvatakse bucketId/Confidence kõrval (mitte ainult sündmus 1802)         $skipReasonKnownIssue = $null         if ($null -ne $latestEvent -and $null -ne $latestEvent.Sõnum) {             if ($latestEvent.Message -match 'SkipReason:\s*(KI_\d+)') {                 $skipReasonKnownIssue = $matches[1]                 Write-Host "SkipReason Known Issue: $skipReasonKnownIssue" -ForegroundColor Yellow             }         }

        # 19. Sündmus1801Count         $event 1801Array = @($events | Where-Object {$_. ID -eq 1801})         $event 1801Count = $event 1801Array.Count         Write-Host "Sündmuse 1801 arv: $event 1801Count"

        # 20. Sündmus1808Count         $event 1808Array = @($events | Where-Object {$_. ID -eq 1808})         $event 1808Count = $event 1808Array.Count         Write-Host "Sündmuse 1808 arv: $event 1808Count"                  # Lähtesta tõrkesündmuse muutujad         $event 1795Count = 0         $event 1795ErrorCode = $null         $event 1796Count = 0         $event 1796ErrorCode = $null         $event 1800Count = 0         $rebootPending = $false         $event 1802Count = 0         $knownIssueId = $null         $event 1803Konto = 0         $missingKEK = $false                  # Kontrollige ainult tõrkesündmusi, kui värskendamine POLE lõpule viidud         # Jäta tõrkeanalüüs vahele, kui: 1808 on uusim sündmus VÕI UEFICA2023Status on "Värskendatud"         $updateComplete = ($latestEventId -eq 1808) -or ($uefica 2023Status -eq "Värskendatud")                  kui (-mitte $updateComplete) {             Write-Host "Värskendamine pole lõpule viidud – veasündmuste otsimine..." – esiplaanivärvi kollane                          # 21. Sündmus1795 – püsivara tõrge (hõive tõrkekood)             $event 1795Array = @($events | Where-Object {$_. ID -eq 1795})             $event 1795Count = $event 1795Array.Count             if ($event 1795Count -gt 0) {                 $latestEvent 1795 = $event 1795Array | Sort-Object timeCreated -Descending | Select-Object –esimene 1                 if ($latestEvent 1795.Message -match '(?:error|code|status)[:\s]*(?:0x)?( [0-9A-Fa-f]{8}|[0-9A-Fa-f]+)') {                     $event 1795ErrorCode = $matches[1]                 }                 Write-Host "Sündmuse 1795 (püsivara tõrge) arv: $event 1795Count" $(if ($event 1795ErrorCode) { "Kood: $event 1795ErrorCode" })             }                          # 22. Sündmus1796 – logitud tõrkekood (hõive tõrkekood)             $event 1796Array = @($events | Where-Object {$_. ID -eq 1796})             $event 1796Count = $event 1796Array.Count             if ($event 1796Count -gt 0) {                 $latestEvent 1796 = $event 1796Array | Sort-Object timeCreated -Descending | Select-Object –esimene 1                 if ($latestEvent 1796.Message -match '(?:error|code|status)[:\s]*(?:0x)?( [0-9A-Fa-f]{8}|[0-9A-Fa-f]+)') {                     $event 1796ErrorCode = $matches[1]                 }                 Write-Host "Sündmuse 1796 (tõrkelogitud) arv: $event 1796Count" $(if ($event 1796ErrorCode) { "Kood: $event 1796ErrorCode" })             }                          # 23. Sündmus1800 – taaskäivitamine on nõutav (POLE tõrge – värskendamine jätkub pärast taaskäivitamist)             $event 1800Array = @($events | Where-Object {$_. ID -eq 1800})             $event 1800Count = $event 1800Array.Count             $rebootPending = $event 1800Count -gt 0             if ($rebootPending) {                 Write-Host "Sündmus 1800 (taaskäivitamise ootel): värskendamine jätkub pärast taaskäivitamist" -ForegroundColor Cyan             }                          # 24. Event1802 – teadaolev püsivara probleem (hõiva KI_<number> SkipReasonist)             $event 1802Array = @($events | Where-Object {$_. ID -eq 1802})             $event 1802Count = $event 1802Array.Count             if ($event 1802Count -gt 0) {                 $latestEvent 1802 = $event 1802Array | Sort-Object timeCreated -Descending | Select-Object –esimene 1                 if ($latestEvent 1802.Message -match 'SkipReason:\s*(KI_\d+)') {                     $knownIssueId = $matches[1]                 }                 Write-Host "Sündmuse 1802 (teadaolev püsivaraprobleem) arv: $event 1802Count" $(if ($knownIssueId) { "KI: $knownIssueId" })             }                          # 25. Sündmus1803 – puuduv KEK-i värskendus (OEM peab esitama PK allkirjastatud KEK-i)             $event 1803Array = @($events | Where-Object {$_. ID -eq 1803})             $event 1803Count = $event 1803Array.Count             $missingKEK = $event 1803Count -gt 0             if ($missingKEK) {                 Write-Host "Sündmus 1803 (puuduv KEK): OEM peab esitama PK allkirjastatud KEK-i" -Esiplaanivärvi kollane             }         } else {             Write-Host "Värskendamine on lõpule viidud (sündmus 1808 või olek=värskendatud) – tõrkeanalüüsi vahelejätmine" –esiplaanivärvroheline         }     } } püüdmine {     Write-Warning "Sündmuselogide toomisel ilmnes tõrge. Võib vajada administraatoriõigusi: $_"     $latestEventId = $null     $bucketId = $null     $confidence = $null     $skipReasonKnownIssue = $null     $event 1801Kogum = 0     $event 1808Count = 0     $event 1795Count = 0     $event 1795ErrorCode = $null     $event 1796Count = 0     $event 1796ErrorCode = $null     $event 1800Count = 0     $rebootPending = $false     $event 1802Count = 0     $knownIssueId = $null     $event 1803Kogum = 0     $missingKEK = $false     Write-Host "Uusim sündmuse ID: tõrge"     Write-Host "Salve ID: tõrge"     Write-Host "Confidence: Error" (Usaldusväärsus: tõrge)     Write-Host "Sündmuse 1801 arv: 0"     Write-Host "Sündmuse 1808 arv: 0" }

WMI-/CIM-päringute arv (5 väärtust)

# 26. OsVersion # PS Versioon: 3.0+ (Get-WmiObject kasutamine versioonis 2.0) | Haldus: ei | Süsteeminõuded: pole proovige {     $osInfo = Get-CimInstance Win32_OperatingSystem –ErrorAction Stop     if ($null -eq $osInfo -või [string]::IsNullOrEmpty($osInfo.Version)) {         Write-Warning "OS-i versiooni ei saanud tuua"         $osVersion = "Tundmatu"     } else {         $osVersion = $osInfo.Version     }     Write-Host "OS-i versioon: $osVersion" } püüdmine {     # CIM võib mõnes keskkonnas nurjuda – kasutage taandefunktsiooni     $osVersion = [System.Environment]::OSVersion.Version.ToString()     if ([string]::IsNullOrEmpty($osVersion)) { $osVersion = "Unknown" }     Write-Host "OS-i versioon: $osVersion" }

# 27. LastBootTime # PS Versioon: 3.0+ (Get-WmiObject kasutamine versioonis 2.0) | Haldus: ei | Süsteeminõuded: pole proovige {     $osInfo = Get-CimInstance Win32_OperatingSystem –ErrorAction Stop     if ($null -eq $osInfo -or $null -eq $osInfo.LastBootUpTime) {         Write-Warning "Viimast algkäivitusaega ei saanud tuua"         $lastBootTime = $null         Write-Host "Viimane algkäivitusaeg: pole saadaval"     } else {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host "Viimane algkäivitusaeg: $lastBootTime"     } } püüdmine {     # CIM võib mõnes keskkonnas nurjuda – kasutage taandefunktsiooni     proovige {         $lastBootTime = (Get-Process -ID 0 -ErrorAction SilentlyContinue). Alguskaeg     } püüdmine {         $lastBootTime = $null     }     kui ($lastBootTime) { Write-Host "Viimane algkäivitusaeg: $lastBootTime" } else { Write-Host "Viimane algkäivitusaeg: pole saadaval" } }

# 28. BaseBoardManufacturer # PS Versioon: 3.0+ (Get-WmiObject kasutamine versioonis 2.0) | Haldus: ei | Süsteeminõuded: pole proovige {     $baseBoard = Get-CimInstance Win32_BaseBoard –ErrorAction Stop     if ($null -eq $baseBoard -või [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {         Write-Warning "Baaslaua tootjat ei saanud tuua"         $baseBoardManufacturer = "Tundmatu"     } else {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host "Alusplaadi tootja: $baseBoardManufacturer" } püüdmine {     # CIM võib nurjuda – aluslaua teave on lisainfo     $baseBoardManufacturer = "Tundmatu"     Write-Host "Alusplaadi tootja: $baseBoardManufacturer" }

# 29. BaseBoardProduct # PS Versioon: 3.0+ (Get-WmiObject kasutamine versioonis 2.0) | Haldus: ei | Süsteeminõuded: pole proovige {     $baseBoard = Get-CimInstance Win32_BaseBoard –ErrorAction Stop     if ($null -eq $baseBoard -või [string]::IsNullOrEmpty($baseBoard.Product)) {         Write-Warning "Baaslaua toodet ei saanud tuua"         $baseBoardProduct = "Tundmatu"     } else {         $baseBoardProduct = $baseBoard.Product     }     Write-Host "Baaslaua toode: $baseBoardProduct" } püüdmine {     # CIM võib nurjuda – aluslaua teave on lisainfo     $baseBoardProduct = "Tundmatu"     Write-Host "Baaslaua toode: $baseBoardProduct" }

# 30. SecureBootTaskEnabled PS-i versioon: kõik | Haldus: ei | Süsteeminõuded: ajastatud toiming on olemas # Kontrollib, kas Secure-Boot-Update'i ajastatud toiming on lubatud $secureBootTaskEnabled = $null $secureBootTaskStatus = "Tundmatu" proovige {     $taskOutput = schtasks.exe /Query /TN "\Microsoft\Windows\PI\Secure-Boot-Update" /FO CSV 2>&1     if ($LASTEXITCODE -eq 0) {         $taskData = $taskOutput | ConvertFrom-Csv         if ($taskData) {             $secureBootTaskStatus = $taskData.Status             $secureBootTaskEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Töötab')         }     } else {         $secureBootTaskStatus = "NotFound"         $secureBootTaskEnabled = $false     }     if ($secureBootTaskEnabled -eq $false) {         Write-Host "SecureBoot Update Task: $secureBootTaskStatus (Enabled: $secureBootTaskEnabled)" -ForegroundColor Yellow     } else {         Write-Host "SecureBoot Update Task: $secureBootTaskStatus (Enabled: $secureBootTaskEnabled)" - ForegroundColor Green     } } püüdmine {     $secureBootTaskStatus = "Tõrge"     $secureBootTaskEnabled = $false     Write-Host "SecureBoot Update Task: Error checking - $_" -ForegroundColor Red }

# 31. WinCS-i võtme olek (F33E0C8E002 – turvaline algkäivitusserdi värskendus) PS-i versioon: kõik | Haldus: Jah (päringu jaoks) | Süsteeminõuded: WinCsFlags.exe $wincsKeyApplied = $null $wincsKeyStatus = "Tundmatu" proovige {     # Kontrollige WinCsFlags.exe levinumaid asukohti     $wincsFlagsPath = $null     $possiblePaths = @(         "$env:SystemRoot\System32\WinCsFlags.exe",         "$env:SystemRoot\SysWOW64\WinCsFlags.exe"     )     foreach ($p in $possiblePaths) {         if (testtee $p) { $wincsFlagsPath = $p; break }     }     if ($wincsFlagsPath) {         Päringukohane võti # – nõuab administraatoriõigusi         $queryOutput = & $wincsFlagsPath /päring – võti F33E0C8E002 2>&1         $queryOutputStr = $queryOutput -join "'n"         if ($LASTEXITCODE -eq 0) {             # Kontrollige, kas võti on rakendatud (otsige märksõna "Aktiivne konfiguratsioon" või sarnast näidikut)             if ($queryOutputStr -match "Active Configuration.*:.*enabled" -or $queryOutputStr -match "Configuration.*applied") {                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Rakendatud"                 Write-Host "WinCS Key F33E0C8E002: Applied" -ForegroundColor Green             } elseif ($queryOutputStr -match "ei leitud|Konfiguratsioon puudub") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "NotApplied"                 Write-Host "WinCS Key F33E0C8E002: Not Applied" -ForegroundColor Yellow             } else {                 # Võti on olemas – kontrollige, kas väljundis on olek                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Rakendatud"                 Write-Host "WinCS Key F33E0C8E002: Applied" -ForegroundColor Green             }         } else {             # Otsi konkreetseid tõrketeateid             if ($queryOutputStr -match "Juurdepääs keelatud|administraator") {                 $wincsKeyStatus = "AccessDenied"                 Write-Host "WinCS Key F33E0C8E002: juurdepääs on keelatud (käivita administraatorina)" -ForegroundColor DarkGray             } elseif ($queryOutputStr -match "ei leitud|Konfiguratsioon puudub") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "NotApplied"                 Write-Host "WinCS Key F33E0C8E002: Not Applied" -ForegroundColor Yellow             } else {                 $wincsKeyStatus = "QueryFailed"                 Write-Host "WinCS Key F33E0C8E002: Query failed" -ForegroundColor Red             }         }     } else {         $wincsKeyStatus = "WinCsFlagsNotFound"         Write-Host "WinCS Key F33E0C8E002: WinCsFlags.exe not found" -ForegroundColor Gray     } } püüdmine {     $wincsKeyStatus = "Tõrge"     Write-Host "WinCS Key F33E0C8E002: Error checking - $_" -ForegroundColor Red }              

# ============================================================================= # Parandustuvastus – olekuväljundi & väljumiskood # =============================================================================

# Kõigi kogutud inventuuriandmete järgu oleku objekt $status = [tellitud]@{     UEFICA2023Status = $uefica 2023Status     UEFICA2023Error = $uefica 2023Error     UEFICA2023ErrorEvent = $uefica 2023ErrorEvent     AvailableUpdates = if ($null -ne $availableUpdates) { $availableUpdatesHex } else { $null }     AvailableUpdatesPolicy = if ($null -ne $availableUpdatesPolicy) { $availableUpdatesPolicyHex } else { $null }     Hostname = $hostname     CollectionTime = if ($collectionTime -is [datetime]) { $collectionTime.ToString("o") } else { "$collectionTime" }     SecureBootEnabled = $secureBootEnabled     HighConfidenceOptOut = $highConfidenceOptOut     MicrosoftUpdateManagedOptIn = $microsoftUpdateManagedOptIn     OEMManufacturerName = $oemManufacturerName     OEMModelSystemFamily = $oemModelSystemFamily     OEMModelNumber = $oemModelNumber     FirmwareVersion = $firmwareVersion     FirmwareReleaseDate = $firmwareReleaseDate     OSArchitecture = $osArchitecture     CanAttemptUpdateAfter = if ($canAttemptUpdateAfter -is [datetime]) { $canAttemptUpdateAfter.ToString("o") } else { "$canAttemptUpdateAfter" }     LatestEventId = $latestEventId     BucketId = $bucketId     Usaldus = $confidence     SkipReasonKnownIssue = $skipReasonKnownIssue # KI_<arv> sündmusest SkipReason sündmuses BucketId     Sündmus1801Count = $event 1801Count     Event1808Count = $event 1808Count     # Jäädvustatud üksikasjadega tõrkesündmused     Event1795Count = $event 1795Count # Firmware returned error     Event1795ErrorCode = $event 1795ErrorCode # Püsivara tõrkekood     Event1796Count = $event 1796Count # Logitud tõrkekood     Event1796ErrorCode = $event 1796ErrorCode # Captured error code     Event1800Count = $event 1800Count # Vajalik taaskäivitamine (NOT tõrge)     RebootPending = $rebootPending # Tõene, kui sündmus 1800 on olemas     Event1802Count = $event 1802Count # teadaolev püsivara probleem     KnownIssueId = $knownIssueId # KI_<> alates SkipReasonist     Sündmus1803Count = $event 1803Count # KEK-i värskendus on puudu     MissingKEK = $missingKEK # OEM peab esitama PK allkirjastatud KEK-i     OSVersion = $osVersion     LastBootTime = if ($lastBootTime -is [datetime]) { $lastBootTime.ToString("o") } else { "$lastBootTime" }     BaseBoardManufacturer = $baseBoardManufacturer     BaseBoardProduct = $baseBoardProduct     SecureBootTaskEnabled = $secureBootTaskEnabled     SecureBootTaskStatus = $secureBootTaskStatus     WinCSKeyApplied = $wincsKeyApplied # Tõene, kui rakendatakse F33E0C8E002 võti     WinCSKeyStatus = $wincsKeyStatus # Rakendatud, NotApplied, WinCsFlagsNotFound jne. }

# Väljund olek – andmete koondamiseks $jsonOutput = $status | ConvertTo-Json – tihendamine

# Kui OutputPath on saadaval, salvesta faili; muul juhul väljund stdout if (-not [string]::IsNullOrEmpty($OutputPath)) {     # Valideeri OutputPath – jätke vahele, kui see näeb välja nagu spikritaotlus või kui sellel on sobimatud märgid     if ($OutputPath -match ^[/\-]' -või $OutputPath -match '[<>:"|? *]') {         Write-Host "Määratud on sobimatu OutputPath, väljastus stdout'i" –Esiplaanivärvi kollane         Write-Output $jsonOutput         if ($secureBootEnabled -and $uefica 2023Status -eq "Updated") { exit 0 } else { exit 1 }     }          # Veenduge, et väljundkaust oleks olemas     kui (-not (testtee $OutputPath)) {         proovige {             New-Item -ItemType'i kataloog -tee $OutputPath -Force | Nullväärtuseta         } püüdmine {             Write-Warning "Väljundkausta ei saanud luua: $OutputPath - $_"         }     }          # Salvesta HOSTNAME_latest.json     $outputFile = Join-Path $OutputPath "$($hostname)_latest.json"     proovige {         $jsonOutput | Out-File -FilePath $outputFile -Encoding UTF8 –Force         Write-Host "JSON saved to: $outputFile" -ForegroundColor Green     } püüdmine {         Write-Warning "Faili ei saanud kirjutada: $outputFile - $_"         # Naaske stdout'i         Write-Output $jsonOutput     } } else {     # Algne käitumine – väljund stdout     Write-Output $jsonOutput }

# Väljumiskood: "Värskendatud" on esitusraamatu edukuse väärtus if ($secureBootEnabled -and $uefica 2023Status -eq "Updated") {     exit 0 # Without issue } else {     exit 1 # With issue }

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.