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: Studenog 17, 2025

ID baze znanja: 5072718

VAŽNO Ovaj članak koji sadrži primjer skripte povučen je iz upotrebe. Počevši od ažuriranja sustava Windows objavljenih 12. svibnja 2026. i kasnije, ogledna skripta nalazi se u mapi %systemroot%\SecureBoot\ExampleRolloutScripts na vašem uređaju .

Ogledna skripta za prikupljanje podataka inventara sigurnog pokretanja sustava

Kopirajte i zalijepite ovu oglednu skriptu i izmijenite je prema potrebi za svoje okruženje: Ogledna skripta za prikupljanje podataka inventara sigurnog pokretanja sustava.

<# . SINOPSIS     Otkriva status ažuriranja certifikata sigurnog pokretanja radi nadzora na razini cijele flote.

. OPIS     Ova skripta otkrivanja prikuplja vrijednosti registra sigurnog pokretanja sustava, ažuriranja certifikata,     i podatke o uređaju. Izlaz je JSON niz za praćenje i izvješćivanje.

    Kompatibilan s popravcima servisa Intune, zbirkom temeljenom na GPO-u i drugim alatima za upravljanje.Nije potrebna skripta za popravak – ovo je samo nadzor.

    Izlaz 0 = "Bez problema" (ažurirani certifikati)     Izlaz 1 = "S izdavanjem" (certifikati nisu ažurirani – samo informativni sadržaji)

. PARAMETAR: OutputPath     Neobavezno. Put do mape u koju će se JSON datoteka spremiti.Ako se HOSTNAME_latest.json navede, sprema u tu mapu.Ako nije naveden, JSON šalje na stdout (izvorno ponašanje).

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

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

. NAPOMENE     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     PODRAZUMIJEVA, UKLJUČUJUĆI, ALI NE OGRANIČAVAJUĆI SE NA JAMSTVA UTRŽIVOSTI,     PRIKLADNOST ZA POSEBNU SVRHU I NEPOVREDIVOST. NI U KOJEM SLUČAJU     AUTORI ILI NOSITELJI AUTORSKIH PRAVA ODGOVORNI SU ZA SVE ZAHTJEVE, ŠTETE ILI DRUGE     ODGOVORNOSTI, BILO U SKLOPU UGOVORA, PREKRŠAJA ILI NA NEKI DRUGI NAČIN, KOJA PROIZLAZI IZ,     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE     SOFTVER.#> param(     [Parameter(Mandatory = $false)]     [niz]$OutputPath )

# URL preuzimanja: https://aka.ms/getsecureboot -> "Deployment and monitoring samples" # Napomena: ta se skripta izvršava na krajnjim točkama radi prikupljanja podataka o statusu sigurnog pokretanja sustava.

# 1. Naziv glavnog računala # Verzija PS-a: Sve | Administrator: Ne | Sistemski preduvjeti: Nema try {     $hostname = $env:COMPUTERNAME     if ([string]::IsNullOrEmpty($hostname)) {         Write-Warning "Naziv glavnog računala nije moguće odrediti"         $hostname = "Nepoznato"     }     Write-Host "Hostname: $hostname" } catch {     Write-Warning "Pogreška pri dohvaćanju naziva glavnog računala: $_"     $hostname = "Pogreška"     Write-Host "Hostname: $hostname" }

# 2. Vrijeme prikupljanja # Verzija PS-a: Sve | Administrator: Ne | Sistemski preduvjeti: Nema try {     $collectionTime = Get-Date     if ($null -eq $collectionTime) {         Write-Warning "Nije moguće dohvatiti trenutačni datum/vrijeme"         $collectionTime = "Nepoznato"     }     Write-Host "Vrijeme prikupljanja: $collectionTime" } catch {     Write-Warning "Pogreška prilikom dohvaćanja datuma/vremena: $_"     $collectionTime = "Pogreška"     Write-Host "Vrijeme prikupljanja: $collectionTime" }

# Registar: glavni ključ sigurnog pokretanja sustava (3 vrijednosti)

# 3. SecureBootEnabled # Verzija PS-a: 3.0+ | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Sustav koji podržava UEFI/sigurno pokretanje sustava try {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop     Write-Host "Omogućeno je sigurno pokretanje: $secureBootEnabled" } catch {     Write-Warning "Nije moguće utvrditi status sigurnog pokretanja putem cmdleta: $_"     # Isprobajte rezervu registra     try {         $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"     } catch {         Write-Warning "Nije moguće utvrditi status sigurnog pokretanja putem registra. Sustav možda ne podržava UEFI/sigurno pokretanje."         $secureBootEnabled = $null         Write-Host "Omogućeno je sigurno pokretanje: nije dostupno"     } }

# 4. HighConfidenceOptOut # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host "Visoka pouzdanost: $highConfidenceOptOut" } catch {     # HighConfidenceOptOut nije obavezan – ne postoji u većini sustava     $highConfidenceOptOut = $null     Write-Host "Odustajanje visoke pouzdanosti: nije postavljeno" }

# 4b. MicrosoftUpdateManagedOptIn # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name MicrosoftUpdateManagedOptIn -ErrorAction Stop     $microsoftUpdateManagedOptIn = $regValue.MicrosoftUpdateManagedOptIn     Write-Host "Upravljana prijava servisa Microsoft Update: $microsoftUpdateManagedOptIn" } catch {     # MicrosoftUpdateManagedOptIn nije obavezan – ne postoji na većini sustava     $microsoftUpdateManagedOptIn = $null     Write-Host "Upravljana prijava servisa Microsoft Update: nije postavljena" }

# 5. Dostupna ažuriranja # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $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"     } else {         Write-Host "Dostupno Ažuriranja: nije dostupno"     } } catch {     Write-Warning "Ključ registra AvailableUpdates nije pronađen ili nije dostupan"     $availableUpdates = $null     Write-Host "Dostupno Ažuriranja: nije dostupno" }

# 5b. AvailableUpdatesPolicy (trajna vrijednost koju kontrolira GPO) # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "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 "Pravilnik o dostupnosti Ažuriranja: $availableUpdatesPolicyHex"     } else {         Write-Host "Pravilnik o dostupnosti Ažuriranja: nije postavljeno"     } } catch {     # AvailableUpdatesPolicy nije obavezan – postavlja se samo kada se primjenjuje objekt pravilnika grupe     $availableUpdatesPolicy = $null     Write-Host "Pravilnik o dostupnosti Ažuriranja: nije postavljeno" }

# Registar: Ključ za servisiranje (3 vrijednosti)

# 6. UEFICA2023Status # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $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" } catch {     Write-Warning "Ključ registra za status Windows UEFI CA 2023 nije pronađen ili nije dostupan"     $uefica 2023Status = $null     Write-Host "Status Windows UEFI CA 2023: nije dostupan" }

# 7. UEFICA2023Error # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host "Pogreška UEFI CA 2023: $uefica 2023Error" } catch {     # UEFICA2023Pogreška postoji samo ako je došlo do pogreške - odsutnost je dobra     $uefica 2023Error = $null     Write-Host "Pogreška UEFI CA 2023: Nema" }

# 8. UEFICA2023ErrorEvent # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $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" } catch {     $uefica 2023ErrorEvent = $null     Write-Host "Događaj pogreške UEFI CA 2023: nije dostupan" }

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

# 9. OEMManufacturerName # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     if ([string]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName is empty"         $oemManufacturerName = "Nepoznato"     }     Write-Host "Naziv proizvođača OEM-a: $oemManufacturerName" } catch {     Write-Warning "Ključ registra OEMManufacturerName nije pronađen ili nije dostupan"     $oemManufacturerName = $null     Write-Host "Naziv proizvođača OEM-a: nije dostupan" }

# 10. OEMModelSystemFamily # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     if ([string]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily is empty"         $oemModelSystemFamily = "Nepoznato"     }     Write-Host "Obitelj sustava OEM modela: $oemModelSystemFamily" } catch {     Write-Warning "Ključ registra OEMModelSystemFamily nije pronađen ili nije dostupan"     $oemModelSystemFamily = $null     Write-Host "Obitelj sustava OEM modela: nije dostupno" }

# 11. OEMModelNumber # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     if ([string]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber is empty"         $oemModelNumber = "Nepoznato"     }     Write-Host "OEM broj modela: $oemModelNumber" } catch {     Write-Warning "Ključ registra OEMModelNumber nije pronađen ili nije dostupan"     $oemModelNumber = $null     Write-Host "OEM broj modela: nije dostupan" }

# 12. FirmwareVersion # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     if ([string]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning "FirmwareVersion is empty"         $firmwareVersion = "Nepoznato"     }     Write-Host "Verzija opreme: $firmwareVersion" } catch {     Write-Warning "Ključ registra FirmwareVersion nije pronađen ili nije dostupan"     $firmwareVersion = $null     Write-Host "Verzija opreme: nije dostupna" }

# 13. FirmwareReleaseDate # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     if ([string]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning "FirmwareReleaseDate is empty"         $firmwareReleaseDate = "Nepoznato"     }     Write-Host "Datum izdavanja opreme: $firmwareReleaseDate" } catch {     Write-Warning "Ključ registra FirmwareReleaseDate nije pronađen ili nije dostupan"     $firmwareReleaseDate = $null     Write-Host "Datum izdavanja opreme: nije dostupan" }

# 14. Zaslon OSArchitecture # Verzija PS-a: Sve | Administrator: Ne | Sistemski preduvjeti: Nema try {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     if ([string]::IsNullOrEmpty($osArchitecture)) {         # Isprobajte rezervu registra         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     if ([string]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "OSArchitecture nije moguće odrediti"         $osArchitecture = "Nepoznato"     }     Write-Host "Arhitektura OS-a: $osArchitecture" } catch {     Write-Warning "Pogreška pri dohvaćanju OSArchitecture: $_"     $osArchitecture = "Nepoznato"     Write-Host "Arhitektura OS-a: $osArchitecture" }

# 15. CanAttemptUpdateAfter (FILETIME) # Verzija PS-a: Sve | Administrator: Možda će biti potrebno | Sistemski preduvjeti: Nema try {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Convert FILETIME u UTC DateTime – registry pohranjuje u obliku REG_BINARY (byte[]) ili REG_QWORD (long)     if ($null -ne $canAttemptUpdateAfter) {         try {             if ($canAttemptUpdateAfter -is [byte[]]) {                 $fileTime = [BitConverter]::ToInt64($canAttemptUpdateAfter, 0)                 $canAttemptUpdateAfter = [DateTime]:FromFileTime($fileTime). ToUniversalTime()             } elseif ($canAttemptUpdateAfter -is [dugo]) {                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter). ToUniversalTime()             }         } catch {             Write-Warning "Nije moguće pretvoriti CanAttemptUpdateAfter FILETIME u DateTime"         }     }     Write-Host "Ažuriranje je moguće pokušati poslije: $canAttemptUpdateAfter" } catch {     Write-Warning "Ključ registra CanAttemptUpdateAfter nije pronađen ili nije dostupan"     $canAttemptUpdateAfter = $null     Write-Host "Ažuriranje je moguće pokušati nakon: nije dostupno" }

# Zapisnici događaja: Zapisnik sustava (10 vrijednosti: 16 – 25)

# 16-25. Upiti zapisnika događaja # ID-jevi događaja: # 1801 – Ažuriranje je pokrenuto, potrebno je ponovno pokretanje # 1808 – Ažuriranje je uspješno dovršeno # 1795 – Oprema je vratila pogrešku (kôd pogreške snimanja) # 1796 – Pogreška zabilježena kodom pogreške (kôd za snimanje) # 1800 – Potrebno je ponovno pokretanje (NIJE pogreška – ažuriranje će se nastaviti nakon ponovnog pokretanja) # 1802 – Poznati problem s programskom opremom blokirano je ažuriranje (broj KI_<snimanja> iz stavke SkipReason) # 1803 – Nije pronađeno odgovarajuće ažuriranje za KEK (OEM mora isporučiti PK potpisani KEK) # Verzija PS-a: 3.0+ | Administrator: Možda je potrebno za zapisnik sustava | Sistemski preduvjeti: Nema try {     # Slanje upita svim relevantnim ID-jevima događaja sigurnog pokretanja sustava     $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 "U zapisniku sustava nema događaja 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 dostupan"         Write-Host "ID grupe: nije dostupan"         Write-Host "Povjerenost: nije dostupno"         Write-Host "Event 1801 Count: 0"         Write-Host "Event 1808 Count: 0"     } else {         # 16. LatestEventId         $latestEvent = $events | Sort-Object TimeCreated – silazno | Select-Object – Prvo 1         if ($null -eq $latestEvent) {             Write-Warning "Nije moguće utvrditi najnoviji događaj"             $latestEventId = $null             Write-Host "ID najnovijeg događaja: nije dostupan"         } else {             $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]. Trim()                 Write-Host "ID grupe: $bucketId"             } else {                 Write-Warning "BucketId nije pronađen u poruci o događaju"                 $bucketId = $null                 Write-Host "ID grupe: nije pronađeno u događaju"             }         } else {             Write-Warning "Najnoviji događaj ili poruka ima vrijednost null, nije moguće izdvojiti BucketId"             $bucketId = $null             Write-Host "ID grupe: nije dostupan"         }

        # 18. Povjerenje – izdvojeno iz događaja 1801/1808         if ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             if ($latestEvent.Message -match 'BucketConfidenceLevel:\s*(.+)') {                 $confidence = $matches[1]. Trim()                 Write-Host "Pouzdanost: $confidence"             } else {                 Write-Warning "Razina pouzdanosti nije pronađena u poruci o događaju"                 $confidence = $null                 Write-Host "Pouzdanost: nije pronađeno u događaju"             }         } else {             Write-Warning "Najnoviji događaj ili poruka ima vrijednost null, ne može se izdvojiti pouzdanost"             $confidence = $null             Write-Host "Pouzdanost: nije dostupno"         }

        # 18b. SkipReason – izdvoji KI_<broj> iz parametra SkipReason u istom događaju kao i BucketId         # Ovo bilježi ID-ove 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 "PreskočiRazlog poznatog problema: $skipReasonKnownIssue" -foregroundColor Yellow             }         }

        # 19. Event1801Count         $event 1801Array = @($events | Where-Object {$_. ID -eq 1801})         $event 1801Count = $event 1801Array.Count         Write-Host "Event 1801 Count: $event 1801Count"

        # 20. Event1808Count         $event 1808Array = @($events | Where-Object {$_. ID -EQ 1808})         $event 1808Count = $event 1808Array.Count         Write-Host "Event 1808 Count: $event 1808Count"                  # Inicijalizacija varijabli 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                  # Provjeravaj ima li događaja s pogreškama samo 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..." -ForegroundColor Yellow                          # 21. Event1795 – Pogreška opreme (kôd 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 – silazno | Select-Object – Prvo 1                 if ($latestEvent 1795.Message -match '(?:error|kod|status)[:\s]*(?:0x)?( [0-9A-Fa-f]{8}|[0-9A-Fa-f]+)') {                     $event 1795ErrorCode = $matches[1]                 }                 Write-Host "Event 1795 (Firmware Error) Count: $event 1795Count" $(if ($event 1795ErrorCode) { "Code: $event 1795ErrorCode" })             }                          # 22. Event1796 – Prijavljen je kod 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 – silazno | Select-Object – Prvo 1                 if ($latestEvent 1796.Message -match '(?:error|kod|status)[:\s]*(?:0x)?( [0-9A-Fa-f]{8}|[0-9A-Fa-f]+)') {                     $event 1796ErrorCode = $matches[1]                 }                 Write-Host "Event 1796 (Error Logged) Count: $event 1796Count" $(if ($event 1796ErrorCode) { "Code: $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 (Reboot Pending): Update will proceed after reboot" -ForegroundColor Cyan             }                          # 24. Event1802 – Poznati problem s opremom (broj KI_<snimanja> iz stavke 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 – silazno | Select-Object – Prvo 1                 if ($latestEvent 1802.Message -match 'SkipReason:\s*(KI_\d+)') {                     $knownIssueId = $matches[1]                 }                 Write-Host "Event 1802 (poznati problem s opremom) Count: $event 1802Count" $(if ($knownIssueId) { "KI: $knownIssueId" })             }                          # 25. Event1803 – nedostaje ažuriranje za KEK (OEM mora isporučiti KEK s potpisom PK)             $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 mora isporučiti PK s potpisom KEK" -ForegroundColor Yellow             }         } else {             Write-Host "Ažuriranje je dovršeno (Event 1808 or Status=Updated) - preskakanje analize pogrešaka" -ForegroundColor Green         }     } } catch {     Write-Warning "Pogreške pri dohvaćanju zapisnika događaja. Možda su 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 "Najnoviji ID događaja: pogreška"     Write-Host "ID grupe: pogreška"     Write-Host "Pouzdanost: pogreška"     Write-Host "Event 1801 Count: 0"     Write-Host "Event 1808 Count: 0" }

# WMI/CIM upiti (5 vrijednosti)

# 26. OSVersion # Verzija PS-a: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: Nema try {     $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"     } else {         $osVersion = $osInfo.Version     }     Write-Host "Verzija OS-a: $osVersion" } catch {     # CIM možda neće uspjeti u nekim okruženjima – koristite rezervu     $osVersion = [System.Environment]::OSVersion.Version.ToString()     if ([string]::IsNullOrEmpty($osVersion)) { $osVersion = "Unknown" }     Write-Host "Verzija OS-a: $osVersion" }

# 27. LastBootTime # Verzija PS-a: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: Nema try {     $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"     } else {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host "Vrijeme zadnjeg pokretanja: $lastBootTime"     } } catch {     # CIM možda neće uspjeti u nekim okruženjima – koristite rezervu     try {         $lastBootTime = (Get-Process -Id 0 -ErrorAction SilentlyContinue). Vrijeme početka     } catch {         $lastBootTime = $null     }     if ($lastBootTime) { Write-Host "Vrijeme zadnjeg pokretanja: $lastBootTime" } else { Write-Host "Vrijeme zadnjeg pokretanja: nije dostupno" } }

# 28. BaseBoardManufacturer # Verzija PS-a: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: Nema try {     $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 matične ploče"         $baseBoardManufacturer = "Nepoznato"     } else {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host "Proizvođač matične ploče: $baseBoardManufacturer" } catch {     # CIM možda neće uspjeti – informacije o matičnoj ploči su dopunske     $baseBoardManufacturer = "Nepoznato"     Write-Host "Proizvođač matične ploče: $baseBoardManufacturer" }

# 29. BaseBoardProductProduct # Verzija PS-a: 3.0+ (koristite Get-WmiObject za 2.0) | Administrator: Ne | Sistemski preduvjeti: Nema try {     $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"     } else {         $baseBoardProduct = $baseBoard.Proizvod     }     Write-Host "Proizvod osnovne ploče: $baseBoardProduct" } catch {     # CIM možda neće uspjeti – informacije o matičnoj ploči su dopunske     $baseBoardProduct = "Nepoznato"     Write-Host "Osnovni proizvod: $baseBoardProduct" }

# 30. SecureBootTaskEnabled # Verzija PS-a: Sve | Administrator: Ne | Sistemski preduvjeti: postoji zakazani zadatak # Provjerava je li omogućen zakazani zadatak Sigurnog pokretanja i ažuriranja $secureBootTaskEnabled = $null $secureBootTaskStatus = "Nepoznato" try {     $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 'Spreman' -ili $taskData.Status -eq 'Izvršava se')         }     } else {         $secureBootTaskStatus = "NijePronađeno"         $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     } } catch {     $secureBootTaskStatus = "Pogreška"     $secureBootTaskEnabled = $false     Write-Host "Zadatak ažuriranja SecureBoot: provjera pogrešaka – $_" -ForegroundColor Red }

# 31. Stanje ključa WinCS (F33E0C8E002 – ažuriranje certifikata sigurnog pokretanja sustava) # Verzija PS-a: Sve | Administrator: Da (za upit) | Sistemski preduvjeti: WinCsFlags.exe $wincsKeyApplied = $null $wincsKeyStatus = "Nepoznato" try {     # Provjera uobičajenih 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; prijelom }     }     if ($wincsFlagsPath) {         # Ključ za određeni upit – potrebna su administratorska prava         $queryOutput = & $wincsFlagsPath /query --key F33E0C8E002 2>&1         $queryOutputStr = $queryOutput -join "'n"         if ($LASTEXITCODE -eq 0) {             # Provjerite je li tipka primijenjena (potražite pokazatelj "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 = "NotApplied"                 Write-Host "Ključ WinCS F33E0C8E002: nije primijenjeno" -foregroundColor Yellow             } else {                 # Key exists – check output for state                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Primijenjeno"                 Write-Host "WinCS Key F33E0C8E002: Applied" -foregroundColor Green             }         } else {             # Provjera određenih poruka o pogrešci             if ($queryOutputStr -match "Pristup odbijen|administrator") {                 $wincsKeyStatus = "AccessDenied"                 Write-Host "WinCS Key F33E0C8E002: Access denied (run as admin)" -ForegroundColor DarkGrey             } elseif ($queryOutputStr -match "nije pronađeno|Nema konfiguracije") {                 $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 Grey     } } catch {     $wincsKeyStatus = "Pogreška"     Write-Host "WinCS Key F33E0C8E002: Error checking - $_" -foregroundColor Red }              

# ============================================================================= # Otkrivanje popravka – izlazni & izlazni kod statusa # =============================================================================

# Build status objekt iz svih prikupljenih podataka o inventaru $status = [naručeno]@{     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     Pouzdanost = $confidence     SkipReasonKnownIssue = $skipReasonKnownIssue # KI_<broj> iz SkipReason u događaju BucketId     Event1801Count = $event 1801Count     Event1808Count = $event 1808Count     # Događaji pogreške sa zabilježenim pojedinostima     Event1795Count = $event 1795Count # Vraćena pogreška opreme     Event1795ErrorCode = $event 1795ErrorCode # kôd pogreške iz programske opreme     Event1796Count = $event 1796Count # Zapisani kod pogreške     Event1796ErrorCode = $event 1796ErrorCode # zabilježeni kôd pogreške     Event1800Count = $event 1800Count # Potrebno je ponovno pokretanje (NIJE pogreška)     RebootPending = $rebootPending # istinito ako je prisutan događaj 1800     Event1802Count = $event 1802Count # Poznati problem opreme     KnownIssueId = $knownIssueId # broj KI_<> iz parametra SkipReason     Event1803Count = $event 1803Count # Nedostaje ažuriranje za KEK     MissingKEK = $missingKEK # OEM mora isporučiti PK potpisani 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 je F33E0C8E002 ključ primijenjen     WinCSKeyStatus = $wincsKeyStatus # Applied, NotApplied, WinCsFlagsNotFound itd. }

# Izlaz statusa – za agregaciju podataka $jsonOutput = $status | ConvertTo-Json – komprimiranje

# Ako je naveden OutputPath, spremi u datoteku; U suprotnom izlaz na stdout if (-not [string]::IsNullOrEmpty($OutputPath)) {     # Provjera valjanosti OutputPath – preskočite ako izgleda kao zahtjev za pomoć ili sadrži znakove koji nisu valjani     if ($OutputPath -match '^[/\-]' -ili $OutputPath -match '[<>:"|? *]') {         Write-Host "Invalid OutputPath specified, outoutput to stdout" -ForegroundColor Yellow         Write-Output $jsonOutput         if ($secureBootEnabled -and $uefica 2023Status -eq "Ažurirano") { izlaz 0 } else { izlaz 1 }     }          # Provjerite postoji li izlazna mapa     if (-not (Test-Path $OutputPath)) {         try {             New-Item -ItemType Directory -Path $OutputPath -Force | Izvan vrijednosti null         } catch {             Write-Warning "Nije moguće stvoriti izlaznu mapu: $OutputPath - $_"         }     }          # Spremi u HOSTNAME_latest.json     $outputFile = Join-Path $OutputPath "$($hostname)_latest.json"     try {         $jsonOutput | Out-File -FilePath $outputFile -Encoding UTF8 -Force         Write-Host "JSON spremljen u: $outputFile" -ForegroundColor Green     } catch {         Write-Warning "Nije moguće pisati u datoteku: $outputFile - $_"         # Vraćanje na stdout         Write-Output $jsonOutput     } } else {     # Izvorno ponašanje – izlaz na stdout     Write-Output $jsonOutput }

# Izlazni kod: "Ažurirano" je vrijednost uspjeha prema proceduralnom priručniku if ($secureBootEnabled -and $uefica 2023Status -eq "Ažurirano") {     izlaz 0 # Bez problema } else {     izlaz 1 # S problemom }

Promjena datuma

Opis izmjene

Neka 13, 2026

  • Na vrh članka dodano je sljedeće jer su ogledne skripte sada dostupne na uređaju nakon instalacije izdanja ažuriranja sustava Windows 13. svibnja 2026. ili kasnije:VAŽNO Ovaj članak koji sadrži oglednu skriptu povučen je iz upotrebe. Počevši od ažuriranja sustava Windows objavljenih 12. svibnja 2026. i kasnije, ogledna skripta nalazi se u mapi %systemroot%\SecureBoot\ExampleRolloutScripts na vašem uređaju .

Veljače 24, 2026

  • Ažurirana je ogledna skripta za prikupljanje podataka inventara sigurnog pokretanja sustava.

Veljače 22, 2026

  • Ažurirana je ogledna skripta za prikupljanje podataka inventara sigurnog pokretanja sustava.

Veljače 13, 2026

  • Ažurirana je ogledna skripta za prikupljanje podataka inventara sigurnog pokretanja sustava.

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.