DÔLEŽITÉ Tento článok obsahujúci tento vzorový skript bol vyradený. Počnúc aktualizáciami Windowsu vydanými 12. mája 2026 a neskôr sa vzorový skript nachádza v priečinku %systemroot%\SecureBoot\ExampleRolloutScripts vo vašom zariadení.

Skopírujte a prilepte tento vzorový skript a podľa potreby ho upravte pre svoje prostredie:

<# . PREHĽADU     Umožňuje naplánovať úlohu aktualizácie zabezpečeného spustenia.

.DESCRIPTION     Tento skript zabezpečí, že plánovaná úloha aktualizácie zabezpečeného spustenia systému Windows     (\Microsoft\Windows\PI\Secure-Boot-Update) je povolené. Ak je vypnutá,     umožňuje. Ak bola úloha odstránená, môže ju znova vytvoriť.

.PARAMETER Action     Akcia, ktorá sa má vykonať. Platné hodnoty: kontrola, povolenie, vytvorenie     - kontrola: Kontrolovať iba stav úlohy     - povoliť: (predvolené) Ak je úloha vypnutá, povoľte ju. Ak úloha chýba, zobrazí sa výzva na vytvorenie.- create: Vytvorte úlohu, ak neexistuje

.PARAMETER ComputerName     Voliteľné. Pole názvov počítačov na kontrolu/povolenie úlohy.Ak nie je zadané, spustí sa v lokálnom počítači.

.PARAMETER Credential     Voliteľné. Poverenia pre vzdialený prístup k počítaču.

.PARAMETER Quiet     Potlačí výzvy a automaticky odpovie áno. Užitočné pre automatizáciu.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Umožňuje stav úlohy v lokálnom počítači

.EXAMPLE     Povolenie .\Check-SecureBootScheduledTask.ps1     # Povolí úlohu, ak je zakázaná. Príkazy vytvoriť, ak chýba.

.EXAMPLE     Vytvoriť .\Check-SecureBootScheduledTask.ps1     # Vytvorí úlohu, ak bola odstránená, a potom skontroluje jej stav

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"     # Skontroluje úlohu na vzdialených počítačoch

.NOTES     Vyžaduje oprávnenia správcu na povolenie alebo vytvorenie úlohy.Cesta k úlohe: \Microsoft\Windows\PI\Secure-Boot-Update     Úloha sa spúšťa taskhostw.exe každých 12 hodín so zvýšenými oprávneniami.#>

[CmdletBinding(SupportsShouldProcess)] param(     [Parameter(Pozícia=0)]     [ValidateSet('check', 'enable', 'create', '')]     [reťazec]$Action = "enable",

    [Parameter()]     [reťazec[]]$ComputerName,

    [Parameter()]     [PSCredential]$Credential,

    [Parameter()]     [Alias('Force', 'Silent')]     [prepínač]$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" # Poznámka: Tento skript sa spúšťa na koncových bodoch na povolenie úlohy aktualizácie zabezpečeného spustenia.

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

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

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

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # Použitie schtasks.exe na spoľahlivejšie zisťovanie úloh             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # Úloha sa nenašla, nie je chyba – znamená to len, že úloha neexistuje                 $result. TaskExists = $false                 vrátenie $result             }                          # Analyzovať CSV výstup             $taskData = $schtasksOutput | Konvertovať Z-Csv             ak ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')                                  # Pokúste sa získať čas ďalšieho spustenia z údajov                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     vyskúšať {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } chytiť { }                 }             }         }         else {             # Vzdialený počítač – použite Invoke-Command s úlohami             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Výstup = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # Úloha sa nenašla, nie je chyba – znamená to len, že úloha neexistuje                 $result. TaskExists = $false                 vrátenie $result             }

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

    return $result }

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

    $success = $false     $errorMsg = $null

    # Task definition - matches the original Windows Secure Boot Update task     # Používa ComHandler s triedou SBServicing, funguje ako LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     <Dátum>2012-02-07T16:39:20</Dátum>     <SecurityDescriptor>O:BAG:BAD:P(A;; DM;;; BA)(A;; DM;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <zdrojový>$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Zdrojový>     <autor>$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Autor>     <popis>$(@%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>  >nastavení <     <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>  >spúšťačov <     <BootTrigger>       <</Oneskorenie>PT5M>      >opakovania <        </Interval>PT12H><interval       </Opakovanie>     </BootTrigger>   </Triggers>   <Actions Context="LocalSystem">     <ComHandler>       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <>< údajov! [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")) {                 # Uložiť XML do dočasného súboru a importovať                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Kódovanie 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                 } else {                     $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 -Kódovanie Unicode -Force                     $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; Výstup = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  ak ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Výstup -join " "                 }             }         }     }     chytiť {         $errorMsg = $_. Exception.Message     }

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

function Enable-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [reťazec]$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                 } else {                     $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; Výstup = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  ak ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Výstup -join " "                 }             }         }     }     chytiť {         $errorMsg = $_. Exception.Message     }

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

# Main execution Write-Host "" Write-Host "========================================" -Azúrová farba popredia Write-Host " Secure Boot Update Task Enabler" -ForegroundColor Cyan Write-Host "========================================" -Azúrová farba popredia Write-Host "" Write-Host "Task: $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     ak ($status. Chyba) {         Write-Host " Chyba: $($status. Error)" -ForegroundColor Red     }     elseif (-nie $status. TaskExists) {         Write-Host " Úloha neexistuje v tomto systéme" -ForegroundColor Red         # Vytvoriť v prípade požiadavky alebo zobraziť výzvu, ak bolo zadané povolenie         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host Úloha bola pravdepodobne odstránená. -Farba popredia žltá             ak ($Quiet) {                 Write-Host " Úloha automatického vytvárania (tichý režim)" -Azúrová farba popredia                 $shouldCreate = $true             } else {                 $confirm = Read-Host " Chcete úlohu znova vytvoriť?                    (Y/N)"                 if ($confirm -eq 'Y' -or $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  ak ($shouldCreate) {             Write-Host " Creating task..." -ForegroundColor Yellow             $createResult = New-SecureBootTask -Computer $computer                          if ($createResult.Success) {                 Write-Host " Úloha sa úspešne vytvorila" -Farba popredia – zelená                 # Znova skontrolovať stav                 $status = Get-SecureBootTaskStatus -Computer $computer                                  ak ($status. TaskExists) {                     $stateColor = if ($status. IsEnabled) { "Green" } else { "Red" }                     Write-Host " State: $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host " Nepodarilo sa vytvoriť: $($createResult.Error)" -ForegroundColor Red             }         }     }     else {         $stateColor = if ($status. IsEnabled) { "Green" } else { "Red" }         Write-Host " Štát: $($status. TaskState)" -ForegroundColor $stateColor                  ak ($status. LastRunTime a $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Last Run: $($status. LastRunTime)" -ForegroundColor Gray         }         ak ($status. NextRunTime a $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Ďalšie spustenie: $($status. NextRunTime)" -Farba popredia Sivá         }

        # 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 "Úloha bola úspešne povolená" -Farba popredia – zelená                 # Znova skontrolovať stav                 $status = Get-SecureBootTaskStatus -Computer $computer             }             else {                 Write-Host " Nepodarilo sa povoliť: $($enableResult.Error)" -ForegroundColor Red             }         }         elseif ($Enable - a $status. IsEnabled) {             Write-Host " Úloha je už povolená" -Farba popredia – zelená         }     }     $results += $status     Write-Host "" }                  

# Summary Write-Host "========================================" -Azúrová farba popredia Write-Host " Summary" -ForegroundColor Azúrová Write-Host "========================================" -Azúrová farba popredia

$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_. TaskExists -a -nie $_. IsEnabled }). Počítať $notFound = ($results | Where-Object { -not $_. TaskExists }). Počítať $errors = ($results | Where-Object { $_. Chyba }). Počítať

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 "Not Found: $notFound" -ForegroundColor Yellow } if ($errors -gt 0) { Write-Host "Errors: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.