Primenjuje se na
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

Originalni datum objavljivanja: 17. novembar 2025.

KB ID: 5072718

Promeni datum

Promeni opis

24. februar 2026.

  • Ažurirana je skripta prikupljanja podataka za zalihe bezbednog pokretanja uzorka.

22. februar 2026.

  • Ažurirana je skripta prikupljanja podataka za zalihe bezbednog pokretanja uzorka.

13. februar 2026.

  • Ažurirana je skripta prikupljanja podataka za zalihe bezbednog pokretanja uzorka.

Uzorak skripte prikupljanja podataka o zalihama bezbednog pokretanja sistema

Kopirajte i nalepite ovu uzorak skripte i izmenite po potrebi za okruženje: Skripta "Uzorak prikupljanja podataka o zalihama bezbednog pokretanja".

<# . SINOPSIS     Otkriva status ažuriranja certifikata bezbednog pokretanja za nadgledanje na nivou flote.

. OPIS     Ova skripta za otkrivanje prikuplja status bezbednog pokretanja, vrednosti registratora ažuriranja certifikata,     i informacije o uređaju. Ona izvozi JSON nisku za nadgledanje i izveštavanje.

    Kompatibilno sa Intune ispravkama, kolekcijom zasnovanom na GPO i drugim alatkama za upravljanje.Nije potrebna skripta za ponovno rešavanje problema – ovo je samo nadgledanje.

    Izlaz 0 = "Bez problema" (certifikati su ažurirani)     Izlaz 1 = "Sa problemom" (certifikati nisu ažurirani – samo informativno)

. IZLAZNI PARAMETAR     Opcionalno. Putanja do fascikle u kojoj će JSON datoteka biti sačuvana.Ako je obezbeđena, čuva HOSTNAME_latest.json u ovoj fascikli.Ako nije obezbeđen, izvezi JSON u stdout (originalno ponašanje).

. PRIMER     # Izlaz u stdout (Intune/SCCM otkrivanje)     .\Detect-SecureBootCertUpdateStatus.ps1

. PRIMER     # Sačuvaj na mrežnom resursu (GPO primena)     .\Detect-SecureBootCertUpdateStatus.ps1 -OutputPath "\\server\SecureBootLogs$"

. BELEŠKE     Putanje registratora po https://aka.ms/securebootplaybook:       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing

    SOFTVER SE PRUŽA "KAKAV JESTE", BEZ BILO KAKVE GARANCIJE, IZRIČITE ILI     PODRAZUMEVANO, UKLJUČUJUĆI, ALI NE OGRANIČAVAJUĆI SE NA GARANCIJE ZA PODSTIČU NA RASPOREĐENU ROBU,     PODSTIČE SE NA ODREĐENU NAMENU I NEOŠTEĆENO. NI U KOJEM SE DOGAĐAJU NEĆE     AUTORI ILI AUTORI KOJI DRŽE AUTORSKA PRAVA SNOSE ODGOVORNOST ZA BILO KAKVE ZAHTEVE, ŠTETE ILI DRUGE     ODGOVORNOST, BILO U RADNJI UGOVORA, DELIKATESA ILI NA NEKI DRUGI NAČIN, NA OSNOVU     VAN ILI U VEZI SA SOFTVEROM, UPOTREBOM ILI DRUGIM POSLOVAMA U     SOFTVER.#> param(     [Parameter(Obavezno = $false)]     [niska]$OutputPath )

# Preuzmi URL: https://aka.ms/getsecureboot -> "Uzorci primene i nadgledanja" # Napomena: Ova skripta se pokreće na krajnjim tačkama radi prikupljanja podataka o statusu bezbednog pokretanja.

# 1. Ime hosta # PS verzija: Sve | Administrator: Ne | Sistemski zahtevi: nijedan pokušajte {     $hostname = $env:COMPUTERNAME     if ([niska]::IsNullOrEmpty($hostname)) {         Write-Warning "Nije moguće utvrditi ime hosta"         $hostname = "Nepoznato"     }     Write-Host "Ime hosta: $hostname" } hvatanje {     Write-Warning "Greška pri dobavljanju imena hosta: $_"     $hostname = "Greška"     Write-Host "Ime hosta: $hostname" }

# 2. Vreme prikupljanja # PS verzija: Sve | Administrator: Ne | Sistemski zahtevi: nijedan pokušajte {     $collectionTime = Get-Date     if ($null -eq $collectionTime) {         Write-Warning "Nije moguće preuzeti trenutni datum/vreme"         $collectionTime = "Nepoznato"     }     Write-Host "Vreme kolekcije: $collectionTime" } hvatanje {     Write-Warning "Greška pri preuzimanju datuma/vremena: $_"     $collectionTime = "Greška"     Write-Host "Vreme kolekcije: $collectionTime" }

# Registrator: Glavni ključ bezbednog pokretanja (3 vrednosti)

# 3. SecureBootEnabled # PS verzija: 3.0+ | Administrator: može biti potrebno | Sistemski zahtevi: sistem omogućen za UEFI/bezbedno pokretanje sistema pokušajte {     $secureBootEnabled = Confirm-SecureBootUEFI -Prekid greške     Write-Host "Omogućeno bezbedno pokretanje sistema: $secureBootEnabled" } hvatanje {     Write-Warning "Nije moguće utvrditi status bezbednog pokretanja putem cmdlet komande: $_"     # Isprobajte povratne informacije u registratoru     pokušajte {         $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host "Omogućeno bezbedno pokretanje sistema: $secureBootEnabled"     } hvatanje {         Write-Warning "Nije moguće utvrditi status bezbednog pokretanja putem registratora. Sistem možda ne podržava UEFI/bezbedno pokretanje."         $secureBootEnabled = $null         Write-Host "Omogućeno bezbedno pokretanje sistema: nije dostupno"     } }

# 4. HighConfidenceOptOut # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host "Odbijanje saglasnosti visokog stepena pouzdanosti: $highConfidenceOptOut" } hvatanje {     # HighConfidenceOptOut je opcionalno – nije prisutan u većini sistema     $highConfidenceOptOut = $null     Write-Host "Odbijanje saglasnosti visokog stepena pouzdanosti: nije postavljeno" }

# 4b. MicrosoftUpdateManagedOptIn # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name MicrosoftUpdateManagedOptIn -ErrorAction Stop     $microsoftUpdateManagedOptIn = $regValue.MicrosoftUpdateManagedOptIn     Write-Host "Microsoft Update Managed Dat In: $microsoftUpdateManagedOptIn" } hvatanje {     # MicrosoftUpdateManagedOptIn je opcionalno – nije prisutan u većini sistema     $microsoftUpdateManagedOptIn = $null     Write-Host "Microsoft Update Managed Dat In: Not Set" }

# 5. Dostupne ispravke # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     if ($null -ne $availableUpdates) {         # Konvertuj u heksadecimalni format         $availableUpdatesHex = "0x{0:X}" -f $availableUpdates         Write-Host "Dostupno Novosti: $availableUpdatesHex"     } još {         Write-Host "Dostupno Novosti: Nije dostupno"     } } hvatanje {     Write-Warning "AvailableUpdates ključ registratora nije pronađen ili nedostupan"     $availableUpdates = $null     Write-Host "Dostupno Novosti: Nije dostupno" }

# 5b. AvailableUpdatesPolicy (trajna vrednost koju kontroliše GPO) # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdatesPolicy -ErrorAction Stop     $availableUpdatesPolicy = $regValue.AvailableUpdatesPolicy     if ($null -ne $availableUpdatesPolicy) {         # Konvertuj u heksadecimalni format         $availableUpdatesPolicyHex = "0x{0:X}" -f $availableUpdatesPolicy         Write-Host "Dostupne Novosti: $availableUpdatesPolicyHex"     } još {         Write-Host "Dostupne Novosti: nije postavljeno"     } } hvatanje {     # AvailableUpdatesPolicy je opcionalno – podešeno samo kada se primenjuje GPO     $availableUpdatesPolicy = $null     Write-Host "Dostupne Novosti smernice: nije postavljeno" }

# Registrator: Ključ za servisiranje (3 vrednosti)

# 6. UEFICA2023Status # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop     $uefica 2023Status = $regValue.UEFICA2023Status     Write-Host "Windows UEFI CA 2023 status: $uefica 2023Status" } hvatanje {     Write-Warning "Ključ registratora Windows UEFI CA 2023 statusa nije pronađen ili nedostupan"     $uefica 2023Status = $null     Write-Host "Windows UEFI CA 2023 status: Nije dostupno" }

# 7. UEFICA2023Greška # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host "UEFI CA 2023 greška: $uefica 2023Greška" } hvatanje {     # UEFICA2023Greška postoji samo ako je došlo do greške - odsustvo je dobro     $uefica 2023Error = $null     Write-Host "UEFI CA 2023 greška: nijedno" }

# 8. UEFICA2023ErrorEvent # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023ErrorEvent -ErrorAction Stop     $uefica 2023ErrorEvent = $regValue.UEFICA2023ErrorEvent     Write-Host "Događaj greške UEFI CA 2023: $uefica 2023ErrorEvent" } hvatanje {     $uefica 2023ErrorEvent = $null     Write-Host "Događaj greške UEFI CA 2023: Nije dostupno" }

# Registrator: Atributi uređaja (7 vrednosti: 9-15)

# 9. OEMManufacturerName # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     if ([niska]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName je prazno"         $oemManufacturerName = "Nepoznato"     }     Write-Host "Ime proizvođača OEM proizvođača: $oemManufacturerName" } hvatanje {     Write-Warning "OEMManufacturerName ključ registratora nije pronađen ili nedostupan"     $oemManufacturerName = $null     Write-Host "Ime proizvođača OEM proizvođača: nije dostupno" }

# 10. OEMModelSystemFamily # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     if ([niska]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily je prazan"         $oemModelSystemFamily = "Nepoznato"     }     Write-Host "Porodica sistema OEM modela: $oemModelSystemFamily" } hvatanje {     Write-Warning "OEMModelSystemFamily ključ registratora nije pronađen ili nedostupan"     $oemModelSystemFamily = $null     Write-Host "OEM Model System Family: Not available" }

# 11. OEMModelNumber # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     if ([niska]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber je prazan"         $oemModelNumber = "Nepoznato"     }     Write-Host "Broj OEM modela: $oemModelNumber" } hvatanje {     Write-Warning "OEMModelNumber ključ registratora nije pronađen ili nedostupan"     $oemModelNumber = $null     Write-Host "Broj OEM modela: nije dostupan" }

# 12. Verzija firmvera # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     if ([niska]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning "FirmwareVersion je prazna"         $firmwareVersion = "Nepoznato"     }     Write-Host "Verzija firmvera: $firmwareVersion" } hvatanje {     Write-Warning "Ključ registratora FirmwareVersion nije pronađen ili nedostupan"     $firmwareVersion = $null     Write-Host "Verzija firmvera: nije dostupna" }

# 13. FirmwareReleaseDate # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     if ([niska]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning "FirmwareReleaseDate je prazan"         $firmwareReleaseDate = "Nepoznato"     }     Write-Host "Datum izdavanja firmvera: $firmwareReleaseDate" } hvatanje {     Write-Warning "FirmwareReleaseDate ključ registratora nije pronađen ili nedostupan"     $firmwareReleaseDate = $null     Write-Host "Datum izdavanja firmvera: nije dostupan" }

# 14. OSArchitecture # PS verzija: Sve | Administrator: Ne | Sistemski zahtevi: nijedan pokušajte {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([niska]::IsNullOrEmpty($osArchitecture)) {         # Isprobajte povratne informacije u registratoru         $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([niska]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "Nije moguće utvrditi OSArchitecture"         $osArchitecture = "Nepoznato"     }     Write-Host "Arhitektura operativnog sistema: $osArchitecture" } hvatanje {     Write-Warning "Greška pri dobavljanju OSArchitecture: $_"     $osArchitecture = "Nepoznato"     Write-Host "Arhitektura operativnog sistema: $osArchitecture" }

# 15. CanAttemptUpdateAfter (FILETIME) # PS verzija: Sve | Administrator: može biti potrebno | Sistemski zahtevi: nijedan pokušajte {     $regValue = Get-ItemProperty -Putanja "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Konvertuj FILETIME u UTC DateTime – skladišta u registratoru kao REG_BINARY (bajt[]) ili REG_QWORD (dugački)     if ($null -ne $canAttemptUpdateAfter) {         pokušajte {             if ($canAttemptUpdateAfter -is [byte[]]) {                 $fileTime = [BitConverter]::ToInt64($canAttemptUpdateAfter, 0)                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($fileTime). ToUniversalTime()             } elseif ($canAttemptUpdateAfter -is [long]) {                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter). ToUniversalTime()             }         } hvatanje {             Write-Warning "Nije moguće konvertovati CanAttemptUpdateAfter FILETIME u DateTime"         }     }     Write-Host "Može da pokuša ažuriranje posle: $canAttemptUpdateAfter" } hvatanje {     Write-Warning "CanAttemptUpdateAfter ključ registratora nije pronađen ili nedostupan"     $canAttemptUpdateAfter = $null     Write-Host "Može da pokuša ažuriranje posle: nije dostupno" }

# Evidencije događaja: Sistemska evidencija (10 vrednosti: 16-25)

# 16-25. Upiti za evidenciju događaja # ID-ovi događaja: # 1801 - Pokrenuta je ispravka, potrebno je ponovno pokretanje # 1808 - Ažuriranje je uspešno dovršeno # 1795 - Firmver je vratio grešku (uhvati kôd greške) # 1796 - Greška evidentirana pomoću koda greške (kôd hvatanja) # 1800 - Potrebno je ponovno pokretanje (NOT greška - ažuriranje će se nastaviti nakon ponovnog pokretanja sistema) # 1802 - Poznati problem sa firmverom je blokirao ažuriranje (KI_<broj> Iz programa SkipReason) # 1803 - Nije pronađena odgovarajuća KEK ispravka (OEM mora da obezbedi KEK potpisan sa PK) # PS verzija: 3.0+ | Administrator: možda će biti potrebno za sistemsku evidenciju | Sistemski zahtevi: nijedan pokušajte {     # Izvrši upit za sve relevantne ID-e događaja bezbednog pokretanja     $allEventIds = @(1795, 1796, 1800, 1801, 1802, 1803, 1808)     $events = @(Get-WinEvent -FilterHashtable @{LogName='System'; ID=$allEventIds} -MaxEvents 50 -ErrorAction Stop)

    ako ($events. Broj -eq 0) {         Write-Warning "Nije pronađen nijedan događaj bezbednog pokretanja u evidenciji sistema"         $latestEventId = $null         $bucketId = $null         $confidence = $null         $skipReasonKnownIssue = $null         $event 1801Count = 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 1803Count = 0         $missingKEK = $false         Write-Host "Najnoviji ID događaja: nije dostupan"         Write-Host "ID grupe: nije dostupan"         Write-Host "Pouzdanost: nije dostupno"         Write-Host "Događaj 1801 Broj: 0"         Write-Host "Događaj 1808 Count: 0"     } još {         # 16. NajnovijiId         $latestEvent = $events | Sort-Object -Opadajući redosled | Select-Object - Prvih 1         if ($null -eq $latestEvent) {             Write-Warning "Nije moguće utvrditi najnoviji događaj"             $latestEventId = $null             Write-Host "Najnoviji ID događaja: nije dostupan"         } još {             $latestEventId = $latestEvent.Id             Write-Host "Najnoviji ID događaja: $latestEventId"         }

        # 17. BucketID – izdvojena iz događaja 1801/1808         if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message - podudaranje 'BucketId:\s*(.+)') {                 $bucketId = $matches[1]. Skrati()                 Write-Host "ID kontejnera: $bucketId"             } još {                 Write-Warning "ID grupe nije pronađen u poruci o događaju"                 $bucketId = $null                 Write-Host "ID grupe: nije pronađen u događaju"             }         } još {             Write-Warning "Najnoviji događaj ili poruka su bez vrednosti, nije moguće izdvojiti ID grupe"             $bucketId = $null             Write-Host "ID grupe: nije dostupan"         }

        # 18. Confidence – izdvojeno iz događaja 1801/1808         if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match 'BucketConfidenceLevel:\s*(.+)') {                 $confidence = $matches[1]. Skrati()                 Write-Host "Pouzdanost: $confidence"             } još {                 Write-Warning "Nivo pouzdanosti nije pronađen u poruci događaja"                 $confidence = $null                 Write-Host "Pouzdanost: nije pronađeno u događaju"             }         } još {             Write-Warning "Najnoviji događaj ili poruka su bez vrednosti, nije moguće izdvojiti pouzdanost"             $confidence = $null             Write-Host "Pouzdanost: nije dostupno"         }

        # 18b. SkipReason – izdvoji KI_<broj> iz funkcije SkipReason u istom događaju kao i ID grupe         # Ovo hvata ID-ove poznatog problema koji se pojavljuju zajedno sa ID-om kontejnera/pouzdanošću (ne samo događaj 1802)         $skipReasonKnownIssue = $null         if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match "SkipReason:\s*(KI_\d+)") {                 $skipReasonKnownIssue = $matches[1]                 Write-Host "Poznati problem preskoči reason: $skipReasonKnownIssue" -Boja prednjeg plana žuta             }         }

        # 19. Event1801Count         $event 1801Array = @($events | Where-Object {$_. Id -eq 1801})         $event 1801Count = $event 1801Array.Count         Write-Host "Broj događaja 1801: $event 1801Count"

        # 20. Event1808Count         $event 1808Array = @($events | Where-Object {$_. Id -eq 1808})         $event 1808Count = $event 1808Array.Count         Write-Host "Događaj 1808 Count: $event 1808Count"                  # Pokretanje promenljivih događaja greške         $event 1795Count = 0         $event 1795ErrorCode = $null         $event 1796Count = 0         $event 1796ErrorCode = $null         $event 1800Count = 0         $rebootPending = $false         $event 1802Count = 0         $knownIssueId = $null         $event 1803Count = 0         $missingKEK = $false                  # Proverite da li postoje događaji grešaka samo ako ažuriranje NIJE dovršeno         # Preskoči analizu grešaka ako: 1808 je najnoviji događaj OR UEFICA2023Status je "Ažurirano"         $updateComplete = ($latestEventId -eq 1808) -ili ($uefica 2023Status -eq "Ažurirano")                  ako (-ne $updateComplete) {             Write-Host "Ažuriranje nije dovršeno – provera da li postoje događaji grešaka..." - Boja prednjeg plana žuta                          # 21. Event1795 - Greška firmvera (uhvati kôd greške)             $event 1795Array = @($events | Where-Object {$_. Id -eq 1795})             $event 1795Count = $event 1795Array.Count             if ($event 1795Count -gt 0) {                 $latestEvent 1795 = $event 1795Array | Sort-Object -Opadajući redosled | Select-Object - Prvih 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 "Broj događaja 1795 (greška firmvera): $event 1795Count" $(if ($event 1795ErrorCode) { "Kôd: $event 1795ErrorCode" })             }                          # 22. Event1796 – Evidentirani kôd greške (uhvati kôd greške)             $event 1796Array = @($events | Where-Object {$_. Id -eq 1796})             $event 1796Count = $event 1796Array.Count             if ($event 1796Count -gt 0) {                 $latestEvent 1796 = $event 1796Array | Sort-Object -Opadajući redosled | Select-Object - Prvih 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 "Događaj 1796 (evidentirano greškama): $event 1796Count" $(if ($event 1796ErrorCode) { "Kôd: $event 1796ErrorCode" })             }                          # 23. Event1800 - Potrebno je ponovno pokretanje (NOT greška - ažuriranje će se nastaviti nakon ponovnog pokretanja)             $event 1800Array = @($events | Where-Object {$_. Id -eq 1800})             $event 1800Count = $event 1800Array.Count             $rebootPending = $event 1800Count -gt 0             ako ($rebootPending) {                 Write-Host "Događaj 1800 (ponovno pokretanje je na čekanju): Ažuriranje će se nastaviti nakon ponovnog pokretanja sistema" -Prednji planColor Cyan             }                          # 24. Event1802 - Poznati problem sa firmverom (beležite KI_<broj> Funkcije SkipReason)             $event 1802Array = @($events | Where-Object {$_. Id -eq 1802})             $event 1802Count = $event 1802Array.Count             if ($event 1802Count -gt 0) {                 $latestEvent 1802 = $event 1802Array | Sort-Object -Opadajući redosled | Select-Object - Prvih 1                 if ($latestEvent 1802.Message -match "SkipReason:\s*(KI_\d+)") {                     $knownIssueId = $matches[1]                 }                 Write-Host "Događaj 1802 (poznati problem firmvera) Prebrojavanje: $event 1802Count" $(if ($knownIssueId) { "KI: $knownIssueId" })             }                          # 25. Event1803 - Nedostaje KEK ispravka (OEM mora da obezbedi KEK potpisan sa PK)             $event 1803Array = @($events | Where-Object {$_. Id -eq 1803})             $event 1803Count = $event 1803Array.Count             $missingKEK = $event 1803Count -gt 0             ako ($missingKEK) {                 Write-Host "Događaj 1803 (nedostaje KEK): OEM mora da obezbedi POTPISANI KEK" -Prednji planColor Žuto             }         } još {             Write-Host "Ažuriranje je dovršeno (Događaj 1808 ili Status=Ažurirano) - preskakanje analize grešaka" -Boja prednjeg plana – zelena         }     } } hvatanje {     Write-Warning "Greška pri preuzimanju evidencija događaja. Možda će biti potrebne administratorske privilegije: $_"     $latestEventId = $null     $bucketId = $null     $confidence = $null     $skipReasonKnownIssue = $null     $event 1801Count = 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 1803Count = 0     $missingKEK = $false     Write-Host "Najnoviji ID događaja: greška"     Write-Host "ID grupe: greška"     Write-Host "Pouzdanost: greška"     Write-Host "Događaj 1801 Broj: 0"     Write-Host "Događaj 1808 Count: 0" }

# WMI/CIM upiti (5 vrednosti)

# 26. Verzija operativnog sistema # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski zahtevi: nijedan pokušajte {     $osInfo = Get-CimInstance Win32_OperatingSystem -Prekid greške     if ($null -eq $osInfo -ili [string]::IsNullOrEmpty($osInfo.Version)) {         Write-Warning "Nije moguće preuzeti verziju operativnog sistema"         $osVersion = "Nepoznato"     } još {         $osVersion = $osInfo.Version     }     Write-Host "Verzija operativnog sistema: $osVersion" } hvatanje {     # CIM možda neće uspeti u nekim okruženjima – koristite povratne informacije     $osVersion = [System.Environment]::OSVersion.Version.ToString()     if ([niska]::IsNullOrEmpty($osVersion)) { $osVersion = "Nepoznato" }     Write-Host "Verzija operativnog sistema: $osVersion" }

# 27. Vreme poslednjeg pokretanja # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski zahtevi: nijedan pokušajte {     $osInfo = Get-CimInstance Win32_OperatingSystem -Prekid greške     if ($null -eq $osInfo -ili $null -eq $osInfo.LastBootUpTime) {         Write-Warning "Nije moguće preuzeti vreme poslednjeg pokretanja"         $lastBootTime = $null         Write-Host "Vreme poslednjeg pokretanja: nije dostupno"     } još {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host "Vreme poslednjeg pokretanja: $lastBootTime"     } } hvatanje {     # CIM možda neće uspeti u nekim okruženjima – koristite povratne informacije     pokušajte {         $lastBootTime = (Get-Process -Id 0 -ErrorAction SilentlyContinue). Vreme početka     } hvatanje {         $lastBootTime = $null     }     ako ($lastBootTime) { Write-Host "Vreme poslednjeg pokretanja: $lastBootTime" } još { Write-Host "Vreme poslednjeg pokretanja: Nije dostupno" } }

# 28. BaseBoardManufacturer # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski zahtevi: nijedan pokušajte {     $baseBoard = Get-CimInstance Win32_BaseBoard -Tačka greške     if ($null -eq $baseBoard -ili [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {         Write-Warning "Nije moguće preuzeti proizvođača osnovne table"         $baseBoardManufacturer = "Nepoznato"     } još {         $baseBoardManufacturer = $baseBoard.Proizvođač     }     Write-Host "Proizvođač osnovne table: $baseBoardManufacturer" } hvatanje {     # CIM možda ne uspe - informacije o osnovnoj tabli su dodatne     $baseBoardManufacturer = "Nepoznato"     Write-Host "Proizvođač baze table: $baseBoardManufacturer" }

# 29. BaseBoardProduct # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski zahtevi: nijedan pokušajte {     $baseBoard = Get-CimInstance Win32_BaseBoard -Tačka greške     if ($null -eq $baseBoard -ili [string]::IsNullOrEmpty($baseBoard.Product)) {         Write-Warning "Nije bilo moguće preuzeti proizvod sa osnovne table"         $baseBoardProduct = "Nepoznato"     } još {         $baseBoardProduct = $baseBoard.Product     }     Write-Host "Osnovni proizvod: $baseBoardProduct" } hvatanje {     # CIM možda ne uspe - informacije o osnovnoj tabli su dodatne     $baseBoardProduct = "Nepoznato"     Write-Host "Osnovni proizvod: $baseBoardProduct" }

# 30. SecureBootTaskEnabled # PS verzija: Sve | Administrator: Ne | Sistemski zahtevi: Planirani zadatak postoji # Proverava da li je zadatak "Bezbedno pokretanje-ažuriranje" omogućen $secureBootTaskEnabled = $null $secureBootTaskStatus = "Nepoznato" pokušajte {     $taskOutput = schtasks.exe /Query /TN "\Microsoft\Windows\PI\Secure-Boot-Update" /FO CSV 2>&1     if ($LASTEXITCODE -eq 0) {         $taskData = $taskOutput | ConvertFrom-Csv         ako ($taskData) {             $secureBootTaskStatus = $taskData.Status             $secureBootTaskEnabled = ($taskData.Status -eq "Spremno" -ili $taskData.Status -eq "Pokrenuto")         }     } još {         $secureBootTaskStatus = "NotFound"         $secureBootTaskEnabled = $false     }     if ($secureBootTaskEnabled -eq $false) {         Write-Host "SecureBoot Update Task: $secureBootTaskStatus (omogućeno: $secureBootTaskEnabled)" -ForegroundColor Yellow     } još {         Write-Host "SecureBoot Update Task: $secureBootTaskStatus (omogućeno: $secureBootTaskEnabled)" -ForegroundColor Green     } } hvatanje {     $secureBootTaskStatus = "Greška"     $secureBootTaskEnabled = $false     Write-Host "SecureBoot Update Task: Error checking - $_" -ForegroundColor Red }

# 31. WinCS key Status (F33E0C8E002 - ažuriranje certifikata za bezbedno pokretanje) # PS verzija: Sve | Administrator: Da (za upit) | Sistemski zahtevi: WinCsFlags.exe $wincsKeyApplied = $null $wincsKeyStatus = "Nepoznato" pokušajte {     # Proveri uobičajene lokacije za WinCsFlags.exe     $wincsFlagsPath = $null     $possiblePaths = @(         "$env:SystemRoot\System32\WinCsFlags.exe",         "$env:SystemRoot\SysWOW64\WinCsFlags.exe"     )     foreach ($p in $possiblePaths) {         if (test-path $p) { $wincsFlagsPath = $p; break }     }     ako ($wincsFlagsPath) {         # Ključ specifičan za upit – zahteva administratorska prava         $queryOutput = & $wincsFlagsPath /query -- ključ F33E0C8E002 2>&1         $queryOutputStr = $queryOutput -join "'n"         if ($LASTEXITCODE -eq 0) {             # Proverite da li je taster primenjen (potražite stavku "Aktivna konfiguracija" ili slični indikator)             if ($queryOutputStr -match "Active Configuration.*:.*enabled" -ili $queryOutputStr -match "Configuration.*applied") {                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Primenjeno"                 Write-Host "WinCS key F33E0C8E002: Applied" -ForegroundColor Green             } elseif ($queryOutputStr -match "not found|Bez konfiguracije") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "NotApplied"                 Write-Host "WinCS key F33E0C8E002: Not Applied" -ForegroundColor Yellow             } još {                 # Ključ postoji - odjavljivanje za stanje                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Primenjeno"                 Write-Host "WinCS key F33E0C8E002: Applied" -ForegroundColor Green             }         } još {             # Proveri da li postoje određene poruke o grešci             if ($queryOutputStr -match "Access denied|administrator") {                 $wincsKeyStatus = "AccessDenied"                 Write-Host "WinCS key F33E0C8E002: Access denied (run as admin)" -ForegroundColor DarkGray             } elseif ($queryOutputStr -match "not found|Bez konfiguracije") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "NotApplied"                 Write-Host "WinCS key F33E0C8E002: Not Applied" -ForegroundColor Yellow             } još {                 $wincsKeyStatus = "QueryFailed"                 Write-Host "WinCS key F33E0C8E002: Query failed" -ForegroundColor Red             }         }     } još {         $wincsKeyStatus = "WinCsFlagsNotFound"         Write-Host "WinCS ključ F33E0C8E002: WinCsFlags.exe nije pronađen" - Boja prednjeg plana siva     } } hvatanje {     $wincsKeyStatus = "Greška"     Write-Host "WinCS key F33E0C8E002: Error checking - $_" -ForegroundColor Red }              

# ============================================================================= # Otkrivanje remediation - Izlaz statusa & izlazni kôd # =============================================================================

# Gradi objekat statusa iz svih prikupljenih podataka o zalihama $status = [poručeno]@{     UEFICA2023Status = $uefica 2023Status     UEFICA2023Error = $uefica 2023Greška     UEFICA2023ErrorEvent = $uefica 2023ErrorEvent     AvailableUpdates = if ($null -ne $availableUpdates) { $availableUpdatesHex } else { $null }     AvailableUpdatesPolicy = if ($null -ne $availableUpdatesPolicy) { $availableUpdatesPolicyHex } else { $null }     Ime hosta = $hostname     CollectionTime = if ($collectionTime -is [datetime]) { $collectionTime.ToString("o") } else { "$collectionTime" }     SecureBootEnabled = $secureBootEnabled     HighConfidenceOptOut = $highConfidenceOptOut     MicrosoftUpdateManagedOptIn = $microsoftUpdateManagedOptIn     OEMManufacturerName = $oemManufacturerName     OEMModelSystemFamily = $oemModelSystemFamily     OEMModelNumber = $oemModelNumber     Firmververzija = $firmwareVersion     FirmwareReleaseDate = $firmwareReleaseDate     OSArchitecture = $osArchitecture     CanAttemptUpdateAfter = if ($canAttemptUpdateAfter -is [datetime]) { $canAttemptUpdateAfter.ToString("o") } else { "$canAttemptUpdateAfter" }     LatestEventId = $latestEventId     BucketId = $bucketId     Pouzdanost = $confidence     SkipReasonKnownIssue = $skipReasonKnownIssue # KI_<broj> od događaja SkipReason u događaju BucketId     Event1801Count = $event 1801Count     Event1808Count = $event 1808Count     # Događaji grešaka sa snimljenim detaljima     Event1795Count = $event 1795Count # Firmver je vratio grešku     Event1795ErrorCode = $event 1795ErrorCode # Kôd greške iz firmvera     Event1796Count = $event 1796Count # Evidentirani kôd greške     Event1796ErrorCode = $event 1796ErrorCode # Captured error code     Event1800Count = $event 1800Count # Potrebno je ponovno pokretanje (NOT greška)     Ponovno pokretanje na čekanju = $rebootPending # True ako je prisutan događaj 1800     Event1802Count = $event 1802Count # Poznat problem sa firmverom     KnownIssueId = $knownIssueId # KI_<broj> funkcije SkipReason     Event1803Count = $event 1803Count # Nedostaje KEK ispravka     MissingKEK = $missingKEK # OEM mora da obezbedi potpisani KEK sa PK-om     OSVersion = $osVersion     LastBootTime = if ($lastBootTime -is [datetime]) { $lastBootTime.ToString("o") } else { "$lastBootTime" }     BaseBoardManufacturer = $baseBoardManufacturer     BaseBoardProduct = $baseBoardProduct     SecureBootTaskEnabled = $secureBootTaskEnabled     SecureBootTaskStatus = $secureBootTaskStatus     WinCSKeyApplied = $wincsKeyApplied # True ako F33E0C8E002 se primeni ključ     WinCSKeyStatus = $wincsKeyStatus # Applied, NotApplied, WinCsFlagsNotFound itd. }

# Output the status - For data agregation $jsonOutput = $status | ConvertTo-Json - Komprimuj

# Ako je obezbeđen OutputPath, sačuvaj u datoteku; u suprotnom, izlaz u stdout if (-not [string]::IsNullOrEmpty($OutputPath)) {     # Validate OutputPath - preskoči ako izgleda kao zahtev za pomoć ili ima nevažeće znakove     ako ($OutputPath -podudaranje "^[/\-]" -ili $OutputPath -match "[<>:"|? *]') {         Write-Host "Naveden je nevažeći outputPath, izlaz u stdout" -Boja prednjeg plana žuta         Write-Output $jsonOutput         if ($secureBootEnabled -and $uefica 2023Status -eq "Updated") { exit 0 } else { exit 1 }     }          # Uverite se da izlazna fascikla postoji     if (-not (test-path $OutputPath)) {         pokušajte {             New-Item -ItemType direktorijum -Putanja $OutputPath -Force | Bez vrednosti         } hvatanje {             Write-Warning "Nije moguće kreirati izlaznu fasciklu: $OutputPath - $_"         }     }          # Sačuvaj u HOSTNAME_latest.json     $outputFile = Join-Path $OutputPath "$($hostname)_latest.json"     pokušajte {         $jsonOutput | Out-File -FilePath $outputFile -Šifrovanje UTF8 -Force         Write-Host "JSON sačuvan u: $outputFile" - Zelena boja prednjeg plana     } hvatanje {         Write-Warning "Nije moguće pisati u datoteku: $outputFile - $_"         # Vratite se u stdout         Write-Output $jsonOutput     } } još {     # Original behavior - out out to stdout     Write-Output $jsonOutput }

# Izlazni kôd: "Ažurirano" je vrednost uspeha po beležnici if ($secureBootEnabled -and $uefica 2023Status -eq "Updated") {     izađi 0 # bez problema } još {     izađi 1 # Sa problemom }

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.