VIKTIG Denne artikkelen som inneholder dette 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.

Kopier og lim inn dette eksempelskriptet og endre etter behov for miljøet:

<# . SYNOPSIS     Aktiverer planlagt oppgave for sikker oppstartsoppdatering.

.DESCRIPTION     Dette skriptet sikrer den planlagte oppgaven Windows Secure Boot Update     (\Microsoft\Windows\PI\Secure-Boot-Update) er aktivert. Hvis deaktivert,     den aktiverer den. Hvis oppgaven ble slettet, kan den opprette den på nytt.

.PARAMETER Action     Handlingen som skal utføres. Gyldige verdier: kontroller, aktiver, opprett     - kontroller: Kontroller bare aktivitetsstatusen     – aktiver: (standard) Aktiver oppgaven hvis deaktivert. Hvis oppgaven mangler, blir du bedt om å opprette.– opprett: Opprett oppgaven hvis den ikke finnes

.PARAMETER ComputerName     Valgfritt. Matrise med datamaskinnavn som oppgaven skal kontrolleres/aktiveres på.Hvis det ikke er angitt, kjører du på den lokale maskinen.

.PARAMETER Credential     Valgfritt. Legitimasjon for ekstern datamaskintilgang.

.PARAMETER Quiet     Undertrykker ledetekster og svarer automatisk på Ja. Nyttig for automatisering.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Aktiverer aktivitetsstatusen på lokal maskin

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 aktivere     # Aktiverer oppgaven hvis deaktivert. Spørsmål å opprette hvis den mangler.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 opprette     # Oppretter oppgaven hvis den ble slettet, og kontrollerer deretter statusen

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 sjekk -ComputerName "PC1", "PC2"     # Kontrollerer oppgaven på eksterne maskiner

.NOTES     Krever administratorrettigheter for å aktivere eller opprette oppgaven.Oppgavebane: \Microsoft\Windows\PI\Secure-Boot-Update     Aktiviteten kjører taskhostw.exe hver 12. time med utvidede rettigheter.#>

[CmdletBinding(SupportsShouldProcess)] param(     [Parameter(Posisjon=0)]     [ValidateSet('check', 'enable', 'create', '')]     [streng]$Action = 'aktiver',

    [Parameter()]     [string[]]$ComputerName,

    [Parameter()]     [PSCredential]$Credential,

    [Parameter()]     [Alias('Force', 'Silent')]     [switch]$Quiet )

# Convert Action to switches for backward compatibility $Enable = $Action -eq 'enable' $Create = $Action -eq 'create'

# Download URL: https://aka.ms/getsecureboot -> "Deployment and Monitoring Samples" # Obs! Dette skriptet kjøres på endepunkter for å aktivere oppgaven Sikker oppstartsoppdatering.

$TaskPath = "\Microsoft\Windows\PI\" $TaskName = "Secure-Boot-Update"

function Get-SecureBootTaskStatus {     [CmdletBinding()]     param(         [string]$Computer = $env:COMPUTERNAME     )

    $result = [PSCustomObject]@{         ComputerName = $Computer         TaskExists = $false         TaskState = $null         IsEnabled = $false         LastRunTime = $null         NextRunTime = $null         Feil = $null     }

    try {         hvis ($Computer -eq $env:COMPUTERNAME -eller $Computer -eq "localhost" -eller $Computer -eq ".") {             # Bruk schtasks.exe for mer pålitelig oppgaveregistrering             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          hvis ($LASTEXITCODE -ne 0) {                 Finner ikke # Aktivitet er ikke en feil . betyr bare at aktiviteten ikke finnes                 $result. TaskExists = $false                 returner $result             }                          # Analyser CSV-utdata             $taskData = $schtasksOutput | ConvertFrom-Csv             hvis ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')                                  # Prøv å hente neste kjøretid fra dataene                 hvis ($taskData.'Neste kjøretid' -og $taskData.'Neste kjøretid' -ne 'I/T') {                     prøv {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Neste kjøretid')                     } catch { }                 }             }         }         else {             # Ekstern datamaskin - bruk Invoke-Command med schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Utdata = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 Finner ikke # Aktivitet er ikke en feil . betyr bare at aktiviteten ikke finnes                 $result. TaskExists = $false                 returner $result             }

            $taskData = $remoteResult.Output | ConvertFrom-Csv             hvis ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')             }         }     }     catch {         $result. Feil = $_. Exception.Message     }

    return $result }

function New-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [string]$Computer = $env:COMPUTERNAME     )

    $success = $false     $errorMsg = $null

    # Task definition - matches the original Windows Secure Boot Update task     # Bruker ComHandler med SBServicing-klassen, kjører som LocalSystem     $taskXml = @" <?xml version="1.0" koding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     <dato>2012-02-07T16:39:20</Date>     <SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <kilde>$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <forfatter>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <beskrivelse>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>   <sikkerhetskontohavere>     <principal id="LocalSystem">       <UserId>S-1-5-18</UserId>     </Principal>   </Principals>   <Innstillinger>     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <StartWhenAvailable>true</StartWhenAvailable>     <IdleSettings>       <StopOnIdleEnd>sann</StopOnIdleEnd>       <RestartOnIdle>usann</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>sann</UseUnifiedSchedulingEngine>   </Innstillinger>   <utløsere>     <BootTrigger>       <forsinkelse>PT5M</forsinkelse>       <repetisjon>         <intervall>PT12H</intervall>       </Repetisjon>     </BootTrigger>   </Utløsere>   <Actions Context="LocalSystem">     <ComHandler>       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <Data><! [CDATA[SBServicing]]></Data>     </comHandler>   </Actions> </Aktivitet> " @

    try {         hvis ($Computer -eq $env:COMPUTERNAME -eller $Computer -eq "localhost" -eller $Computer -eq ".") {             hvis ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {                 # Lagre XML til midlertidig fil og import                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Encoding Unicode -Force                                  $output = schtasks.exe /Create /TN "$TaskPath$TaskName" /XML $tempFile /F 2>&1                                  Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                                  hvis ($LASTEXITCODE -eq 0) {                     $success = $true                 } ellers {                     $errorMsg = $output -join " "                 }             }         }         else {             hvis ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Create scheduled task")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     param($taskPath, $taskName, $xml)                     $tempFile = [System.IO.Path]::GetTempFileName()                     $xml | Out-File -FilePath $tempFile -Encoding Unicode -Force                     $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; Utdata = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  hvis ($result. ExitCode -eq 0) {                     $success = $true                 } ellers {                     $errorMsg = $result. Utdata -sammenføyning " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Vellykket = $success         Feil = $errorMsg     } }

function Enable-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [string]$Computer = $env:COMPUTERNAME     )

    $success = $false     $errorMsg = $null

    try {         hvis ($Computer -eq $env:COMPUTERNAME -eller $Computer -eq "localhost" -eller $Computer -eq ".") {             hvis ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Enable scheduled task")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 hvis ($LASTEXITCODE -eq 0) {                     $success = $true                 } ellers {                     $errorMsg = $output -join " "                 }             }         }         else {             hvis ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Enable scheduled task")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     param($fullTaskName)                     $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1                     @{ ExitCode = $LASTEXITCODE; Utdata = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  hvis ($result. ExitCode -eq 0) {                     $success = $true                 } ellers {                     $errorMsg = $result. Utdata -sammenføyning " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Vellykket = $success         Feil = $errorMsg     } }

# Main execution Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host " Task Enabler for sikker oppstartsoppdatering" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" Write-Host «Oppgave: $TaskPath$TaskName» –Forgrunnsfarge grå Write-Host ""

# Determine target computers $targets = hvis ($ComputerName) { $ComputerName } annet { @($env:COMPUTERNAME) }

$results = @()

foreach ($computer in $targets) {     Write-Host "Checking: $computer" -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -Computer $computer     hvis ($status. Feil) {         Write-Host " Feil: $($status. Feil)" -Forgrunnsfarge rød     }     elseif (-not $status. TaskExists) {         Write-Host " Oppgave finnes ikke på dette systemet" -ForegroundColor Red         # Opprett hvis du blir bedt om det, eller spør om Aktiver ble angitt         $shouldCreate = $Create         hvis (-ikke $shouldCreate -og $Enable) {             Write-Host ""             Write-Host " Oppgaven kan ha blitt slettet." -Forgrunnsfarge Gul             hvis ($Quiet) {                 Write-Host " Auto-creating task (Quiet mode)" -ForegroundColor Cyan                 $shouldCreate = $true             } ellers {                 $confirm = Read-Host " Vil du opprette oppgaven på nytt?                    (Y/N)"                 hvis ($confirm -eq 'Y' -eller $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  hvis ($shouldCreate) {             Write-Host " Oppretter oppgave..." -Forgrunnsfarge Gul             $createResult = New-SecureBootTask -Computer $computer                          hvis ($createResult.Success) {                 Write-Host " Oppgave opprettet" -ForegroundColor Green                 # Kontroller statusen på nytt                 $status = Get-SecureBootTaskStatus -Computer $computer                                  hvis ($status. TaskExists) {                     $stateColor = hvis ($status. IsEnabled) { "Green" } else { "Red" }                     Write-Host " State: $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host " Kan ikke opprette: $($createResult.Error)" -ForegroundColor Red             }         }     }     else {         $stateColor = hvis ($status. IsEnabled) { "Green" } else { "Red" }         Write-Host " State: $($status. TaskState)" -ForegroundColor $stateColor                  hvis ($status. LastRunTime – og $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Siste kjøring: $($status. LastRunTime)" -ForegroundColor Grå         }         hvis ($status. NextRunTime – og $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Next Run: $($status. NextRunTime)" -Forgrunnsfarge grå         }

        # Enable if requested and currently disabled         hvis ($Enable -og -not $status. IsEnabled) {             Write-Host " Aktivere oppgave..." -Forgrunnsfarge Gul             $enableResult = Enable-SecureBootTask -Computer $computer             hvis ($enableResult.Success) {                 Write-Host " Oppgave aktivert" -ForegroundColor Green                 # Kontroller statusen på nytt                 $status = Get-SecureBootTaskStatus -Computer $computer             }             else {                 Write-Host " Kan ikke aktivere: $($enableResult.Error)" -ForegroundColor Red             }         }         elseif ($Enable -and $status. IsEnabled) {             Write-Host " Aktivitet er allerede aktivert" -ForegroundColor Green         }     }     $results += $status     Write-Host "" }                  

# Summary Write-Host "========================================" -ForegroundColor Cyan Write-Host " Summary" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan

$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_. TaskExists -and -not $_. IsEnabled }). Telle $notFound = ($results | Where-Object { -not $_. TaskExists }). Telle $errors = ($results | Where-Object { $_. Feil }). Telle

Write-Host "Total Checked: $($results.Count)" Write-Host "Enabled: $enabled" -ForegroundColor Green hvis ($disabled -gt 0) { Write-Host "Disabled: $disabled" -ForegroundColor Red } if ($notFound -gt 0) { Write-Host "Finner ikke: $notFound" -ForegroundColor Yellow } hvis ($errors -gt 0) { Write-Host "Errors: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Trenger du mer hjelp?

Vil du ha flere alternativer?

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