POMEMBNO Ta članek, ki vsebuje ta vzorčni skript, je bil ukinjen. Od izdaje posodobitev sistema Windows 12. maja 2026 in po tem se vzorčni skript nahaja v mapi %systemroot%\SecureBoot\ExampleRolloutScripts v vaši napravi.

Kopirajte in prilepite ta vzorčni skript ter ga po potrebi spremenite za svoje okolje:

<# . SINOPSIS     Omogoča načrtovano opravilo posodobitve varnega zagona.

.DESCRIPTION     Ta skript zagotavlja načrtovano opravilo posodobitve varnega zagona sistema Windows     (\Microsoft\Windows\PI\Secure-Boot-Update) je omogočen. Če je onemogočeno,     to omogoča. Če je bilo opravilo izbrisano, ga lahko znova ustvarite.

.PARAMETER Action     Dejanje, ki ga želite izvesti. Veljavne vrednosti: preverjanje, omogočanje, ustvarjanje     - check: Only check the task status     – omogoči: (privzeto) Omogoči opravilo, če je onemogočeno. Če opravilo manjka, morate ustvariti pozive.– ustvarjanje: ustvarite opravilo, če ne obstaja

.PARAMETER ComputerName     Neobvezno. Matrika imen računalnika za preverjanje/omogočanje opravila.Če ni navedeno, se izvaja v lokalnem računalniku.

.PARAMETER Credential     Neobvezno. Poverilnice za oddaljeni dostop do računalnika.

.PARAMETER Quiet     Prepreči pozive in samodejno odgovori na »Da«. Uporabno za avtomatizacijo.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Omogoči stanje opravila v lokalnem računalniku

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 omogoči     # Omogoči opravilo, če je onemogočeno. Pozivi, če manjka.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 create     # Ustvari opravilo, če je bilo izbrisano, nato pa preveri njegovo stanje

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"     # Preveri opravilo v oddaljenih računalnikih

.NOTES     Za omogočanje ali ustvarjanje opravila potrebujete skrbniške pravice.Pot opravila: \Microsoft\Windows\PI\Secure-Boot-Update     Opravilo se taskhostw.exe vsakih 12 ur s povišanimi pravicami.#>

[CmdletBinding(SupportsShouldProcess)] param (     [Parameter(Position=0)]     [ValidateSet('check', 'enable', 'create', '')]     [string]$Action = 'enable',

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

    [Parameter()]     [PSCredential]$Credential,

    [Parameter()]     [Alias('Force', 'Silent')]     [stikalo]$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" # Opomba: Ta skript se zažene na končnih točkah, da omogoči opravilo za posodobitev varnega zagona.

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

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

    $result = [PSCustomObject]@{         Ime računalnika = $Computer         TaskExists = $false         Stanje opravila = $null         IsEnabled = $false         LastRunTime = $null         NextRunTime = $null         Napaka = $null     }

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # Uporabite schtasks.exe za zanesljivejše zaznavanje opravil             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE-ne 0) {                 # Opravila ni mogoče najti, ker je ni mogoče najti, pač pa pomeni, da opravilo ne obstaja                 -$result. TaskExists = $false                 return $result             }                          # Razčlenite izhod CSV             $taskData = $schtasksOutput | ConvertFrom- Csv             if ($taskData) {                 -$result. TaskExists = $true                 -$result. Stanje opravila = $taskData.Stanje                 -$result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')                                  # Poskusite dobiti čas naslednjega izvajanja iz podatkov                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     poskusite {                         -$result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } ulov { }                 }             }         }         druga oseba {             # Oddaljeni računalnik – Invoke-Command z schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 V tem razdelku so vam na primer na                     ExitCode = $LASTEXITCODE                     Izhod = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # Opravila ni mogoče najti, ker je ni mogoče najti, pač pa pomeni, da opravilo ne obstaja                 -$result. TaskExists = $false                 return $result             }

            $taskData = $remoteResult.Output | ConvertFrom-Csv             if ($taskData) {                 -$result. TaskExists = $true                 -$result. Stanje opravila = $taskData.Stanje                 -$result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')             }         }     }     ulov {         -$result. Napaka = $_. Izjema.Sporočilo     }

    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     # Uses ComHandler with SBServicing class, runs as LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     <datum>2012-02-07T16:39:20</Date>     <Varnostni deskriptor>O:BAG:BAD:P(A;; OS;;; BA)(A;; OS;;; SY)(A;; FRFX;; LS)</SecurityDescriptor>     <source>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <avtor>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <Opis>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>   <Upravniki>     <Principal id="LocalSystem">       <UserId>S-1-5-18</UserId>     </Principal>   </Principals>   <Nastavitve>     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 »MultipleInstancesPolicy«>IgnoreNew</MultipleInstancesPolicy>     <StartWhenAvailable>true</StartWhenAvailable>     <IdleSettings>       <StopOnIdleEnd>resnično</StopOnIdleEnd>       <RestartOnIdle>false</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>   </Settings>   <Sprožilci>     <BootTrigger>       <zakasnitev>PT5M</Delay>       <Ponovitev>         <Interval>PT12H</Interval>       </Ponovitev>     </BootTrigger>   </Triggers>   <Actions Context="LocalSystem">     <ComHandler>       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <podatkov><! [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")) {                 # Shranjevanje XML-ja v začasno datoteko in uvoz                 $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                                  if ($LASTEXITCODE -eq 0) {                     $success = $true                 } drugo {                     $errorMsg = $output -join " "                 }             }         }         druga oseba {             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 -Encoding Unicode -Force                     $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; Izhod = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  če ($result. ExitCode -eq 0) {                     $success = $true                 } drugo {                     $errorMsg = $result. Output -join " "                 }             }         }     }     ulov {         $errorMsg = $_. Izjema.Sporočilo     }

    return @{         Uspeh = $success         Napaka = $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                 } drugo {                     $errorMsg = $output -join " "                 }             }         }         druga oseba {             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; Izhod = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  če ($result. ExitCode -eq 0) {                     $success = $true                 } drugo {                     $errorMsg = $result. Output -join " "                 }             }         }     }     ulov {         $errorMsg = $_. Izjema.Sporočilo     }

    return @{         Uspeh = $success         Napaka = $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 »Opravilo: $TaskPath$TaskName« -ForegroundColor Gray Write-Host »«

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

$results = @()

foreach ($computer in $targets) {     Write-Host »Checking: $computer« -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -Computer $computer     če ($status. Napaka) {         Write-Host » Napaka: $($status. Napaka)« –ospredjeBarva rdeče     }     elseif (-not $status. TaskExists) {         Write-Host »Opravilo ne obstaja v tem sistemu« –OspredjeBarva rdeče         # Ustvari, če je bilo zahtevano, ali poziv, če je bila možnost »Omogoči« določena         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host »«             Write-Host » Opravilo je bilo morda izbrisano.« -Barva ospredjaBarva rumena             if ($Quiet) {                 Write-Host »Auto-creating task (Quiet mode)« -ForegroundColor Cyan                 $shouldCreate = $true             } drugo {                 $confirm = Read-Host « Ali želite znova ustvariti opravilo?                    (Y/N)"                 če ($confirm -eq 'Y' -ali $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  if ($shouldCreate) {             Write-Host »Creating task...« (Ustvarjanje opravila ... – ospredjeBarva rumena             $createResult = New-SecureBootTask -Computer $computer                          if ($createResult.Success) {                 Write-Host »Task created successfully« -ForegroundColor Green                 # Znova preverite stanje                 $status = Get-SecureBootTaskStatus -Computer $computer                                  če ($status. TaskExists) {                     $stateColor = if ($status. IsEnabled) { "Zelena" } drugo { "Rdeča" }                     Write-Host » Država: $($status. Stanje opravila)« – barva ospredja $stateColor                 }             }             druga oseba {                 Write-Host »Ustvarjanje ni uspelo: $($createResult.Error)« -ForegroundColor Red             }         }     }     druga oseba {         $stateColor = if ($status. IsEnabled) { "Zelena" } drugo { "Rdeča" }         Write-Host » Država: $($status. Stanje opravila)« – barva ospredja $stateColor                  če ($status. LastRunTime -and $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host » Zadnji zagon: $($status. LastRunTime)" -ForegroundColor Gray         }         če ($status. NextRunTime -and $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host » Naslednji zagon: $($status. NextRunTime)" -ForegroundColor Gray         }

        # Enable if requested and currently disabled         če ($Enable -in -not $status. IsEnabled) {             Write-Host » Omogočanje opravila ...« – barva ospredjaBarva rumena             $enableResult = Enable-SecureBootTask -Computer $computer             if ($enableResult.Success) {                 Write-Host »Task enabled successfully« -ForegroundColor Green                 # Znova preverite stanje                 $status = Get-SecureBootTaskStatus -Computer $computer             }             druga oseba {                 Write-Host »Ni bilo mogoče omogočiti: $($enableResult.Error)« -ForegroundColor Red             }         }         elseif ($Enable -and $status. IsEnabled) {             Write-Host »Task is already enabled« -ForegroundColor Green         }     }     $results += $status     Write-Host »« }                  

# Summary Write-Host "========================================" -ForegroundColor Cyan Write-Host "Povzetek" -ForegroundColor Cyan Write-Host »========================================« -ForegroundColor Cyan

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

Write-Host "Total Checked: $($results.Count)" Write-Host »Omogočeno: $enabled« –OspredjeBarva zelena if ($disabled -gt 0) { Write-Host "Disabled: $disabled" -ForegroundColor Red } if ($notFound -gt 0) { Write-Host »Ni mogoče najti: $notFound« -ForegroundColor Yellow } if ($errors -gt 0) { Write-Host "Errors: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Ali potrebujete dodatno pomoč?

Ali želite več možnosti?

Raziščite ugodnosti naročnine, prebrskajte izobraževalne tečaje, preberite, kako zaščitite svojo napravo in še več.