VAŽNO Ovaj članak koji sadrži ovu oglednu skriptu povučen je iz upotrebe. Počevši od ažuriranja sustava Windows objavljenih 12. svibnja 2026. i kasnije, ogledna skripta nalazi se u mapi %systemroot%\SecureBoot\ExampleRolloutScripts na vašem uređaju .

Kopirajte i zalijepite ovu oglednu skriptu te je izmijenite po potrebi za svoje okruženje:

<# . SINOPSIS     Omogućuje zakazani zadatak ažuriranja sigurnog pokretanja sustava.

.DESCRIPTION     Ta skripta osigurava zakazani zadatak ažuriranja sigurnog pokretanja sustava Windows     (\Microsoft\Windows\PI\Secure-Boot-Update). Ako je onemogućeno,     ona to omogućuje. Ako je zadatak izbrisan, može ga ponovno stvoriti.

.PARAMETER Action     Radnja koju treba izvršiti. Valjane vrijednosti: provjera, omogućivanje, stvaranje     - provjera: Provjera samo statusa zadatka     - Omogući: (zadano) Omogući zadatak ako je onemogućen. Ako zadatak nedostaje, upite za stvaranje.- stvori: Stvorite zadatak ako ne postoji

.PARAMETER ComputerName     Neobavezno. Polje naziva računala na kojima treba provjeriti/omogućiti zadatak.Ako nije određeno, pokreće se na lokalnom računalu.

.PARAMETER Credential     Neobavezno. Vjerodajnice za daljinski pristup računalu.

.PARAMETER Quiet     Istiskuje upite i automatski odgovara Da. Korisno za automatizaciju.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Omogućuje status zadatka na lokalnom računalu

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 omogući     # Omogućuje zadatak ako je onemogućen. Upiti za stvaranje ako nedostaje.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 create     # stvara zadatak ako je izbrisan, a zatim provjerava stanje njegove

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"     # Provjerava zadatak na udaljenim računalima

.NOTES     Potrebne su administratorske ovlasti za omogućivanje ili stvaranje zadatka.Put zadatka: \Microsoft\Windows\PI\Secure-Boot-Update     Zadatak se pokreće taskhostw.exe svakih 12 sati s dodatnim ovlastima.#>

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

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

    [Parameter()]     [PSCredential]$Credential,

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

# Convert Action to switches for backward compatibility $Enable = $Action -eq 'omogući' $Create = $Action -eq 'stvori'

# Download URL: https://aka.ms/getsecureboot -> "Deployment and Monitoring Samples" # Napomena: ta se skripta pokreće na krajnjim točkama da bi omogućila zadatak ažuriranja sigurnog pokretanja sustava.

$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         Pogreška = $null     }

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # Korištenje schtasks.exe za pouzdanije otkrivanje zadataka             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # Zadatak nije pronađen nije pogreška – samo znači da zadatak ne postoji                 $result. TaskExists = $false                 Povrat $result             }                          # Analiza CSV izlaza             $taskData = $schtasksOutput | ConvertFrom-Csv             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Spreman' -ili $taskData.Status -eq 'Izvršava se')                                  # Pokušajte dohvatiti vrijeme sljedećeg izvođenja iz podataka                 if ($taskData.'Vrijeme sljedećeg izvođenja' -and $taskData.'Vrijeme sljedećeg izvođenja' -ne 'N/A') {                     try {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Vrijeme sljedećeg izvođenja')                     } ulov { }                 }             }         }         else {             # Udaljeno računalo - korištenje Invoke-Command uz schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Izlaz = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # Zadatak nije pronađen nije pogreška – samo znači da zadatak ne postoji                 $result. TaskExists = $false                 Povrat $result             }

            $taskData = $remoteResult.Output | ConvertFrom-Csv             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')             }         }     }     catch {         $result. Pogreška = $_. 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     # Koristi ComHandler s klasom SBServicing, pokreće se kao LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     <Date>2012-02-07T16:39:20</Date>     <SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <Source>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</source>     <Author>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <Description>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>   <Principali>     <Principal id="LocalSystem">       <UserId>S-1-5-18</UserId>     </Glavni>   </Principals>   <Postavke>     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <StartWhenAvailable>true</StartWhenAvailable>     <IdleSettings>       <StopOnIdleEnd>true</StopOnIdleEnd>       <RestartOnIdle>false</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>   </Settings>   <Okidači>     <BootTrigger>       <Delay>PT5M</Delay>       <Ponavljanje>         <interval>PT12H</interval>       </Ponavljanje>     </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", "Stvori zakazani zadatak")) {                 # Spremi XML u privremenu datoteku i uvezi                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Encoding Unicode -Force                                  $output = schtasks.exe /Create /TN "$TaskPath$NazivZadatka" /XML $tempFile /F 2>&1                                  Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                                  if ($LASTEXITCODE -eq 0) {                     $success = $true                 } else {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Stvori zakazani zadatak")) {                 $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; Izlaz = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Output -join " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Uspjeh = $success         Pogreška = $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", "Omogući zakazani zadatak")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 if ($LASTEXITCODE -eq 0) {                     $success = $true                 } else {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Omogući zakazani zadatak")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     param($fullTaskName)                     $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1                     @{ ExitCode = $LASTEXITCODE; Izlaz = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Output -join " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Uspjeh = $success         Pogreška = $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 "Zadatak: $TaskPath$NazivZadatka" -foregroundColor Grey 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          if ($status. ) {         Write-Host " Pogreška: $($status. Error)" -foregroundColor Red     }     elseif (-not $status. TaskExists) {         Write-Host " Zadatak ne postoji na ovom sustavu" -ForegroundColor Red                  # Stvorite ako se to zatraži ili upitajte ako je određena mogućnost Omogući         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host " Zadatak je možda izbrisan." -ForegroundColor Yellow             if ($Quiet) {                 Write-Host " Zadatak automatskog stvaranja (tihi način)" -ForegroundColor Cyan                 $shouldCreate = $true             } else {                 $confirm = Read-Host " Želite li ponovno stvoriti zadatak? (Y/N)"                 if ($confirm -eq 'Y' -or $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  if ($shouldCreate) {             Write-Host " Creating task..." -foregroundColor Yellow             $createResult = New-SecureBootTask -Computer $computer                          if ($createResult.Success) {                 Write-Host " Task created successfully" -ForegroundColor Green                 # Ponovno provjeri status                 $status = Get-SecureBootTaskStatus -Computer $computer                                  if ($status. TaskExists) {                     $stateColor = if ($status. IsEnabled) { "Zelena" } else { "Crvena" }                     Write-Host " Država: $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host " Stvaranje nije uspjelo: $($createResult.Error)" -ForegroundColor Red             }         }     }     else {         $stateColor = if ($status. IsEnabled) { "Zelena" } else { "Crvena" }         Write-Host " Stanje: $($status. TaskState)" -ForegroundColor $stateColor                  if ($status. LastRunTime – i $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Zadnje pokretanje: $($status. LastRunTime)" -ForegroundColor Grey         }         if ($status. NextRunTime – i $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Sljedeće pokretanje: $($status. NextRunTime)" -ForegroundColor Grey         }

        # Enable if requested and currently disabled         if ($Enable -and -not $status. IsEnabled) {             Write-Host " Enabling task..." -ForegroundColor Yellow             $enableResult = Enable-SecureBootTask -Computer $computer                          if ($enableResult.Success) {                 Write-Host " Task successfully" -ForegroundColor Green                 # Ponovno provjeri status                 $status = Get-SecureBootTaskStatus -Computer $computer             }             else {                 Write-Host " Failed to enable: $($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 " summary" -foregroundColor Cyan Write-Host "========================================" -foregroundColor Cyan

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

Write-Host "Total Checked: $($results.Count)" Write-Host "Omogućeno: $enabled" -ForegroundColor Green if ($disabled -gt; 0) { Write-Host "Onemogućeno: $disabled" -ForegroundColor Red } if ($notFound -gt; 0) { Write-Host "Nije pronađeno: $notFound" -foregroundColor yellow } if ($errors -gt; 0) { Write-Host "Pogreške: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.