Copie e cole este script de exemplo e modifique conforme necessário para o seu ambiente:

<# . SYNOPSIS     Ativa a tarefa agendada atualização de arranque seguro.

.DESCRIPTION     Este script garante a tarefa agendada da Atualização de Arranque Seguro do Windows     O (\Microsoft\Windows\PI\Secure-Boot-Update) está ativado. Se estiver desativado,     permite-lhe. Se a tarefa tiver sido eliminada, pode recriá-la.

.PARAMETER Action     A ação a executar. Valores válidos: verificar, ativar, criar     - verificar: Verificar apenas o estado da tarefa     - ativar: (predefinição) Ative a tarefa se estiver desativada. Se a tarefa estiver em falta, é pedido para criar.- criar: criar a tarefa se não existir

.PARAMETER ComputerName     Opcional. Matriz de nomes de computador para verificar/ativar a tarefa.Se não for especificado, é executado no computador local.

.PARAMETER Credential     Opcional. Credenciais para acesso remoto ao computador.

.PARAMETER Quiet     Suprime pedidos e responde automaticamente sim. Útil para automatização.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Ativa o estado da tarefa no computador local

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 ativar     # Ativa a tarefa se estiver desativada. Pedidos criar se estiver em falta.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 criar     # Cria a tarefa se tiver sido eliminada e, em seguida, verifica o respetivo estado

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"     # Verifica a tarefa em computadores remotos

.NOTES     Requer privilégios de administrador para ativar ou criar a tarefa.Caminho da Tarefa: \Microsoft\Windows\PI\Secure-Boot-Update     A tarefa é executada taskhostw.exe a cada 12 horas com privilégios elevados.#>

[CmdletBinding(SupportsShouldProcess)] parâmetro(     [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" Nota: este script é executado em pontos finais para ativar a tarefa Atualização de Arranque Seguro.

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

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

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

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # Utilize schtasks.exe para deteção de tarefas mais fiável             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # A tarefa não encontrada não é um erro – significa apenas que a tarefa não existe                 $result. TaskExists = $false                 devolver $result             }                          # Analisar a saída CSV             $taskData = $schtasksOutput | ConverterFrom-Csv             se ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')                                  # Tente obter a hora de execução seguinte a partir dos dados                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     experimente {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } captura { }                 }             }         }         else {             # Computador remoto - utilize Invoke-Command com schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 parâmetro($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Saída = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # A tarefa não encontrada não é um erro – significa apenas que a tarefa não existe                 $result. TaskExists = $false                 devolver $result             }

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

    return $result }

function New-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     parâmetro(         [string]$Computer = $env:COMPUTERNAME     )

    $success = $false     $errorMsg = $null

    # Task definition - matches the original Windows Secure Boot Update task     # Utiliza o ComHandler com a classe SBServicing, é executado como LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Versão da tarefa="1,6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     <Data>2012-02-07T16:39:20</Data>     <SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <>de Origem '$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <Author>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <Descrição>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>  > <Principais     <Principal id="LocalSystem">       <UserId>S-1-5-18</UserId>     </Principal>   </Principais>  >de Definições de <     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>falso</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>pt1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <IniciarQuando Disponível>verdadeiro</StartWhenAvailable>     <IdleSettings>       <StopOnIdleEnd>verdadeiro</StopOnIdleEnd>       <RestartOnIdle>falso</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>verdadeiro</UseUnifiedSchedulingEngine>   </Definições>  >de Acionadores <     <bootTrigger>       <Atraso><PT5M /Atraso>      >repetição de <         Intervalo de <><PT12H /Intervalo>       </Repetição>     </BootTrigger>   </Acionadores>   <Actions Context="LocalSystem">     <comHandler>       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <data><! [CDATA[SBServicing]]></Data>     </ComHandler>   </Actions> </>de Tarefas " @

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {                 # Guarde XML no ficheiro temporário e importe                 $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                 } senão {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Criar tarefa agendada")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     parâmetro($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; Saída = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } senão {                     $errorMsg = $result. Saída -join " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Êxito = $success         Erro = $errorMsg     } }

function Enable-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     parâmetro(         [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", "Ativar tarefa agendada")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 if ($LASTEXITCODE -eq 0) {                     $success = $true                 } senão {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Ativar tarefa agendada")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     parâmetro($fullTaskName)                     $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1                     @{ ExitCode = $LASTEXITCODE; Saída = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } senão {                     $errorMsg = $result. Saída -join " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Êxito = $success         Erro = $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 = se ($ComputerName) { $ComputerName } senão { @($env:COMPUTERNAME) }

$results = @()

foreach ($computer in $targets) {     Write-Host "Checking: $computer" -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -$computer do computador     if ($status. Erro) {         Write-Host " Erro: $($status. Erro)" -ForegroundColor Vermelho     }     elseif (-não $status. TaskExists) {         Write-Host " A tarefa não existe neste sistema" -ForegroundColor Vermelho         # Criar, se solicitado, ou perguntar se a opção Ativar foi especificada         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host " A tarefa pode ter sido eliminada." -Primeiro PlanoColor Amarelo             se ($Quiet) {                 Write-Host " Tarefa de criação automática (modo silencioso)" -ForegroundColor Cyan                 $shouldCreate = $true             } senão {                 $confirm = Read-Host " Pretende recriar a tarefa?                    (Y/N)"                 if ($confirm -eq 'Y' -or $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  se ($shouldCreate) {             Write-Host " Creating task..." -ForegroundColor Yellow             $createResult = New-SecureBootTask -$computer              do computador             if ($createResult.Success) {                 Write-Host " Tarefa criada com êxito" - Primeiro PlanoColor Verde                 # Verificar novamente o estado                 $status = Get-SecureBootTaskStatus -Computer $computer                                  if ($status. TaskExists) {                     $stateColor = se ($status. IsEnabled) { "Verde" } senão { "Vermelho" }                     Write-Host " Estado: $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host " Falha ao criar: $($createResult.Error)" -ForegroundColor Vermelho             }         }     }     else {         $stateColor = se ($status. IsEnabled) { "Verde" } senão { "Vermelho" }         Write-Host " Estado: $($status. TaskState)" -ForegroundColor $stateColor                  if ($status. LastRunTime - e $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Última Execução: $($status. LastRunTime)" -ForegroundColor Gray         }         if ($status. NextRunTime - e $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Próxima Execução: $($status. NextRunTime)" -ForegroundColor Gray         }

        # Enable if requested and currently disabled         if ($Enable -and -not $status. IsEnabled) {             Write-Host " Ativar tarefa..." -Primeiro PlanoColor Amarelo             $enableResult = Enable-SecureBootTask -$computer de computador             if ($enableResult.Success) {                 Write-Host " Tarefa ativada com êxito" - Primeiro PlanoColor Verde                 # Verificar novamente o estado                 $status = Get-SecureBootTaskStatus -$computer de computador             }             else {                 Write-Host " Falha ao ativar: $($enableResult.Error)" -ForegroundColor Vermelho             }         }         elseif ($Enable - e $status. IsEnabled) {             Write-Host " A tarefa já está ativada" -ForegroundColor Verde         }     }     $results += $status     Write-Host "" }                  

# Summary Write-Host "========================================" -ForegroundColor Cyan Write-Host " Resumo" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan

$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_. TaskExists - e - não $_. IsEnabled }). Contagem $notFound = ($results | Where-Object { -not $_. TaskExists }). Contagem $errors = ($results | Where-Object { $_. Erro }). Contagem

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  

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.