DŮLEŽITÉ Tento článek obsahující tento ukázkový skript byl vyřazen. Počínaje aktualizacemi Windows vydanými 12. května 2026 a po tomto období se ukázkový skript nachází ve složce %systemroot%\SecureBoot\ExampleRolloutScripts na vašem zařízení.

Zkopírujte a vložte tento ukázkový skript a upravte ho podle potřeby pro vaše prostředí:

<# . SYNOPSE     Povolí naplánovanou úlohu aktualizace zabezpečeného spouštění.

.DESCRIPTION     Tento skript zajišťuje naplánovanou úlohu aktualizace zabezpečeného spouštění systému Windows.     (\Microsoft\Windows\PI\Secure-Boot-Update) je povolená. Pokud je zakázáno,     to umožňuje. Pokud byl úkol odstraněn, může ho znovu vytvořit.

.PARAMETER Action     Akce, která se má provést. Platné hodnoty: check, enable, create     – kontrola: Zkontrolujte pouze stav úkolu.     – povolit: (výchozí) Povolte úlohu, pokud je zakázaná. Pokud úkol chybí, zobrazí výzvu k vytvoření.- create: Vytvořte úlohu, pokud neexistuje.

.PARAMETER ComputerName     Volitelné. Pole názvů počítačů, které mají úkol zkontrolovat nebo povolit.Pokud není zadaný, spustí se na místním počítači.

.PARAMETER Credential     Volitelné. Přihlašovací údaje pro přístup ke vzdálenému počítači.

.PARAMETER Quiet     Potlačí výzvy a automaticky odpoví Ano. Užitečné pro automatizaci.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Povolí stav úlohy na místním počítači.

.EXAMPLE     Povolit .\Check-SecureBootScheduledTask.ps1     # Povolí úlohu, pokud je zakázaná. Výzvy, která se má vytvořit, pokud chybí.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 create     # Vytvoří úlohu, pokud byla odstraněna, a pak zkontroluje její stav.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 zaškrtněte -ComputerName "PC1", "PC2"     # Zkontroluje úlohu na vzdálených počítačích.

.NOTES     K povolení nebo vytvoření úlohy vyžaduje oprávnění správce.Cesta úlohy: \Microsoft\Windows\PI\Secure-Boot-Update     Úloha se spouští taskhostw.exe každých 12 hodin se zvýšenými oprávněními.#>

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

    [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" # Poznámka: Tento skript se spustí na koncových bodech a povolí úlohu aktualizace zabezpečeného spouštění.

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

function Get-SecureBootTaskStatus {     [RutinaBinding()]     param(         [string]$Computer = $env:NÁZEV POČÍTAČE     )

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

    try {         if ($Computer -eq $env:NÁZEV_POČÍTAČE -nebo $Computer -eq "localhost" -nebo $Computer -eq ".") {             # Použití schtasks.exe pro spolehlivější detekci úloh             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # Úkol nebyl nalezen není chyba – znamená to, že úkol neexistuje.                 $result. TaskExists = $false                 vrácení $result             }                          # Parsovat výstup CSV             $taskData = $schtasksOutput | ConvertFrom-Csv             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -nebo $taskData.Status -eq 'Running')                                  # Zkuste z dat získat čas příštího spuštění.                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     try {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } catch { }                 }             }         }         else {             # Vzdálený počítač - použití Invoke-Command s schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Output = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # Úkol nebyl nalezen není chyba – znamená to, že úkol neexistuje.                 $result. TaskExists = $false                 return $result             }

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

    return $result }

function New-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [string]$Computer = $env:NÁZEV POČÍTAČE     )

    $success = $false     $errorMsg = $null

    # Task definition - matches the original Windows Secure Boot Update task     # Používá ComHandler s třídou SBServicing, spouští se jako 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>     <SecurityDescriptor>O:BAG:BAD:P(A;; DM;;; BA)(A;; DM;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <Zdrojová>$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <Author>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <Popis>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <identifikátor URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>  ></RegistrationInfo  > objektů zabezpečení <     <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   triggery <>     <> BootTrigger       <Delay>PT5M</Delay>       <opakování>         <Interval>PT12H</Interval>       </Opakování>    ></BootTrigger   </Triggery>   <Actions Context="LocalSystem">    > <ComHandler       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <data><! [CDATA[SBServicing]]]></Data>     </ComHandler>  > </Actions </Task> " @

    try {         if ($Computer -eq $env:NÁZEV_POČÍTAČE -nebo $Computer -eq "localhost" -nebo $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {                 # Uložit XML do dočasného souboru a importovat                 $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                 } else {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Vytvořit naplánovanou úlohu")) {                 $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; Output = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Output -join " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Úspěch = $success         Chyba = $errorMsg     } }

function Enable-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [string]$Computer = $env:NÁZEV POČÍTAČE     )

    $success = $false     $errorMsg = $null

    try {         if ($Computer -eq $env:NÁZEV_POČÍTAČE -nebo $Computer -eq "localhost" -nebo $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", "Povolit naplánovanou úlohu")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     param($fullTaskName)                     $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1                     @{ ExitCode = $LASTEXITCODE; Output = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Output -join " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Úspěch = $success         Chyba = $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 "Task: $TaskPath$TaskName" -ForegroundColor Gray Write-Host ""

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

$results = @()

foreach ($computer in $targets) {     Write-Host "Kontrola: $computer" -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -Computer $computer     if ($status. Chyba) {         Write-Host " Chyba: $($status. Chyba)" -ForegroundColor Red     }     elseif (-not $status. TaskExists) {         Write-Host "Úkol v tomto systému neexistuje" -ForegroundColor Red         # Vytvořit, pokud je požadováno, nebo dotázat se, pokud bylo zadáno Povolení         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host "Úkol byl pravděpodobně odstraněn." -ForegroundColor Yellow             if ($Quiet) {                 Write-Host " Automatické vytváření úkolu (tichý režim)" -ForegroundColor azurová                 $shouldCreate = $true             } else {                 $confirm = Read-Host " Chcete úkol znovu vytvořit?                    (A/N)"                 if ($confirm -eq 'Y' -nebo $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  if ($shouldCreate) {             Write-Host "Vytváření úkolu..." -ForegroundColor Yellow             $createResult = New-SecureBootTask -Computer $computer                          if ($createResult.Success) {                 Write-Host "Úkol se úspěšně vytvořil" -ForegroundColor Green                 # Znovu zkontrolovat stav                 $status = Get-SecureBootTaskStatus -Computer $computer                                  if ($status. TaskExists) {                     $stateColor = když ($status. IsEnabled) { "Green" } else { "Red" }                     Write-Host " Stav: $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host "Nepodařilo se vytvořit: $($createResult.Error)" -ForegroundColor Red             }         }     }     else {         $stateColor = když ($status. IsEnabled) { "Green" } else { "Red" }         Write-Host " Stav: $($status. TaskState)" -ForegroundColor $stateColor                  if ($status. LastRunTime a $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Poslední spuštění: $($status. LastRunTime)" -ForegroundColor Gray         }         if ($status. NextRunTime a $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Další spuštění: $($status. NextRunTime)" -ForegroundColor Gray         }

        # Enable if requested and currently disabled         if ($Enable -a -not $status. IsEnabled) {             Write-Host "Povolení úkolu..." -ForegroundColor Yellow             $enableResult = Enable-SecureBootTask -Computer $computer             if ($enableResult.Success) {                 Write-Host "Úloha byla úspěšně povolena" -ForegroundColor Green                 # Znovu zkontrolovat stav                 $status = Get-SecureBootTaskStatus -Computer $computer             }             else {                 Write-Host "Nepovedlo se povolit: $($enableResult.Error)" -ForegroundColor Red             }         }         elseif ($Enable a $status. IsEnabled) {             Write-Host "Úkol je už povolený" –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 }). Počet $notFound = ($results | Where-Object { -not $_. TaskExists }). Počet $errors = ($results | Where-Object { $_. Chyba }). Počet

Write-Host "Total Checked: $($results.Count)" Write-Host "Povoleno: $enabled" -ForegroundColor Green if ($disabled -gt 0) { Write-Host "Zakázáno: $disabled" -ForegroundColor Red } if ($notFound -gt 0) { Write-Host "Nenalezena: $notFound" -ForegroundColor Yellow } if ($errors -gt 0) { Write-Host "Errors: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.