Gjelder for
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

Opprinnelig publiseringsdato: 17. november 2025 kl.

KB-ID: 5072718

VIKTIG Denne artikkelen som inneholder eksempelskriptet, er trukket tilbake. Fra og med Windows-oppdateringene som ble utgitt 12. mai 2026, er eksempelskriptet plassert i mappen %systemroot%\SecureBoot\ExampleRolloutScripts på enheten.

Eksempel på skript for datainnsamling for sikker oppstart av lager

Kopier og lim inn dette eksempelskriptet og endre etter behov for miljøet: Skriptet Eksempel på sikker oppstart av datainnsamling for lager.

<# . SYNOPSIS     Oppdager oppdateringsstatus for sikker oppstartssertifikat for overvåking over hele flåten.

. BESKRIVELSE     Dette gjenkjenningsskriptet samler inn status for sikker oppstart, registerverdier for sertifikatoppdatering,     og enhetsinformasjon. Den sender ut en JSON-streng for overvåking og rapportering.

    Kompatibel med Intune utbedringer, GPO-basert samling og andre administrasjonsverktøy.Ingen utbedringsskript er nødvendig – dette er bare overvåking.

    Exit 0 = "Uten problem" (sertifikater oppdatert)     Avslutt 1 = "Med problem" (sertifikater ikke oppdatert – bare informasjon)

. PARAMETER OutputPath     Valgfritt. Bane til en mappe der JSON-filen lagres.Lagrer HOSTNAME_latest.json i denne mappen hvis den er angitt.Hvis den ikke er angitt, sendes JSON til stdout (opprinnelig virkemåte).

. EKSEMPEL     # Utdata til stdout (Intune/SCCM-gjenkjenning)     .\Detect-SecureBootCertUpdateStatus.ps1

. EKSEMPEL     # Lagre til delt nettverksressurs (GPO-distribusjon)     .\Detect-SecureBootCertUpdateStatus.ps1 -OutputPath "\\server\SecureBootLogs$"

. NOTATER     Registerbaner per https://aka.ms/securebootplaybook:       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot       HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing

    PROGRAMVAREN LEVERES «SOM DEN ER», UTEN GARANTIER AV NOE SLAG, EXPRESS ELLER     UNDERFORSTÅTT, INKLUDERT, MEN IKKE BEGRENSET TIL GARANTIENE FOR SALGBARHET,     EGNETHET FOR ET BESTEMT FORMÅL OG IKKE-KRENKELSE. UNDER INGEN HENDELSE SKAL     FORFATTERE ELLER RETTIGHETSHAVERE ER ANSVARLIGE FOR EVENTUELLE KRAV, SKADER ELLER ANDRE     ANSVAR, ENTEN I EN KONTRAKTSHANDLING, TORT ELLER PÅ ANNEN MÅTE, SOM OPPSTÅR FRA,     UTE AV ELLER I FORBINDELSE MED PROGRAMVAREN ELLER BRUKEN ELLER ANDRE HANDLINGER I     PROGRAMVARE.#> param(     [Parameter(Obligatorisk = $false)]     [streng]$OutputPath )

# URL-adresse for nedlasting: https://aka.ms/getsecureboot -> «Eksempler på distribusjon og overvåking» # Obs! Dette skriptet kjører på endepunkter for å samle inn statusdata for sikker oppstart.

# 1. Vertsnavn # PS-versjon: Alle | Admin: Nei | Systemkrav: Ingen prøv {     $hostname = $env:COMPUTERNAME     hvis ([streng]::IsNullOrEmpty($hostname)) {         Write-Warning «Kan ikke fastslå vertsnavn»         $hostname = "Ukjent"     }     Write-Host «Vertsnavn: $hostname» } catch {     Write-Warning «Feil under henting av vertsnavn: $_»     $hostname = "Feil"     Write-Host «Vertsnavn: $hostname» }

# 2. CollectionTime # PS-versjon: Alle | Admin: Nei | Systemkrav: Ingen prøv {     $collectionTime = Hent-dato     hvis ($null -eq $collectionTime) {         Write-Warning «Kan ikke hente gjeldende dato/klokkeslett»         $collectionTime = "Ukjent"     }     Write-Host «Samlingstidspunkt: $collectionTime» } catch {     Write-Warning «Feil under henting av dato/klokkeslett: $_»     $collectionTime = "Feil"     Write-Host «Samlingstidspunkt: $collectionTime» }

# Registry: Secure Boot Main Key (3 values)

# 3. SecureBootEnabled # PS-versjon: 3.0+ | Admin: Kan være nødvendig | Systemkrav: UEFI/sikker oppstart-kompatibelt system prøv {     $secureBootEnabled = Confirm-SecureBootUEFI -ErrorAction Stop     Write-Host «Sikker oppstart aktivert: $secureBootEnabled» } catch {     Write-Warning «Kan ikke bestemme status for sikker oppstart via cmdlet: $_»     # Prøv tilbakefall av registret     prøv {         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -Name UEFISecureBootEnabled -ErrorAction Stop         $secureBootEnabled = [bool]$regValue.UEFISecureBootEnabled         Write-Host «Sikker oppstart aktivert: $secureBootEnabled»     } catch {         Write-Warning «Kan ikke bestemme status for sikker oppstart via registret. Systemet støtter kanskje ikke UEFI/Sikker oppstart.»         $secureBootEnabled = $null         Write-Host «Sikker oppstart aktivert: Ikke tilgjengelig»     } }

# 4. HighConfidenceOptOut # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name HighConfidenceOptOut -ErrorAction Stop     $highConfidenceOptOut = $regValue.HighConfidenceOptOut     Write-Host «Valg av høy visshet: $highConfidenceOptOut» } catch {     # HighConfidenceOptOut er valgfritt – ikke til stede på de fleste systemer     $highConfidenceOptOut = $null     Write-Host "High Confidence Opt Out: Not Set" }

# 4b. MicrosoftUpdateManagedOptIn # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name MicrosoftUpdateManagedOptIn -ErrorAction Stop     $microsoftUpdateManagedOptIn = $regValue.MicrosoftUpdateManagedOptIn     Write-Host «Microsoft Update Managed Opt In: $microsoftUpdateManagedOptIn» } catch {     # MicrosoftUpdateManagedOptIn er valgfritt - ikke til stede på de fleste systemer     $microsoftUpdateManagedOptIn = $null     Write-Host «Microsoft Update Managed Opt In: Not Set» }

# 5. Tilgjengelige oppdateringer # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdates -ErrorAction Stop     $availableUpdates = $regValue.AvailableUpdates     hvis ($null -ne $availableUpdates) {         # Konverter til heksadesimalt format         $availableUpdatesHex = "0x{0:X}" -f $availableUpdates         Write-Host «Tilgjengelig Oppdateringer: $availableUpdatesHex»     } ellers {         Write-Host «Tilgjengelig Oppdateringer: Ikke tilgjengelig»     } } catch {     Write-Warning "Finner ikke eller ikke tilgjengelig AvailableUpdates-registernøkkel"     $availableUpdates = $null     Write-Host «Tilgjengelig Oppdateringer: Ikke tilgjengelig» }

# 5b. AvailableUpdatesPolicy (GPO-kontrollert fast verdi) # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name AvailableUpdatesPolicy -ErrorAction Stop     $availableUpdatesPolicy = $regValue.AvailableUpdatesPolicy     hvis ($null -ne $availableUpdatesPolicy) {         # Konverter til heksadesimalt format         $availableUpdatesPolicyHex = "0x{0:X}" -f $availableUpdatesPolicy         Write-Host «Tilgjengelig Oppdateringer policy: $availableUpdatesPolicyHex»     } ellers {         Write-Host «Tilgjengelig Oppdateringer policy: Ikke angitt»     } } catch {     # AvailableUpdatesPolicy er valgfritt – angis bare når gruppepolicyobjekt brukes     $availableUpdatesPolicy = $null     Write-Host «Tilgjengelig Oppdateringer policy: Ikke angitt» }

# Register: Servicenøkkel (3 verdier)

# 6. UEFICA2023Status # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $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 "Windows UEFI CA 2023 Status registry key not found or inaccessible"     $uefica 2023Status = $null     Write-Host «Windows UEFI CA 2023 Status: Ikke tilgjengelig» }

# 7. UEFICA2023Error # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023Error -ErrorAction Stop     $uefica 2023Error = $regValue.UEFICA2023Error     Write-Host «UEFI CA 2023-feil: $uefica 2023Error» } catch {     # UEFICA2023Error finnes bare hvis det oppstod en feil - fraværet er bra     $uefica 2023Feil = $null     Write-Host «UEFI CA 2023-feil: Ingen» }

# 8. UEFICA2023ErrorEvent # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing" -Name UEFICA2023ErrorEvent -ErrorAction Stop     $uefica 2023ErrorEvent = $regValue.UEFICA2023ErrorEvent     Write-Host «UEFI CA 2023-feilhendelse: $uefica 2023ErrorEvent» } catch {     $uefica 2023ErrorEvent = $null     Write-Host «UEFI CA 2023-feilhendelse: Ikke tilgjengelig» }

# Register: Enhetsattributter (7 verdier: 9-15)

# 9. OEMManufacturerName # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMManufacturerName -ErrorAction Stop     $oemManufacturerName = $regValue.OEMManufacturerName     hvis ([streng]::IsNullOrEmpty($oemManufacturerName)) {         Write-Warning "OEMManufacturerName is empty"         $oemManufacturerName = "Ukjent"     }     Write-Host «OEM-produsentnavn: $oemManufacturerName» } catch {     Write-Warning finner ikke OEMManufacturerName-registernøkkelen eller ikke tilgjengelig     $oemManufacturerName = $null     Write-Host «OEM-produsentnavn: Ikke tilgjengelig» }

# 10. OEMModelSystemFamily # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelSystemFamily -ErrorAction Stop     $oemModelSystemFamily = $regValue.OEMModelSystemFamily     hvis ([streng]::IsNullOrEmpty($oemModelSystemFamily)) {         Write-Warning "OEMModelSystemFamily er tom"         $oemModelSystemFamily = "Ukjent"     }     Write-Host «Systemfamilie for OEM-modell: $oemModelSystemFamily» } catch {     Write-Warning finner ikke OEMModelSystemFamily-registernøkkelen eller ikke tilgjengelig     $oemModelSystemFamily = $null     Write-Host «Systemfamilie for OEM-modell: Ikke tilgjengelig» }

# 11. OEMModelNumber # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OEMModelNumber -ErrorAction Stop     $oemModelNumber = $regValue.OEMModelNumber     hvis ([streng]::IsNullOrEmpty($oemModelNumber)) {         Write-Warning "OEMModelNumber er tom"         $oemModelNumber = "Ukjent"     }     Write-Host «OEM-modellnummer: $oemModelNumber» } catch {     Write-Warning "Finner ikke OEMModelNumber-registernøkkel eller ikke tilgjengelig"     $oemModelNumber = $null     Write-Host «OEM-modellnummer: Ikke tilgjengelig» }

# 12. FirmwareVersion # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareVersion -ErrorAction Stop     $firmwareVersion = $regValue.FirmwareVersion     hvis ([streng]::IsNullOrEmpty($firmwareVersion)) {         Write-Warning «FirmwareVersion er tom»         $firmwareVersion = "Ukjent"     }     Write-Host Fastvareversjon: $firmwareVersion } catch {     Write-Warning FastwareVersion-registernøkkelen ble ikke funnet eller utilgjengelig     $firmwareVersion = $null     Write-Host Fastvareversjon: Ikke tilgjengelig }

# 13. FirmwareReleaseDate # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name FirmwareReleaseDate -ErrorAction Stop     $firmwareReleaseDate = $regValue.FirmwareReleaseDate     hvis ([streng]::IsNullOrEmpty($firmwareReleaseDate)) {         Write-Warning «FirmwareReleaseDate er tom»         $firmwareReleaseDate = "Ukjent"     }     Write-Host "Utgivelsesdato for fastvare: $firmwareReleaseDate" } catch {     Write-Warning FastvareReleaseDate-registernøkkelen ble ikke funnet eller utilgjengelig     $firmwareReleaseDate = $null     Write-Host «Utgivelsesdato for fastvare: Ikke tilgjengelig» }

# 14. OSArchitecture # PS-versjon: Alle | Admin: Nei | Systemkrav: Ingen prøv {     $osArchitecture = $env:PROCESSOR_ARCHITECTURE     hvis ([streng]::IsNullOrEmpty($osArchitecture)) {         # Prøv tilbakefall av registret         $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name OSArchitecture -ErrorAction Stop         $osArchitecture = $regValue.OSArchitecture     }     hvis ([streng]::IsNullOrEmpty($osArchitecture)) {         Write-Warning "OSArchitecture kunne ikke fastslås"         $osArchitecture = "Ukjent"     }     Write-Host «OS-arkitektur: $osArchitecture» } catch {     Write-Warning «Feil under henting av OSArchitecture: $_»     $osArchitecture = "Ukjent"     Write-Host «OS-arkitektur: $osArchitecture» }

# 15. CanAttemptUpdateAfter (FILETIME) # PS-versjon: Alle | Admin: Kan være nødvendig | Systemkrav: Ingen prøv {     $regValue = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing\DeviceAttributes" -Name CanAttemptUpdateAfter -ErrorAction Stop     $canAttemptUpdateAfter = $regValue.CanAttemptUpdateAfter     # Konverter FILETIME til UTC DateTime – registerlagre som REG_BINARY (byte[]) eller REG_QWORD (lang)     hvis ($null -ne $canAttemptUpdateAfter) {         prøv {             hvis ($canAttemptUpdateAfter -er [byte[]]) {                 $fileTime = [BitConverter]::ToInt64($canAttemptUpdateAfter; 0)                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($fileTime). ToUniversalTime()             } elseif ($canAttemptUpdateAfter -is [long]) {                 $canAttemptUpdateAfter = [DateTime]::FromFileTime($canAttemptUpdateAfter). ToUniversalTime()             }         } catch {             Write-Warning «Kan ikke konvertere CanAttemptUpdateAfter FILETIME til DateTime»         }     }     Write-Host «Kan prøve oppdatering etter: $canAttemptUpdateAfter» } catch {     Write-Warning "CanAttemptUpdateAfter registry key not found or inaccessible"     $canAttemptUpdateAfter = $null     Write-Host «Kan prøve oppdatering etter: Ikke tilgjengelig» }

# Hendelseslogger: Systemlogg (10 verdier: 16-25)

# 16-25. Hendelsesloggspørringer # Hendelses-IDer: # 1801 - Oppdatering startet, omstart kreves # 1808 – oppdateringen er fullført # 1795 - Fastvare returnerte feil (registrere feilkode) # 1796 - Feil logget med feilkode (oppfang kode) # 1800 - Omstart nødvendig (IKKE en feil - oppdateringen fortsetter etter omstart) # 1802 – kjent fastvareproblem blokkert oppdatering (registrere KI_<nummer> fra SkipReason) # 1803 – Finner ikke samsvarende KEK-oppdatering (OEM må levere PK-signert KEK) # PS-versjon: 3.0+ | Admin: Kan være nødvendig for systemlogg | Systemkrav: Ingen prøv {     # Spør alle relevante hendelses-ID-er for sikker oppstart     $allEventIds = @(1795, 1796, 1800, 1801, 1802, 1803, 1808)     $events = @(Get-WinEvent -FilterHashtable @{LogName='System'; ID=$allEventIds} -MaxEvents 50 -ErrorAction Stop)

    hvis ($events. Antall -eq 0) {         Write-Warning «Finner ingen sikre oppstartshendelser i systemloggen»         $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 «Siste hendelses-ID: Ikke tilgjengelig»         Write-Host «Samlings-ID: Ikke tilgjengelig»         Write-Host «Konfidens: Ikke tilgjengelig»         Write-Host «Antall hendelser 1801: 0»         Write-Host «Antall hendelser 1808: 0»     } ellers {         # 16. LatestEventId         $latestEvent = $events | Sort-Object TimeCreated -Descending | Select-Object -Første 1         hvis ($null -eq $latestEvent) {             Write-Warning «Kan ikke fastslå siste hendelse»             $latestEventId = $null             Write-Host «Siste hendelses-ID: Ikke tilgjengelig»         } ellers {             $latestEventId = $latestEvent.Id             Write-Host «Siste hendelses-ID: $latestEventId»         }

        # 17. BucketID – hentet fra hendelse 1801/1808         hvis ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             hvis ($latestEvent.Message -match 'BucketId:\s*(.+)') {                 $bucketId = $matches[1]. Trim()                 Write-Host «Samlings-ID: $bucketId»             } ellers {                 Write-Warning "Finner ikke BucketId i hendelsesmeldingen"                 $bucketId = $null                 Write-Host "Samlings-ID: Ikke funnet i hendelse"             }         } ellers {             Write-Warning «Siste hendelse eller melding er null, kan ikke trekke ut BucketId»             $bucketId = $null             Write-Host «Samlings-ID: Ikke tilgjengelig»         }

        # 18. Konfidens - hentet fra hendelse 1801/1808         hvis ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             hvis ($latestEvent.Message -match 'BucketConfidenceLevel:\s*(.+)') {                 $confidence = $matches[1]. Trim()                 Write-Host «Konfidens: $confidence»             } ellers {                 Write-Warning «Finner ikke konfidensnivå i hendelsesmeldingen»                 $confidence = $null                 Write-Host «Konfidens: Ikke funnet i tilfelle»             }         } ellers {             Write-Warning «Siste hendelse eller melding er null, kan ikke trekke ut konfidens»             $confidence = $null             Write-Host «Konfidens: Ikke tilgjengelig»         }

        # 18b. SkipReason – Trekk ut KI_<tall> fra SkipReason i samme hendelse som BucketId         # Dette fanger opp ID-er for kjente problemer som vises sammen med BucketId/Confidence (ikke bare Hendelse 1802)         $skipReasonKnownIssue = $null         hvis ($null -ne $latestEvent -and $null -ne $latestEvent.Message) {             hvis ($latestEvent.Message -match 'SkipReason:\s*(KI_\d+)') {                 $skipReasonKnownIssue = $matches[1]                 Write-Host "SkipReason kjent problem: $skipReasonKnownIssue" -Forgrunnsfarge gul             }         }

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

        # 20. Event1808Count         $event 1808Array = @($events | Where-Object {$_. ID -eq 1808})         $event 1808Count = $event 1808Array.Count         Write-Host «Antall hendelser 1808: $event 1808Count»                  # Initialiser feilhendelsesvariabler         $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                  # Se bare etter feilhendelser hvis oppdateringen IKKE er fullført         # Hopp over feilanalyse hvis: 1808 er siste hendelse ELLER UEFICA2023Status er «oppdatert»         $updateComplete = ($latestEventId -eq 1808) -eller ($uefica 2023Status -eq "Oppdatert")                  hvis (-ikke $updateComplete) {             Write-Host «Oppdateringen er ikke fullført – ser etter feilhendelser...» –Forgrunnsfarge gul                          # 21. Hendelse1795 – fastvarefeil (registrere feilkode)             $event 1795Array = @($events | Where-Object {$_. ID -eq 1795})             $event 1795Count = $event 1795Array.Count             hvis ($event 1795Count -gt 0) {                 $latestEvent 1795 = $event 1795Array | Sort-Object TimeCreated -Descending | Select-Object -Første 1                 hvis ($latestEvent 1795.Message -match '(?:error|code|status)[:\s]*(?:0x)?( [0-9A-Fa-f]{8}|[0-9A-Fa-f]+)') {                     $event 1795ErrorCode = $matches[1]                 }                 Write-Host "Event 1795 (Fastvarefeil) Antall: $event 1795Count" $(hvis ($event 1795ErrorCode) { "Code: $event 1795ErrorCode" })             }                          # 22. Hendelse1796 – feilkode loggført (registrere feilkode)             $event 1796Array = @($events | Where-Object {$_. ID -eq 1796})             $event 1796Count = $event 1796Array.Count             hvis ($event 1796Count -gt 0) {                 $latestEvent 1796 = $event 1796Array | Sort-Object TimeCreated -Descending | Select-Object -Første 1                 hvis ($latestEvent 1796.Message -match '(?:error|code|status)[:\s]*(?:0x)?( [0-9A-Fa-f]{8}|[0-9A-Fa-f]+)') {                     $event 1796ErrorCode = $matches[1]                 }                 Write-Host "Hendelse 1796 (feillogget) Antall: $event 1796Count" $(hvis ($event 1796ErrorCode) { "Code: $event 1796ErrorCode" })             }                          # 23. Event1800 – omstart nødvendig (IKKE en feil – oppdateringen fortsetter etter omstart)             $event 1800Array = @($events | Where-Object {$_. ID -eq 1800})             $event 1800Count = $event 1800Array.Count             $rebootPending = $event 1800Count -gt 0             hvis ($rebootPending) {                 Write-Host «Hendelse 1800 (venter på omstart): Oppdateringen fortsetter etter omstart» –Forgrunnsfarge Cyan             }                          # 24. Event1802 – kjent fastvareproblem (registrer KI_<nummer> fra SkipReason)             $event 1802Array = @($events | Where-Object {$_. ID -eq 1802})             $event 1802Count = $event 1802Array.Count             hvis ($event 1802Count -gt 0) {                 $latestEvent 1802 = $event 1802Array | Sort-Object TimeCreated -Descending | Select-Object -Første 1                 hvis ($latestEvent 1802.Message -match 'SkipReason:\s*(KI_\d+)') {                     $knownIssueId = $matches[1]                 }                 Write-Host "Hendelse 1802 (kjent fastvareproblem) Antall: $event 1802Count" $(hvis ($knownIssueId) { "KI: $knownIssueId" })             }                          # 25. Event1803 – manglende KEK-oppdatering (OEM må levere PK-signert KEK)             $event 1803Array = @($events | Where-Object {$_. ID -eq 1803})             $event 1803Count = $event 1803Array.Count             $missingKEK = $event 1803Count -gt 0             hvis ($missingKEK) {                 Write-Host «Hendelse 1803 (manglende KEK): OEM må angi PK-signert KEK» –Forgrunnsfarge gul             }         } ellers {             Write-Host «Oppdater fullført (hendelse 1808 eller status=oppdatert) – hopper over feilanalyse» -Forgrunnsfarge grønn         }     } } catch {     Write-Warning «Feil under henting av hendelseslogger. Kan kreve administratorrettigheter: $_"     $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 «Siste hendelses-ID: Feil»     Write-Host «Samlings-ID: Feil»     Write-Host «Konfidens: Feil»     Write-Host «Antall hendelser 1801: 0»     Write-Host «Antall hendelser 1808: 0» }

# WMI/CIM-spørringer (5 verdier)

# 26. OSVersion # PS-versjon: 3.0+ (bruk Get-WmiObject for 2.0) | Admin: Nei | Systemkrav: Ingen prøv {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction-stopp     hvis ($null -eq $osInfo -or [string]::IsNullOrEmpty($osInfo.Version)) {         Write-Warning «Kan ikke hente OS-versjon»         $osVersion = "Ukjent"     } ellers {         $osVersion = $osInfo.Version     }     Write-Host «OS-versjon: $osVersion» } catch {     # CIM kan mislykkes i enkelte miljøer – bruk tilbakefall     $osVersion = [System.Environment]::OSVersion.Version.ToString()     if ([string]::IsNullOrEmpty($osVersion)) { $osVersion = "Unknown" }     Write-Host «OS-versjon: $osVersion» }

# 27. LastBootTime # PS-versjon: 3.0+ (bruk Get-WmiObject for 2.0) | Admin: Nei | Systemkrav: Ingen prøv {     $osInfo = Get-CimInstance Win32_OperatingSystem -ErrorAction-stopp     hvis ($null -eq $osInfo -eller $null -eq $osInfo.LastBootUpTime) {         Write-Warning «Kan ikke hente siste oppstartstidspunkt»         $lastBootTime = $null         Write-Host «Siste oppstartstid: Ikke tilgjengelig»     } ellers {         $lastBootTime = $osInfo.LastBootUpTime         Write-Host «Siste oppstartstid: $lastBootTime»     } } catch {     # CIM kan mislykkes i enkelte miljøer – bruk tilbakefall     prøv {         $lastBootTime = (Get-Process -Id 0 -ErrorAction SilentlyContinue). StartTime     } catch {         $lastBootTime = $null     }     if ($lastBootTime) { Write-Host "Last Boot Time: $lastBootTime" } else { Write-Host "Last Boot Time: Not Available" } }

# 28. BaseBoardManufacturer # PS-versjon: 3.0+ (bruk Get-WmiObject for 2.0) | Admin: Nei | Systemkrav: Ingen prøv {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Manufacturer)) {         Write-Warning «Kan ikke hente baseboard-produsent»         $baseBoardManufacturer = "Ukjent"     } ellers {         $baseBoardManufacturer = $baseBoard.Manufacturer     }     Write-Host «Baseboard Manufacturer: $baseBoardManufacturer» } catch {     # CIM kan mislykkes - baseboard-informasjon er supplerende     $baseBoardManufacturer = "Ukjent"     Write-Host «Baseboard Manufacturer: $baseBoardManufacturer» }

# 29. BaseBoardProduct # PS-versjon: 3.0+ (bruk Get-WmiObject for 2.0) | Admin: Nei | Systemkrav: Ingen prøv {     $baseBoard = Get-CimInstance Win32_BaseBoard -ErrorAction Stop     if ($null -eq $baseBoard -or [string]::IsNullOrEmpty($baseBoard.Product)) {         Write-Warning «Kan ikke hente baseboard-produkt»         $baseBoardProduct = "Ukjent"     } ellers {         $baseBoardProduct = $baseBoard.Product     }     Write-Host «Baseboard Product: $baseBoardProduct» } catch {     # CIM kan mislykkes - baseboard-informasjon er supplerende     $baseBoardProduct = "Ukjent"     Write-Host «Baseboard Product: $baseBoardProduct» }

# 30. SecureBootTaskEnabled # PS-versjon: Alle | Admin: Nei | Systemkrav: Planlagt aktivitet finnes # Kontrollerer om den planlagte oppgaven for sikker oppstartsoppdatering er aktivert $secureBootTaskEnabled = $null $secureBootTaskStatus = "Ukjent" prøv {     $taskOutput = schtasks.exe /Query /TN "\Microsoft\Windows\PI\Secure-Boot-Update" /FO CSV 2>&1     hvis ($LASTEXITCODE -eq 0) {         $taskData = $taskOutput | ConvertFrom-Csv         hvis ($taskData) {             $secureBootTaskStatus = $taskData.Status             $secureBootTaskEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')         }     } ellers {         $secureBootTaskStatus = "NotFound"         $secureBootTaskEnabled = $false     }     hvis ($secureBootTaskEnabled -eq $false) {         Write-Host "SecureBoot Update Task: $secureBootTaskStatus (Enabled: $secureBootTaskEnabled)" -ForegroundColor Yellow     } ellers {         Write-Host "SecureBoot Update Task: $secureBootTaskStatus (Enabled: $secureBootTaskEnabled)" -ForegroundColor Green     } } catch {     $secureBootTaskStatus = "Feil"     $secureBootTaskEnabled = $false     Write-Host "SecureBoot Update Task: Error checking - $_" -ForegroundColor Red }

# 31. WinCS-nøkkelstatus (F33E0C8E002 – oppdatering av sertifikat for sikker oppstart) # PS-versjon: Alle | Admin: Ja (for spørring) | Systemkrav: WinCsFlags.exe $wincsKeyApplied = $null $wincsKeyStatus = "Ukjent" prøv {     # Kontroller vanlige plasseringer for WinCsFlags.exe     $wincsFlagsPath = $null     $possiblePaths = @(         "$env:SystemRoot\System32\WinCsFlags.exe",         "$env:SystemRoot\SysWOW64\WinCsFlags.exe"     )     foreach ($p i $possiblePaths) {         if (Test-Path $p) { $wincsFlagsPath = $p; break }     }     hvis ($wincsFlagsPath) {         # Spørringsspesifikk nøkkel - krever administratorrettigheter         $queryOutput = & $wincsFlagsPath /query --key F33E0C8E002 2>&1         $queryOutputStr = $queryOutput -join "'n"         hvis ($LASTEXITCODE -eq 0) {             # Kontroller om nøkkelen brukes (se etter «Aktiv konfigurasjon» eller lignende indikator)             hvis ($queryOutputStr -match "Active Configuration.*:.*enabled" -or $queryOutputStr -match "Configuration.*applied") {                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Brukt"                 Write-Host "WinCS Key F33E0C8E002: Applied" -ForegroundColor Green             } elseif ($queryOutputStr -match "finner ikke|Ingen konfigurasjon") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "NotApplied"                 Write-Host "WinCS-F33E0C8E002: Brukes ikke" -Forgrunnsfarge gul             } ellers {                 # Nøkkel finnes - kontroller utdata for tilstand                 $wincsKeyApplied = $true                 $wincsKeyStatus = "Brukt"                 Write-Host "WinCS-F33E0C8E002: Brukt" -Forgrunnsfarge grønn             }         } ellers {             # Se etter bestemte feilmeldinger             hvis ($queryOutputStr -match "Ingen tilgang|administrator") {                 $wincsKeyStatus = «Ingen tilgang»                 Write-Host WinCS-F33E0C8E002: Ingen tilgang (kjør som administrator)" –Forgrunnsfarge DarkGray             } elseif ($queryOutputStr -match "finner ikke|Ingen konfigurasjon") {                 $wincsKeyApplied = $false                 $wincsKeyStatus = "NotApplied"                 Write-Host "WinCS-F33E0C8E002: Brukes ikke" -Forgrunnsfarge gul             } ellers {                 $wincsKeyStatus = "QueryFailed"                 Write-Host WinCS-F33E0C8E002: Spørring mislyktes             }         }     } ellers {         $wincsKeyStatus = "WinCsFlagsNotFound"         Write-Host "WinCS-F33E0C8E002: WinCsFlags.exe ikke funnet" -Forgrunnsfarge grå     } } catch {     $wincsKeyStatus = "Feil"     Write-Host "WinCS Key F33E0C8E002: Feilkontroll - $_" -ForegroundColor Red }              

# ============================================================================= # Utbedringsgjenkjenning – statusutdata & avslutningskode # =============================================================================

# Byggstatusobjekt fra alle innsamlede lagerdata $status = [bestilt]@{     UEFICA2023Status = $uefica 2023Status     UEFICA2023Error = $uefica 2023Error     UEFICA2023ErrorEvent = $uefica 2023ErrorEvent     AvailableUpdates = hvis ($null -ne $availableUpdates) { $availableUpdatesHex } ellers { $null }     AvailableUpdatesPolicy = hvis ($null -ne $availableUpdatesPolicy) { $availableUpdatesPolicyHex } ellers { $null }     Vertsnavn = $hostname     CollectionTime = hvis ($collectionTime -is [datetime]) { $collectionTime.ToString("o") } ellers { "$collectionTime" }     SecureBootEnabled = $secureBootEnabled     HighConfidenceOptOut = $highConfidenceOptOut     MicrosoftUpdateManagedOptIn = $microsoftUpdateManagedOptIn     OEMManufacturerName = $oemManufacturerName     OEMModelSystemFamily = $oemModelSystemFamily     OEMModelNumber = $oemModelNumber     FirmwareVersion = $firmwareVersion     FirmwareReleaseDate = $firmwareReleaseDate     OSArchitecture = $osArchitecture     CanAttemptUpdateAfter = hvis ($canAttemptUpdateAfter -is [datetime]) { $canAttemptUpdateAfter.ToString("o") } else { "$canAttemptUpdateAfter" }     LatestEventId = $latestEventId     BucketId = $bucketId     Konfidens = $confidence     SkipReasonKnownIssue = $skipReasonKnownIssue # KI_<tall> fra SkipReason i BucketId-hendelsen     Event1801Count = $event 1801Count     Event1808Count = $event 1808Count     # Feilhendelser med fangede detaljer     Event1795Count = $event 1795Count # Fastvare returnerte feil     Event1795ErrorCode = $event 1795ErrorCode # Feilkode fra fastvare     Event1796Count = $event 1796Count # Feilkode logget     Event1796ErrorCode = $event 1796ErrorCode # Registrert feilkode     Event1800Count = $event 1800Count # Reboot needed (NOT an error)     Omstart venter = $rebootPending # Sann hvis hendelse 1800 finnes     Event1802Count = $event 1802Count # Kjent fastvareproblem     KnownIssueId = $knownIssueId # KI_<tall> fra SkipReason     Event1803Count = $event 1803Count # Missing KEK update     MissingKEK = $missingKEK # OEM må angi PK-signert KEK     OSVersion = $osVersion     LastBootTime = hvis ($lastBootTime -is [datetime]) { $lastBootTime.ToString("o") } else { "$lastBootTime" }     BaseBoardManufacturer = $baseBoardManufacturer     BaseBoardProduct = $baseBoardProduct     SecureBootTaskEnabled = $secureBootTaskEnabled     SecureBootTaskStatus = $secureBootTaskStatus     WinCSKeyApplied = $wincsKeyApplied # True hvis F33E0C8E002 nøkkelen brukes     WinCSKeyStatus = $wincsKeyStatus # Applied, NotApplied, WinCsFlagsNotFound osv. }

# Utdatastatusen – for dataaggregasjon $jsonOutput = $status | ConvertTo-Json -Compress

# Hvis OutputPath er angitt, lagrer du filen. Ellers sendes utdata til stdout if (-not [string]::IsNullOrEmpty($OutputPath)) {     # Valider OutputPath – hopp over hvis det ser ut som en hjelpeforespørsel eller har ugyldige tegn     hvis ($OutputPath -matcher ^[/\-] - eller $OutputPath -matcher [<>:"|? *]') {         Write-Host "Ugyldig OutputPath angitt, utdata til stdout" -Forgrunnsfarge gul         Write-Output $jsonOutput         hvis ($secureBootEnabled -og $uefica 2023Status -eq "Oppdatert") { exit 0 } ellers { exit 1 }     }          # Kontroller at utdatamappen finnes     if (-not (Test-Path $OutputPath)) {         prøv {             New-Item -ItemType Directory -Path $OutputPath -Force | Ut-null         } catch {             Write-Warning "Kan ikke opprette utdatamappe: $OutputPath - $_"         }     }          # Lagre i HOSTNAME_latest.json     $outputFile = Join-Path $OutputPath "$($hostname)_latest.json"     prøv {         $jsonOutput | Out-File -FilePath $outputFile -Encoding UTF8 -Force         Write-Host «JSON lagret i: $outputFile» –Forgrunnsfarge grønn     } catch {         Write-Warning "Kan ikke skrive til fil: $outputFile - $_"         # Gå tilbake til stdout         Write-Output $jsonOutput     } } ellers {     # Opprinnelig virkemåte - utdata til stdout     Write-Output $jsonOutput }

# Avslutningskode: «Oppdatert» er suksessverdien i henhold til strategiplanen hvis ($secureBootEnabled -og $uefica 2023Status -eq "Oppdatert") {     exit 0 # Uten problem } ellers {     exit 1 # Med problem }

Endre dato

Endre beskrivelse

13. mai 2026 kl.

  • Lagt til følgende øverst i artikkelen, da eksempelskriptene nå er tilgjengelige på enheten etter en Windows-oppdateringsutgivelse 13. mai 2026, er installert:VIKTIG Denne artikkelen som inneholder eksempelskriptet, er fjernet. Fra og med Windows-oppdateringene som ble utgitt 12. mai 2026, er eksempelskriptet plassert i mappen %systemroot%\SecureBoot\ExampleRolloutScripts på enheten.

24. februar 2026 kl.

  • Oppdaterte skriptet Eksempel på sikker oppstart av datainnsamling for lager.

22. februar 2026 kl.

  • Oppdaterte skriptet Eksempel på sikker oppstart av datainnsamling for lager.

13. februar 2026 kl.

  • Oppdaterte skriptet Eksempel på sikker oppstart av datainnsamling for lager.

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.