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. |
|
|
24. februar 2026 kl. |
|
|
22. februar 2026 kl. |
|
|
13. februar 2026 kl. |
|