Primjenjuje 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

Izvorni datum objave: 17. studenog 2025.

KB ID: 5072718

Promjena datuma

Promjena opisa

Veljača 24, 2026

  • Ažurirana je skripta prikupljanja podataka o oglednim inventarima sigurnog pokretanja.

Veljača 22, 2026

  • Ažurirana je skripta prikupljanja podataka o oglednim inventarima sigurnog pokretanja.

Veljača 13, 2026

  • Ažurirana je skripta prikupljanja podataka o oglednim inventarima sigurnog pokretanja.

Sample Secure Boot Inventory Data Collection script

Kopirajte i zalijepite tu oglednu skriptu i po potrebi izmijenite za svoje okruženje: skriptu zbirke podataka o oglednim inventarom sigurnog pokretanja.

< broj . SINOPSIS     Otkriva status ažuriranja certifikata sigurnog pokretanja za nadzor na razini cijele flote.

. OPIS     Ova skripta otkrivanja prikuplja status sigurnog pokretanja, vrijednosti registra za ažuriranje certifikata,     i informacije o uređaju. Daje JSON niz za praćenje i izvješćivanje.

    Kompatibilno s Intune popravke, prikupljanje utemeljeno na GPO-u i druge alate za upravljanje.Nije potrebna skripta popravka – to je samo nadzor.

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

. PARAMETAR OutputPath     Neobavezno. Put do mape u koju će se spremiti JSON datoteka.Ako je naveden, sprema HOSTNAME_latest.json u ovu mapu.Ako nije navedeno, izlaz JSON u stdout (izvorno ponašanje).

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

. PRIMJER     # Spremi u zajednički mrežni sadržaj (implementacija GPO-a)     .\Detect-SecureBootCertUpdateStatus.ps1 -OutputPath "\\server\SecureBootLogs$"

. BILJEŠKE     Putovi registra po https://aka.ms/securebootplaybook:       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR     IMPLICIRANA, UKLJUČUJUĆI, ALI NE OGRANIČAVAJUĆI SE NA JAMSTVA PRIKLADNOSTI ZA     PRIKLADNOSTI ZA ODREĐENU SVRHU I NEINFRINGEMENT. NI U KOJEM SLUČAJU     AUTORI ILI NOSITELJI AUTORSKIH PRAVA BIT ĆE     ODGOVORNOSTI, BEZ OBZIRA NA TO RADI LI SE O RADNJAMA UGOVORA,     IZVAN SOFTVERA ILI U VEZI SA SOFTVEROM ILI KORIŠTENJEM ILI DRUGIM POSLOVIMA U     SOFTVER.#> param(     [Parameter(Mandatory = $false)]     [niz]$OutputPath )

# DOWNLOAD URL: https://aka.ms/getsecureboot -> "Deployment and Monitoring Samples" # Napomena: ova skripta pokreće se na krajnjim točkama radi prikupljanja podataka o statusu sigurnog pokretanja.

# 1. Hostname # PS verzija: Sve | Administrator: Ne | Sistemski preduvjeti: nema pokušajte {     $hostname = $env:COMPUTERNAME     if ([niz]::IsNullOrEmpty($hostname)) {         Write-Warning "Nije moguće odrediti naziv glavnog računala"         $hostname = "Nepoznato"     }     Write-Host "Naziv glavnog računala: $hostname" } uhvatiti {     Write-Warning "Pogreška pri dohvaćanju naziva glavnog računala: $_"     $hostname = "Pogreška"     Write-Host "Naziv glavnog računala: $hostname" }

# 2. Vrijeme zbirke # PS verzija: Sve | Administrator: Ne | Sistemski preduvjeti: nema pokušajte {     $collectionTime = Get-Date     if ($null -eq $collectionTime) {         Write-Warning "Nije moguće dohvatiti trenutni datum/vrijeme"         $collectionTime = "Nepoznato"     }     Write-Host "Vrijeme prikupljanja: $collectionTime" } uhvatiti {     Write-Warning "Pogreška pri dohvaćanju datuma/vremena: $_"     $collectionTime = "Pogreška"     Write-Host "Vrijeme prikupljanja: $collectionTime" }

# Registry: Glavni ključ sigurnog pokretanja (3 vrijednosti)

# 3. SecureBootEnabled # PS verzija: 3.0+ | Administrator: Možda je potrebno | Sistemski preduvjeti: sustav koji podržava UEFI/Secure Boot pokušajte {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop     Write-Host "Omogućeno je sigurno pokretanje: $secureBootEnabled" } uhvatiti {     Write-Warning "Nije moguće odrediti status sigurnog pokretanja putem cmdleta: $_"     # Isprobajte rezervni registar     pokušajte {         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host "Omogućeno je sigurno pokretanje: $secureBootEnabled"     } uhvatiti {         Write-Warning "Nije moguće odrediti status sigurnog pokretanja putem registra. Sustav možda ne podržava UEFI/Secure Boot."         $secureBootEnabled = $null         Write-Host "Omogućeno je sigurno pokretanje: nije dostupno"     } }

# 4. HighConfidenceOptOut # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host "Odustajanje od visoke pouzdanosti: $highConfidenceOptOut" } uhvatiti {     # HighConfidenceOptOut nije obavezan – ne postoji na većini sustava     $highConfidenceOptOut = $null     Write-Host "Odustajanje od visoke pouzdanosti: nije postavljeno" }

# 4b. MicrosoftUpdateManagedOptIn # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name MicrosoftUpdateManagedOptIn -ErrorAction Stop     $microsoftUpdateManagedOptIn = $regValue.MicrosoftUpdateManagedOptIn     Write-Host "Microsoft Update Managed Opt In: $microsoftUpdateManagedOptIn" } uhvatiti {     # MicrosoftUpdateManagedOptIn nije obavezan – ne postoji na većini sustava     $microsoftUpdateManagedOptIn = $null     Write-Host "Microsoft Update Managed Opt In: Not Set" }

# 5. Dostupniažuriranja # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     if ($null -ne $availableUpdates) {         # Pretvori u heksadecimalni oblik         $availableUpdatesHex = "0x{0:X}" -f $availableUpdates         Write-Host "Dostupno Ažuriranja: $availableUpdatesHex"     } još {         Write-Host "Dostupno Ažuriranja: nije dostupno"     } } uhvatiti {     Write-Warning "Ključ registra AvailableUpdates nije pronađen ili mu nije moguće pristupiti"     $availableUpdates = $null     Write-Host "Dostupno Ažuriranja: nije dostupno" }

# 5b. AvailableUpdatesPolicy (trajna vrijednost kontrolirana GPO-om) # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -put "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdatesPolicy -ErrorAction Stop     $availableUpdatesPolicy = $regValue.AvailableUpdatesPolicy     if ($null -ne $availableUpdatesPolicy) {         # Pretvori u heksadecimalni oblik         $availableUpdatesPolicyHex = "0x{0:X}" -f $availableUpdatesPolicy         Write-Host "Dostupna Ažuriranja pravila: $availableUpdatesPolicyHex"     } još {         Write-Host "Dostupno Ažuriranja pravila: nije postavljeno"     } } uhvatiti {     # AvailableUpdatesPolicy nije obavezno – postavlja se samo kada se primjenjuje GPO     $availableUpdatesPolicy = $null     Write-Host "Dostupno Ažuriranja pravila: nije postavljeno" }

# Registar: servisni ključ (3 vrijednosti)

# 6. UEFICA2023Status # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Status -ErrorAction Stop     $uefica 2023Status = $regValue.UEFICA2023Status     Write-Host "Windows UEFI CA 2023 Status: $uefica 2023Status" } uhvatiti {     Write-Warning ključ registra "Windows UEFI CA 2023 Status nije pronađen ili nije dostupan"     $uefica 2023Status = $null     Write-Host "Windows UEFI CA 2023 Status: Not Available" }

# 7. UEFICA2023Pogreška # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Pogreška = $regValue.UEFICA2023Error     Write-Host pogreška "UEFI CA 2023: $uefica 2023Error" } uhvatiti {     # UEFICA2023Pogreška postoji samo ako je došlo do pogreške – izostanak je dobar     $uefica 2023Pogreška = $null     Write-Host pogreška "UEFI CA 2023: None" }

# 8. UEFICA2023ErrorEvent # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023ErrorEvent -ErrorAction Stop     $uefica 2023ErrorEvent = $regValue.UEFICA2023ErrorEvent     Write-Host "Događaj pogreške UEFI CA 2023: $uefica 2023ErrorEvent" } uhvatiti {     $uefica 2023ErrorEvent = $null     Write-Host "Događaj pogreške UEFI CA 2023: Nije dostupno" }

# Registar: Atributi uređaja (7 vrijednosti: 9-15)

# 9. OEMManufacturerName # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     if ([niz]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName je prazan"         $oemManufacturerName = "Nepoznato"     }     Write-Host "Naziv proizvođača OEM-a: $oemManufacturerName" } uhvatiti {     Write-Warning ključ registra "OEMManufacturerName nije pronađen ili nije dostupan"     $oemManufacturerName = $null     Write-Host "Naziv proizvođača OEM-a: nije dostupno" }

# 10. OEMModelSystemFamily # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     if ([niz]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily je prazan"         $oemModelSystemFamily = "Nepoznato"     }     Write-Host "OEM Model System Family: $oemModelSystemFamily" } uhvatiti {     Write-Warning ključ registra "OEMModelSystemFamily nije pronađen ili mu nije moguće pristupiti"     $oemModelSystemFamily = $null     Write-Host "OEM Model System Family: Not Available" }

# 11. OEMModelNumber # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     if ([niz]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber je prazan"         $oemModelNumber = "Nepoznato"     }     Write-Host "OEM broj modela: $oemModelNumber" } uhvatiti {     Write-Warning "Ključ registra OEMModelNumber nije pronađen ili mu nije moguće pristupiti"     $oemModelNumber = $null     Write-Host "Broj modela OEM-a: nije dostupno" }

# 12. FirmwareVersion # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     if ([niz]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning "FirmwareVersion je prazan"         $firmwareVersion = "Nepoznato"     }     Write-Host "Verzija opreme: $firmwareVersion" } uhvatiti {     Write-Warning "Ključ registra FirmwareVersion nije pronađen ili nije dostupan"     $firmwareVersion = $null     Write-Host "Verzija opreme: nije dostupno" }

# 13. FirmwareReleaseDate # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     if ([niz]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning "FirmwareReleaseDate is empty"         $firmwareReleaseDate = "Nepoznato"     }     Write-Host "Datum izdavanja opreme: $firmwareReleaseDate" } uhvatiti {     Write-Warning ključ registra "FirmwareReleaseDate nije pronađen ili mu nije moguće pristupiti"     $firmwareReleaseDate = $null     Write-Host "Datum izdavanja opreme: nije dostupno" }

# 14. OSArchitecture # PS verzija: Sve | Administrator: Ne | Sistemski preduvjeti: nema pokušajte {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([niz]::IsNullOrEmpty($osArchitecture)) {         # Isprobajte rezervni registar         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([niz]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "OSArchitecture nije moguće utvrditi"         $osArchitecture = "Nepoznato"     }     Write-Host "Arhitektura OS-a: $osArchitecture" } uhvatiti {     Write-Warning "Pogreška pri dohvaćanju OSArchitecture: $_"     $osArchitecture = "Nepoznato"     Write-Host "Arhitektura OS-a: $osArchitecture" }

# 15. CanAttemptUpdateAfter (FILETIME) # PS verzija: Sve | Administrator: Možda je potrebno | Sistemski preduvjeti: nema pokušajte {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Pretvori FILETIME u UTC DateTime – pohranjuje se u registar kao REG_BINARY (bajt[]) ili REG_QWORD (dugo)     if ($null -ne $canAttemptUpdateAfter) {         pokušajte {             if ($canAttemptUpdateAfter -is [bajt[]]) {                 $fileTime = [BitConverter]::ToInt64($canAttemptUpdateAfter, 0)                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($fileTime). ToUniversalTime()             } elseif ($canAttemptUpdateAfter -is [long]) {                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter). ToUniversalTime()             }         } uhvatiti {             Write-Warning "Nije moguće pretvoriti CanAttemptUpdateAfter FILETIME u DateTime"         }     }     Write-Host "Može pokušati ažurirati nakon: $canAttemptUpdateAfter" } uhvatiti {     Write-Warning "Ključ registra CanAttemptUpdateAfter nije pronađen ili mu nije moguće pristupiti"     $canAttemptUpdateAfter = $null     Write-Host "Može pokušati ažurirati nakon: nije dostupno" }

# Zapisnici događaja: zapisnik sustava (10 vrijednosti: 16-25)

# 16-25. Upiti zapisnika događaja # ID-ovi događaja: # 1801 – ažuriranje je pokrenuto, potrebno je ponovno pokretanje # 1808 – ažuriranje je uspješno dovršeno # 1795 – pogreška vraćene opreme (kod pogreške snimanja) # 1796 – pogreška zabilježena s kodom pogreške (kod za snimanje) # 1800 – potrebno je ponovno pokretanje (NIJE pogreška – ažuriranje će se nastaviti nakon ponovnog pokretanja) # 1802 – ažuriranje je blokirao poznati problem s programom (KI_<broj> iz skipReason) # 1803 – odgovarajuće KEK ažuriranje nije pronađeno (OEM treba dostaviti PK potpisano KEK) # PS verzija: 3.0+ | Administrator: Možda će biti potrebno za zapisnik sustava | Sistemski preduvjeti: nema pokušajte {     # Upit za sve relevantne ID-ove događaja sigurnog pokretanja     $allEventIds = @(1795, 1796, 1800, 1801, 1802, 1803, 1808)     $events = @(Get-WinEvent -FilterHashtable @{LogName='Sustav'; ID=$allEventIds} -MaxEvents 50 -ErrorAction Stop)

    ako ($events. Count -eq 0) {         Write-Warning "U zapisniku sustava nije pronađen nijedan događaj sigurnog pokretanja"         $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 "ID najnovijeg događaja: nije dostupno"         Write-Host "ID grupe: nije dostupno"         Write-Host "Pouzdanost: nije dostupno"         Write-Host "Događaj 1801 Broj: 0"         Write-Host "Događaj 1808 Broj: 0"     } još {         # 16. LatestEventId         $latestEvent = $events | Sort-Object TimeCreated -Descending | Select-Object - Prvi 1         if ($null -eq $latestEvent) {             Write-Warning "Nije moguće odrediti najnoviji događaj"             $latestEventId = $null             Write-Host "ID najnovijeg događaja: nije dostupno"         } još {             $latestEventId = $latestEvent.Id             Write-Host "ID najnovijeg događaja: $latestEventId"         }

        # 17. BucketID – izdvojeno iz događaja 1801/1808         if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match 'BucketId:\s*(.+)') {                 $bucketId = $matches[1]. Skraćivanje()                 Write-Host "ID grupe: $bucketId"             } još {                 Write-Warning "BucketId nije pronađen u poruci događaja"                 $bucketId = $null                 Write-Host "ID grupe: nije pronađeno u događaju"             }         } još {             Write-Warning "Najnoviji događaj ili poruka ima vrijednost null, ne može izdvojiti BucketId"             $bucketId = $null             Write-Host "ID grupe: nije dostupno"         }

        # 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]. Skraćivanje()                 Write-Host "Pouzdanost: $confidence"             } još {                 Write-Warning "Razina pouzdanosti nije pronađena u poruci događaja"                 $confidence = $null                 Write-Host "Pouzdanost: nije pronađeno u događaju"             }         } još {             Write-Warning "Najnoviji događaj ili poruka ima vrijednost null, ne može izdvojiti pouzdanost"             $confidence = $null             Write-Host "Pouzdanost: nije dostupno"         }

        #18b. SkipReason – izdvajanje KI_<broj> iz funkcije SkipReason u istom događaju kao BucketId         # Time se snima ID-ovi poznatih problema koji se pojavljuju uz BucketId/Confidence (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 "SkipReason poznati problem: $skipReasonKnownIssue" -Boja prednjeg plana Žuta             }         }

        # 19. Događaj1801Count         $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 "Broj događaja 1808: $event 1808Count"                  # Inicijaliziraj varijable događaja pogreš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                  # Samo provjerite ima li događaja pogreške ako ažuriranje NIJE dovršeno         # Preskoči analizu pogrešaka ako: 1808 je najnoviji događaj ILI UEFICA2023Status je "Ažurirano"         $updateComplete = ($latestEventId -eq 1808) -or ($uefica 2023Status -eq "Ažurirano")                  if (-not $updateComplete) {             Write-Host "Ažuriranje nije dovršeno – provjera događaja pogrešaka..." - Boja prednjeg plana Žuta                          # 21. Event1795 – pogreška opreme (kod pogreške snimanja)             $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 - Prvi 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 (pogreška opreme): $event 1795Count" $(ako ($event 1795ErrorCode) { "Kod: $event 1795ErrorCode" })             }                          # 22. Event1796 – zapisan kôd pogreške (kod pogreške snimanja)             $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 - Prvi 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 broj "Događaj 1796 (zapisana pogreška): $event 1796Count" $(ako ($event 1796ErrorCode) { "Kod: $event 1796ErrorCode" })             }                          # 23. Event1800 – potrebno je ponovno pokretanje (NIJE pogreš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             if ($rebootPending) {                 Write-Host "Događaj 1800 (na čekanju ponovnog pokretanja): ažuriranje će se nastaviti nakon ponovnog pokretanja" -ForegroundColor Cyan             }                          # 24. Event1802 – poznati problem s programom (snimanje KI_<broj> iz 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 TimeCreated -Descending | Select-Object - Prvi 1                 if ($latestEvent 1802.Message -match 'SkipReason:\s*(KI_\d+)') {                     $knownIssueId = $matches[1]                 }                 Write-Host broj "Događaj 1802 (poznati problem s programom): $event 1802Count" $(ako ($knownIssueId) { "KI: $knownIssueId" })             }                          # 25. Event1803 – nedostaje KEK ažuriranje (OEM treba dostaviti PK potpisani KEK)             $event 1803Array = @($events | Where-Object {$_. Id -eq 1803})             $event 1803Count = $event 1803Array.Count             $missingKEK = $event 1803Count -gt 0             if ($missingKEK) {                 Write-Host "Događaj 1803 (nedostaje KEK): OEM treba dostaviti PK potpisan KEK" -ForegroundColor Yellow             }         } još {             Write-Host "Ažuriranje je dovršeno (događaj 1808 ili status=ažurirano) – preskače se analiza pogrešaka" -ForegroundColor Green         }     } } uhvatiti {     Write-Warning "Pogreška pri dohvaćanju zapisnika događaja. Možda će biti potrebne administratorske ovlasti: $_"     $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 "ID najnovijeg događaja: pogreška"     Write-Host "ID grupe: pogreška"     Write-Host "Pouzdanost: pogreška"     Write-Host "Događaj 1801 Broj: 0"     Write-Host "Događaj 1808 Broj: 0" }

# WMI/CIM upiti (5 vrijednosti)

# 26. OSVersion # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: nema pokušajte {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     if ($null -eq $osInfo -or [string]::IsNullOrEmpty($osInfo.Version)) {         Write-Warning "Nije moguće dohvatiti verziju OS-a"         $osVersion = "Nepoznato"     } još {         $osVersion = $osInfo.version     }     Write-Host "Verzija OS-a: $osVersion" } uhvatiti {     # CIM možda neće uspjeti u nekim okruženjima – koristite rezervni     $osVersion = [System.Environment]::OSVersion.Version.ToString()     if ([niz]::IsNullOrEmpty($osVersion)) { $osVersion = "Nepoznato" }     Write-Host "Verzija OS-a: $osVersion" }

# 27. LastBootTime # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: nema pokušajte {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop     if ($null -eq $osInfo -or $null -eq $osInfo.LastBootUpTime) {         Write-Warning "Nije moguće dohvatiti vrijeme zadnjeg pokretanja"         $lastBootTime = $null         Write-Host "Vrijeme zadnjeg pokretanja: nije dostupno"     } još {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host "Vrijeme zadnjeg pokretanja: $lastBootTime"     } } uhvatiti {     # CIM možda neće uspjeti u nekim okruženjima – koristite rezervni     pokušajte {         $lastBootTime = (Get-Process -ID 0 -ErrorAction SilentlyContinue). Vrijeme početka     } uhvatiti {         $lastBootTime = $null     }     if ($lastBootTime) { Write-Host "Last Boot Time: $lastBootTime" } else { Write-Host "Last Boot Time: Not Available" } }

# 28. BaseBoardManufacturer # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: nema pokušajte {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {         Write-Warning "Nije moguće dohvatiti proizvođača osnovne ploče"         $baseBoardManufacturer = "Nepoznato"     } još {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host "Proizvođač osnovne ploče: $baseBoardManufacturer" } uhvatiti {     # CIM may fail - baseboard info is supplementary     $baseBoardManufacturer = "Nepoznato"     Write-Host "Proizvođač osnovne ploče: $baseBoardManufacturer" }

# 29. BaseBoardProduct # PS verzija: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: nema pokušajte {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Product)) {         Write-Warning "Nije moguće dohvatiti proizvod osnovne ploče"         $baseBoardProduct = "Nepoznato"     } još {         $baseBoardProduct = $baseBoard.Product     }     Write-Host "Baseboard Product: $baseBoardProduct" } uhvatiti {     # CIM may fail - baseboard info is supplementary     $baseBoardProduct = "Nepoznato"     Write-Host "Osnovni proizvod: $baseBoardProduct" }

# 30. SecureBootTaskEnabled # PS verzija: Sve | Administrator: Ne | Sistemski preduvjeti: postoji zakazani zadatak # Provjerava je li omogućen zakazani zadatak sigurnog pokretanja $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         if ($taskData) {             $secureBootTaskStatus = $taskData.Status             $secureBootTaskEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')         }     } još {         $secureBootTaskStatus = "NotFound"         $secureBootTaskEnabled = $false     }     if ($secureBootTaskEnabled -eq $false) {         Write-Host "Zadatak ažuriranja SecureBoota: $secureBootTaskStatus (omogućeno: $secureBootTaskEnabled)" -ForegroundColor Yellow     } još {         Write-Host "Zadatak ažuriranja SecureBoota: $secureBootTaskStatus (omogućeno: $secureBootTaskEnabled)" -ForegroundColor Green     } } uhvatiti {     $secureBootTaskStatus = "Pogreška"     $secureBootTaskEnabled = $false     Write-Host "Zadatak ažuriranja SecureBoota: Provjera pogrešaka - $_" - Crveni prednji plan }

# 31. Status ključa za WinCS (F33E0C8E002 – ažuriranje certifikata za sigurno pokretanje) # PS verzija: Sve | Administrator: Da (za upit) | Sistemski preduvjeti: WinCsFlags.exe $wincsKeyApplied = $null $wincsKeyStatus = "Nepoznato" pokušajte {     # Provjerite uobičajena mjesta za WinCsFlags.exe     $wincsFlagsPath = $null     $possiblePaths = @(         "$env:SystemRoot\System32\WinCsFlags.exe",         "$env:SystemRoot\SysWOW64\WinCsFlags.exe"     )     foreach ($p u $possiblePaths) {         if (Test-Path $p) { $wincsFlagsPath = $p; break }     }     if ($wincsFlagsPath) {         # Ključ specifičan za upit – potrebna su administratorska prava         $queryOutput = & $wincsFlagsPath /query --key F33E0C8E002 2>&1         $queryOutputStr = $queryOutput -join "'n"         if ($LASTEXITCODE -eq 0) {             # Provjerite je li primijenjen ključ (potražite "Aktivna konfiguracija" ili sličan pokazatelj)             if ($queryOutputStr -match "Active Configuration.*:.*enabled" -or $queryOutputStr -match "Configuration.*applied") {                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Primijenjeno"                 Write-Host "WinCS Key F33E0C8E002: Applied" -ForegroundColor Green             } elseif ($queryOutputStr -match "nije pronađeno|Nema konfiguracije") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "Nije isporučeno"                 Write-Host "WinCS Key F33E0C8E002: Not Applied" -ForegroundColor Yellow             } još {                 # Ključ postoji - provjerite stanje izlaza                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Primijenjeno"                 Write-Host "WinCS Key F33E0C8E002: Applied" -ForegroundColor Green             }         } još {             # Provjerite postoje li određene poruke o pogreškama             if ($queryOutputStr -match "Pristup je odbijen|administrator") {                 $wincsKeyStatus = "AccessDenied"                 Write-Host "WinCS Key F33E0C8E002: Access denied (run as admin)" -ForegroundColor DarkGray             } elseif ($queryOutputStr -match "nije pronađeno|Nema konfiguracije") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "Nije isporučeno"                 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 key F33E0C8E002: WinCsFlags.exe found" -ForegroundColor Gray     } } uhvatiti {     $wincsKeyStatus = "Pogreška"     Write-Host "WinCS Key F33E0C8E002: Error checking - $_" -ForegroundColor Red }              

Ne, ne============================================================================= # Otkrivanje popravka – izlazni status & izlaznog koda # =============================================================================

# Objekt statusa međuverzije iz svih prikupljenih podataka o inventaru $status = [naručeno]@{     UEFICA2023Status = $uefica 2023Status     UEFICA2023Error = $uefica 2023Error     UEFICA2023ErrorEvent = $uefica 2023ErrorEvent     AvailableUpdates = ako ($null -ne $availableUpdates) { $availableUpdatesHex } još { $null }     AvailableUpdatesPolicy = ako ($null -ne $availableUpdatesPolicy) { $availableUpdatesPolicyHex } još { $null }     Naziv glavnog računala = $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     Pouzdanost = $confidence     SkipReasonKnownIssue = $skipReasonKnownIssue # KI_<broj> iz skipReason u događaju BucketId     Event1801Count = $event 1801Count     Event1808Count = $event 1808Count     # Događaji pogreške sa snimljenim detaljima     Event1795Count = $event 1795Count # Pogreška firmvera     Event1795ErrorCode = $event 1795ErrorCode # kôd pogreške iz programske opreme     Event1796Count = $event 1796Count # Kod pogreške prijavljen     Event1796ErrorCode = $event 1796ErrorCode # Snimljen kôd pogreške     Event1800Count = $event 1800Count # Potrebno je ponovno pokretanje (NIJE pogreška)     RebootPending = $rebootPending # True ako događaj 1800 postoji     Event1802Count = $event 1802Count # Poznati problem s firmverom     KnownIssueId = $knownIssueId # KI_<broj> iz skipReasona     Event1803Count = $event 1803Count # Nedostaje AŽURIRANJE KEK     MissingKEK = $missingKEK # OEM treba dostaviti PK potpisan KEK     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 primijeni tipka     WinCSKeyStatus = $wincsKeyStatus # Applied, NotApplied, WinCsFlagsNotFound itd. }

# Izlazni status – za prikupljanje podataka $jsonOutput = $status | ConvertTo-Json -Compress

# Ako je outputPath naveden, spremi u datoteku; u suprotnom izlaz u stdout if (-not [string]::IsNullOrEmpty($OutputPath)) {     # Validate OutputPath - skip if it looks like a help request or has invalid chars     if ($OutputPath -match '^[/\-]' -or $OutputPath -match '[<>:"|? *]') (         Write-Host "Navedeni OutputPath nije valjan, izlaz u stdout" -Boja prednjeg plana Žuta         Write-Output $jsonOutput         if ($secureBootEnabled -and $uefica 2023Status -eq "Ažurirano") { exit 0 } else { exit 1 }     }          # Provjerite postoji li izlazna mapa     if (-not (Test-Path $OutputPath)) {         pokušajte {             New-Item -ItemType Direktorij -Put $OutputPath -Force | Izlazna vrijednost -Null         } uhvatiti {             Write-Warning "Nije moguće stvoriti izlaznu mapu: $OutputPath - $_"         }     }          # Spremi u HOSTNAME_latest.json     $outputFile = Join-Path $OutputPath "$($hostname)_latest.json"     pokušajte {         $jsonOutput | Out-File -FilePath $outputFile -Encoding UTF8 -Force         Write-Host "JSON spremljen u: $outputFile" -ForegroundColor Green     } uhvatiti {         Write-Warning "Nije moguće pisati u datoteku: $outputFile - $_"         # Fall back to stdout         Write-Output $jsonOutput     } } još {     # Izvorno ponašanje – izlaz u stdout     Write-Output $jsonOutput }

# Izlazni kôd: "Ažurirano" je vrijednost uspjeha po knjizi za reprodukciju if ($secureBootEnabled -and $uefica 2023Status -eq "Ažurirano") {     izlaz 0 # Bez problema } još {     izlaz 1 # S problemom }

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.