ВАЖЛИВО Цю статтю, яка містить цей зразок сценарію, закрито. Починаючи з оновлень Windows, випущених 12 травня 2026 р., зразок сценарію розташовано в папці %systemroot%\SecureBoot\ExampleRolloutScripts на пристрої.

Скопіюйте та вставте цей зразок сценарію та змініть його за потреби для свого середовища:

<# . ПІДСУМОК     Вмикає заплановане завдання оновлення безпечного завантаження.

.DESCRIPTION     Цей сценарій забезпечує заплановане завдання оновлення безпечного завантаження Windows     (\Microsoft\Windows\PI\Secure-Boot-Update) увімкнуто. Якщо вимкнуто,     активує цю функцію. Якщо завдання видалено, його можна створити повторно.

.PARAMETER Action     Дія, яка потрібно виконати. Припустимі значення: перевірка, ввімкнення, створення     - check: Check Only the task status     - enable: (default) Enable the task if disabled. Якщо завдання відсутнє, з'явиться запит на створення.- створення: створення завдання, якщо воно не існує

.PARAMETER ComputerName     Необов'язково. Масив імен комп'ютерів для перевірки та ввімкнення завдання.Якщо не вказано, запускається на локальному комп'ютері.

.PARAMETER Credential     Необов'язково. Облікові дані для віддаленого доступу до комп'ютера.

.PARAMETER Quiet     Блокує запити та автоматично відповідає так. Використовується для автоматизації.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Вмикає стан завдання на локальному комп'ютері

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 увімкнути     # Вмикає завдання, якщо його вимкнуто. Підказки, щоб створити файл, якщо він відсутній.

.EXAMPLE     Створення .\Check-SecureBootScheduledTask.ps1     # Створює завдання, якщо його видалено, а потім перевіряє його стан

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"     # Перевіряє завдання на віддалених комп'ютерах

.NOTES     Для ввімкнення або створення завдання потрібні права адміністратора.Шлях завдання: \Microsoft\Windows\PI\Secure-Boot-Update     Завдання виконується taskhostw.exe кожні 12 годин із правами адміністратора.#>

[CmdletBinding(SupportsShouldProcess)] param(     [Parameter(Position=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" # Примітка. Цей сценарій виконується в кінцевих точках, щоб увімкнути завдання оновлення безпечного завантаження.

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

function Get-SecureBootTaskStatus {     [КомандлетBinding()]     param(         [string]$Computer = $env:ІМ'Я КОМП'ЮТЕРА     )

    $result = [PSCustomObject]@{         Ім'я комп'ютера = $Computer         Індекси завдань = $false         Стан завдання = $null         IsEnabled = $false         LastRunTime = $null         NextRunTime = $null         Помилка = $null     }

    try {         if ($Computer -eq $env:COMPUTERNAME - або $Computer -eq "localhost" -or $Computer -eq ".") {             # Використовуйте schtasks.exe для більш надійного виявлення завдань             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          якщо ($LASTEXITCODE -ne 0) {                 # Завдання не знайдено не є помилкою – просто означає, що завдання не існує                 $result. Індекси завдань = $false                 повернути $result             } (})                          # Аналіз результатів CSV             $taskData = $schtasksOutput | Перетворення файлу CSV             якщо ($taskData) {                 $result. Індекси завдань = $true                 $result. Стан завдання = $taskData.стан                 $result. IsEnabled = ($taskData.Status -eq "Ready" -or $taskData.Status -eq "Running")                                  # Спробуйте отримати наступний час виконання з даних                 якщо ($taskData.'Час наступного виконання' -and $taskData.'Next Run Time" -ne 'N/A') {                     спробуйте {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } зловити { }                 } (})             } (})         } (})         інакше {             # Віддалений комп'ютер - використання Invoke-Command з schtasks             $remoteResult = Invoke-Command -Ім'я комп'ютера $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Вивід = $output                 } (})             } - ArgumentList "$TaskPath$TaskName" - ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # Завдання не знайдено не є помилкою – просто означає, що завдання не існує                 $result. Індекси завдань = $false                 повернути $result             }

            $taskData = $remoteResult.Output | ConvertFrom-Csv             якщо ($taskData) {                 $result. Індекси завдань = $true                 $result. Стан завдання = $taskData.Стан                 $result. IsEnabled = ($taskData.Status -eq "Ready" -or $taskData.Status -eq "Running")             } (})         } (})     } (})     зловити {         $result. Помилка = $_. Виняток.Повідомлення     }

    return $result }

function New-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [string]$Computer = $env:ІМ'Я КОМП'ЮТЕРА     )

    $success = $false     $errorMsg = $null

    # Task definition - matches the original Windows Secure Boot Update task     # використовує ComHandler із класом SBServicing, запускається як LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     дата <>2012-02-07T16:39:20</Date>     <дескриптор SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <джерела>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <автор>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <опис>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <> URI\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>  >принципалів <     <principal id="LocalSystem">       <ідентифікатор користувача>S-1-5-18</UserId>     </principal>   </Principals>  >настройок <     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <початокУвімніть,>true</StartWhenAvailable>     <>IdleSettings       <stopOnIdleEnd>true</StopOnIdleEnd>       <RestartOnIdle>false</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>   </Settings>   тригери <>     <> BootTrigger       <затримка>PT5M</Затримка>       <>повторення         <інтервал>PT12H</interval>       </> повторення     </BootTrigger>   </Triggers>   <actions Context="LocalSystem">     <> ComHandler       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <>< даних! [CDATA[SBServicing]]></Data>     </comHandler>   </Actions> </> завдань " @

    try {         if ($Computer -eq $env:COMPUTERNAME - або $Computer -eq "localhost" -or $Computer -eq ".") {             якщо ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {                 # Зберегти XML у тимчасовому файлі та імпортувати                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Encoding Юнікод -Force                                  $output = schtasks.exe /Create /TN "$TaskPath$TaskName" /XML $tempFile /F 2>&1                                  Remove-Item $tempFile -Force - ErrorAction SilentlyContinue                                  якщо ($LASTEXITCODE -eq 0) {                     $success = $true                 } інакше {                     $errorMsg = $output -join " "                 } (})             } (})         } (})         інакше {             якщо ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName","Створити заплановане завдання")) {                 $result = Invoke-Command -Ім'я комп'ютера $Computer -ScriptBlock {                     param($taskPath, $taskName, $xml)                     $tempFile = [System.IO.Path]::GetTempFileName()                     $xml | Out-File -FilePath $tempFile -Encoding Юнікод -Force                     $output = schtasks.exe /Створити /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force - ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; Вивід = $output }                 } - ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  якщо ($result. Код виходу –eq 0) {                     $success = $true                 } інакше {                     $errorMsg = $result. Вивід -join " "                 } (})             } (})         } (})     } (})     зловити {         $errorMsg = $_. Виняток.Повідомлення     }

    return @{         Success = $success         Помилка = $errorMsg     } (}) }

function Enable-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [string]$Computer = $env:ІМ'Я КОМП'ЮТЕРА     )

    $success = $false     $errorMsg = $null

    try {         if ($Computer -eq $env:COMPUTERNAME - або $Computer -eq "localhost" -or $Computer -eq ".") {             якщо ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Enable scheduled task")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 якщо ($LASTEXITCODE -eq 0) {                     $success = $true                 } інакше {                     $errorMsg = $output -join " "                 } (})             } (})         } (})         інакше {             якщо ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Enable scheduled task")) {                 $result = Invoke-Command -Ім'я комп'ютера $Computer -ScriptBlock {                     param($fullTaskName)                     $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1                     @{ ExitCode = $LASTEXITCODE; Вивід = $output }                 } - ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  якщо ($result. Код виходу –eq 0) {                     $success = $true                 } інакше {                     $errorMsg = $result. Вивід -join " "                 } (})             } (})         } (})     } (})     зловити {         $errorMsg = $_. Виняток.Повідомлення     }

    return @{         Success = $success         Помилка = $errorMsg     } (}) }

# Main execution Write-Host "" Write-Host "========================================" -Блакитний колір переднього плану Write-Host "Увімкнення завдання безпечного оновлення завантаження" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" Write-Host "Завдання: $TaskPath$Ім'я завдання" – сірий колір переднього плану Write-Host ""

# Determine target computers $targets = якщо ($ComputerName) { $ComputerName } інакше { @($env:ІМ'Я КОМП'ЮТЕРА) }

$results = @()

foreach ($computer in $targets) {     Write-Host "Check: $computer" -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -комп'ютер $computer     якщо ($status. Помилка: {         Write-Host " Помилка: $($status. Error)" -ForegroundColor Red     } (})     elseif (-not $status. Індекси завдань) {         Write-Host " Завдання не існує в цій системі" -Червоний колір переднього плану         # Створити, якщо це потрібно, або запит, якщо вказано параметр "Увімкнути"         $shouldCreate = $Create         якщо (-не $shouldCreate -і $Enable) {             Write-Host ""             Write-Host " Можливо, завдання видалено." -ForegroundColor Yellow             якщо ($Quiet) {                 Write-Host " Завдання автоматичного створення (тихий режим)" -Блакитний колір переднього плану                 $shouldCreate = $true             } інакше {                 $confirm = Read-Host " Повторно створити завдання?                    (Y/N)"                 якщо ($confirm -eq 'Y' -або $confirm -eq 'y') {                     $shouldCreate = $true                 } (})             } (})         } (})                  якщо ($shouldCreate) {             Write-Host " Створення завдання..." - Жовтий колір переднього плану             $createResult = New-SecureBootTask -Комп'ютер $computer                          якщо ($createResult.Success) {                 Write-Host " Завдання успішно створено" -ForegroundColor Green                 # Повторна перевірка стану                 $status = Get-SecureBootTaskStatus -Комп'ютер $computer                                  якщо ($status. Індекси завдань) {                     $stateColor = якщо ($status. IsEnabled) { "Зелений" } інакше { "Червоний" }                     Write-Host " Стан: $($status. TaskState)" -ForegroundColor $stateColor                 } (})             } (})             інакше {                 Write-Host " Не вдалося створити: $($createResult.Error)" -ForegroundColor Red             } (})         } (})     } (})     інакше {         $stateColor = якщо ($status. IsEnabled) { "Зелений" } інакше { "Червоний" }         Write-Host " Стан: $($status. TaskState)" -ForegroundColor $stateColor                  якщо ($status. LastRunTime – і $status. LastRunTime –ne [DateTime]::MinValue) {             Write-Host " Останній запуск: $($status. LastRunTime)" -ForegroundColor Gray         } (})         якщо ($status. NextRunTime – і $status. NextRunTime –ne [DateTime]::MinValue) {             Write-Host " Наступний запуск: $($status. NextRunTime)" -ForegroundColor Gray         }

        # Enable if requested and currently disabled         якщо ($Enable -and -not $status. IsEnabled) {             Write-Host " Увімкнення завдання..." -ForegroundColor Yellow             $enableResult = Enable-SecureBootTask -Комп'ютер $computer             якщо ($enableResult.Success) {                 Write-Host " Завдання успішно ввімкнуто" -ForegroundColor Green                 # Повторна перевірка стану                 $status = Get-SecureBootTaskStatus -Комп'ютер $computer             } (})             інакше {                 Write-Host " Не вдалося ввімкнути: $($enableResult.Error)" -ForegroundColor Red             } (})         } (})         elseif ($Enable -and $status. IsEnabled) {             Write-Host " Завдання вже ввімкнуто" -ForegroundColor Green         } (})     } (})     $results += $status     Write-Host "" }                  

# Summary Write-Host "========================================" -ForegroundColor Cyan Write-Host "Зведення" -Блакитний колір переднього плану Write-Host "========================================" -ForegroundColor Cyan

$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_. TaskExists – а –не $_. IsEnabled }). Розраховувати $notFound = ($results | Where-Object { -not $_. Індекси завдань }). Розраховувати $errors = ($results | Where-Object { $_. Помилка }). Розраховувати

Write-Host "Total Checked: $($results.Count)" Write-Host "Увімкнуто: $enabled" -ForegroundColor Green якщо ($disabled -gt 0) { Write-Host "Вимкнуто: $disabled" -ForegroundColor Red } якщо ($notFound -gt 0) { Write-Host "Не знайдено: $notFound" -ForegroundColor Yellow } якщо ($errors -gt 0) { Write-Host "Помилки: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.