VIKTIGT Den här artikeln som innehåller det här exempelskriptet har tagits bort. Från och med Windows-uppdateringarna som släpptes den 12 maj 2026 finns exempelskriptet i mappen %systemroot%\SecureBoot\ExampleRolloutScripts på enheten.

Kopiera och klistra in det här exempelskriptet och ändra efter behov för din miljö:

<# . SYNOPSIS     Aktiverar den schemalagda aktiviteten Säker start-uppdatering.

.DESCRIPTION     Det här skriptet säkerställer schemalagd aktivitet för Windows Secure Boot Update     (\Microsoft\Windows\PI\Secure-Boot-Update) är aktiverat. Om inställningen är inaktiverad     aktiverar den. Om uppgiften har tagits bort kan den återskapa den.

.PARAMETER Action     Den åtgärd som ska utföras. Giltiga värden: kontrollera, aktivera, skapa     - kontrollera: Kontrollera bara aktivitetsstatus     - aktivera: (standard) Aktivera aktiviteten om den är inaktiverad. Om uppgiften saknas uppmanas du att skapa.– skapa: Skapa uppgiften om den inte finns

.PARAMETER ComputerName     Valfri. Matris med datornamn som du vill kontrollera/aktivera aktiviteten på.Om det inte anges körs det på den lokala datorn.

.PARAMETER Credential     Valfri. Autentiseringsuppgifter för fjärrdatoråtkomst.

.PARAMETER Quiet     Ignorerar uppmaningar och svarar automatiskt ja. Användbart för automatisering.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Aktiverar aktivitetsstatus på lokal dator

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 aktivera     # Aktiverar aktiviteten om den är inaktiverad. Promptar att skapa om det saknas.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 skapa     # Skapar aktiviteten om den togs bort och kontrollerar dess status

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"     # Kontrollerar uppgiften på fjärrdatorer

.NOTES     Administratörsbehörighet krävs för att aktivera eller skapa uppgiften.Uppgiftssökväg: \Microsoft\Windows\PI\Secure-Boot-Update     Uppgiften körs taskhostw.exe var 12:e timme med förhöjd behörighet.#>

[CmdletBinding(SupportsShouldProcess)] param(     [Parameter(Position=0)]     [ValidateSet('check', 'enable', 'create', '')]     [sträng]$Action = "aktivera",

    [Parameter()]     [sträng[]]$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! Det här skriptet körs på slutpunkter för att aktivera uppgiften Säker start-uppdatering.

$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         Fel = $null     }

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # Använd schtasks.exe för mer tillförlitlig uppgiftsidentifiering             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # Uppgiften hittades inte är ett fel – det betyder bara att aktiviteten inte finns                 $result. TaskExists = $false                 returnera $result             }                          # Parsa CSV-utdata             $taskData = $schtasksOutput | KonverteraFrom-Csv             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -eller $taskData.Status -eq 'Running')                                  # Försök att få nästa körningstid från data                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     prova {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } fångst { }                 }             }         }         else {             # Fjärrdator – använda 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) {                 # Uppgiften hittades inte är ett fel – det betyder bara att aktiviteten inte finns                 $result. TaskExists = $false                 returnera $result             }

            $taskData = $remoteResult.Output | ConvertFrom-Csv             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -eller $taskData.Status -eq 'Running')             }         }     }     catch {         $result. Fel = $_. Undantag.Meddelande     }

    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     # Använder ComHandler med SBServicing-klass, körs som LocalSystem     $taskXml = @" <?xml version="1.0" kodning="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     <datum>2012-02-07T16:39:20</Datum>     <SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <Source>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <författare>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <Beskrivning>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>   <Principals>     <Principal id="LocalSystem">       <UserId>S-1-5-18</UserId>     </Principal>   </Principals>   <Inställningar>     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <StartNärtillgänglig>sant</StartNärtillgänglig>     <IdleSettings>       <StopOnIdleEnd>sant</StopOnIdleEnd>       <RestartOnIdle>false</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>   </Settings>   <utlöser>     <BootTrigger>       <fördröjning>PT5M</Delay>       <Repetition>         <Intervall>PT12H</Interval>       </Repetition>     </BootTrigger>   </Triggers>   <Actions Context="LocalSystem">     <comHandler>       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <data><! [CDATA[SBServicing]]></Data>     </ComHandler>   </Actions> </Task> " @

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {                 # Spara XML för att spara filen och importera                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Kodning Unicode -Force                                  $output = schtasks.exe /Create /TN "$TaskPath$TaskName" /XML $tempFile /F 2>&1                                  Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                                  if ($LASTEXITCODE -eq 0) {                     $success = $true                 } annars {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($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 -Kodning 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                                  om ($result. ExitCode -eq 0) {                     $success = $true                 } annars {                     $errorMsg = $result. Utdata -join " "                 }             }         }     }     catch {         $errorMsg = $_. Undantag.Meddelande     }

    return @{         Success = $success         Fel = $errorMsg     } }

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

    $success = $false     $errorMsg = $null

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Enable scheduled task")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 if ($LASTEXITCODE -eq 0) {                     $success = $true                 } annars {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($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                                  om ($result. ExitCode -eq 0) {                     $success = $true                 } annars {                     $errorMsg = $result. Utdata -join " "                 }             }         }     }     catch {         $errorMsg = $_. Undantag.Meddelande     }

    return @{         Success = $success         Fel = $errorMsg     } }

# Main execution Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host " Secure Boot Update Task Enabler" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" Write-Host "Uppgift: $TaskPath$TaskName" -ForegroundColor Gray Write-Host ""

# Determine target computers $targets = om ($ComputerName) { $ComputerName } annars { @($env:DATORNAMN) }

$results = @()

foreach ($computer in $targets) {     Write-Host "Checking: $computer" -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -Dator $computer     om ($status. Fel) {         Write-Host " Fel: $($status. Fel)" -ForegroundColor Red     }     elseif (inte $status. TaskExists) {         Write-Host " Uppgiften finns inte på det här systemet" -FörgrundFärg röd         # Skapa om det begärs eller fråga om Aktivera har angetts         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host " Uppgiften kan ha tagits bort." -FörgrundFärg gul             if ($Quiet) {                 Write-Host " Automatisk skapande av uppgift (tyst läge)" - FörgrundFärg Cyan                 $shouldCreate = $true             } annars {                 $confirm = Read-Host " Vill du återskapa uppgiften?                    (Y/N)"                 if ($confirm -eq 'Y' -or $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  if ($shouldCreate) {             Write-Host "Skapa uppgift..." -FörgrundFärg gul             $createResult = New-SecureBootTask -Dator $computer                          if ($createResult.Success) {                 Write-Host " Uppgiften har skapats" -Förgrundfärg Grön                 # Kontrollera status igen                 $status = Get-SecureBootTaskStatus -Dator $computer                                  om ($status. TaskExists) {                     $stateColor = om ($status. IsEnabled) { "Grön" } annars { "Röd" }                     Write-Host " Delstat: $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host " Det gick inte att skapa: $($createResult.Error)" -ForegroundColor Red             }         }     }     else {         $stateColor = om ($status. IsEnabled) { "Grön" } annars { "Röd" }         Write-Host " Delstat: $($status. TaskState)" -ForegroundColor $stateColor                  om ($status. LastRunTime – och $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Senaste körning: $($status. LastRunTime)" -ForegroundColor Gray         }         om ($status. NextRunTime - och $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Nästa körning: $($status. NextRunTime)" -ForegroundColor Gray         }

        # Enable if requested and currently disabled         om ($Enable -och -inte $status. IsEnabled) {             Write-Host " Aktivering av uppgift..." -FörgrundFärg gul             $enableResult = Enable-SecureBootTask -Dator $computer             if ($enableResult.Success) {                 Write-Host " Aktivitet aktiverad korrekt" -FörgrundFärg grön                 # Kontrollera status igen                 $status = Get-SecureBootTaskStatus -Dator $computer             }             else {                 Write-Host " Det gick inte att aktivera: $($enableResult.Error)" -ForegroundColor Red             }         }         elseif ($Enable - och $status. IsEnabled) {             Write-Host " Uppgiften är redan aktiverad" -FörgrundFärg grön         }     }     $results += $status     Write-Host "" }                  

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

$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_. TaskExists - och -not $_. IsEnabled }). Räkna $notFound = ($results | Where-Object { -not $_. TaskExists }). Räkna $errors = ($results | Where-Object { $_. Fel }). Räkna

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

# Return results for pipeline $results  

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.