Copiați și lipiți acest script eșantion și modificați după cum este necesar pentru mediul dvs.:

<# . SINOPSIS     Activează activitatea programată Secure Boot Update.

.DESCRIPTION     Acest script asigură activitatea programată Windows Secure Boot Update     (\Microsoft\Windows\PI\Secure-Boot-Update) este activat. Dacă este dezactivat,     acesta o activează. Dacă activitatea a fost ștearsă, aceasta o poate crea din nou.

.PARAMETER Action     Acțiunea de efectuat. Valori valide: verificare, activare, creare     - verificare: Verificați doar starea activității     - activare: (implicit) Activați activitatea dacă este dezactivată. Dacă activitatea lipsește, vă solicită să o creați.- creare: Creați activitatea dacă nu există

.PARAMETER ComputerName     Opţional. Matrice de nume de computere pe care să verificați/activați activitatea.Dacă nu se specifică, rulează pe computerul local.

.PARAMETER Credential     Opţional. Acreditări pentru acces la computer la distanță.

.PARAMETER Quiet     Elimină solicitările și răspunde automat Da. Util pentru automatizare.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Activează starea activității pe computerul local

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 activat     # Activează activitatea dacă este dezactivată. Solicitări de creat dacă lipsește.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 crea     # Creează activitatea dacă a fost ștearsă, apoi îi verifică starea

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 bifați -NumeComputer "PC1", "PC2"     # Verifică activitatea pe mașini la distanță

.NOTES     Necesită privilegii de administrator pentru a activa sau a crea activitatea.Cale activitate: \Microsoft\Windows\PI\Secure-Boot-Update     Activitatea rulează taskhostw.exe la fiecare 12 ore, cu privilegii sporite.#>

[CmdletBinding(SupportsShouldProcess)] param(     [Parametru(Poziție=0)]     [ValidateSet('check', 'enable', 'create', '')]     [string]$Action = 'enable',

    [Parameter()]     [șir[]]$ComputerName,

    [Parameter()]     [PSCredential]$Credential,

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

# Convert Action to switches for backward compatibility $Enable = $Action -eq "enable" $Create = $Action -eq "creare"

# Download URL: https://aka.ms/getsecureboot -> "Deployment and Monitoring Samples" # Notă: Acest script rulează pe punctele finale pentru a activa activitatea Secure Boot Update.

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

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

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

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # Utilizați schtasks.exe pentru o detectare mai fiabilă a activităților             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          dacă ($LASTEXITCODE -ne 0) {                 # Activitatea negăsită nu este o eroare - înseamnă doar că activitatea nu există                 $result. TaskExists = $false                 $result de returnare             }                          # Analizați ieșirea CSV             $taskData = $schtasksOutput | ConvertFrom-Csv             dacă ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -sau $taskData.Status -eq 'Running')                                  # Încercați să obțineți timpul de rulare următor din date                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     încercați {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Ora următoarei rulări')                     } captură { }                 }             }         }         altfel, {             # Computer la distanță - utilizarea Invoke-Command cu schtasks             $remoteResult = Invoke-Command -NumeComputer $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Ieșire = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # Activitatea negăsită nu este o eroare - înseamnă doar că activitatea nu există                 $result. TaskExists = $false                 $result de returnare             }

            $taskData = $remoteResult.Output | ConvertFrom-Csv             dacă ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -sau $taskData.Status -eq 'Running')             }         }     }     captură {         $result. Eroare = $_. Excepție.mesaj     }

    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     # Utilizează ComHandler cu clasa SBServicing, rulează ca LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Versiune activitate="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  >InformațiiÎnregistrare <     <data>2012-02-07T16:39:20</Data>     <SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <>sursă '$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <autor>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     descrierea <>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     uri <>\Microsoft\Windows\PI\Secure-Boot-Update</URI>  ></RegistrationInfo  > directori <     <id principal="LocalSystem">       <UserId>S-1-5-18</UserId>     </principal>   </Principals>  > setări <     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries><fals /StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8>MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <StartAtunci când>adevărat</StartAtunci când>    >IdleSettings <       <StopOnIdleEnd>true</StopOnIdleEnd>       <RestartOnIdle><fals /RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>  ></Setări  >Triggere <    >BootTrigger <       <întârziere>PT5M</întârziere>       <> repetiție         Interval <>PT12H</Interval>      ></Repetiție    ></BootTrigger  ></Triggere   <Actions Context="LocalSystem">     <> ComHandler       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>      >< de date <! [CDATA[SBServicing]]></Data>     </ComHandler>  ></Acțiuni </>de activitate " @

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {                 # Salvare XML în fișier temporar și import                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Codificare Unicode -Force                                  $output = schtasks.exe /Create /TN "$TaskPath$TaskName" /XML $tempFile /F 2>&1                                  Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                                  dacă ($LASTEXITCODE -eq 0) {                     $success = $true                 } altfel, {                     $errorMsg = $output -join " "                 }             }         }         altfel, {             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 -Codificare Unicode -Force                     $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; Ieșire = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  dacă ($result. ExitCode -eq 0) {                     $success = $true                 } altfel, {                     $errorMsg = $result. Ieșire -unire " " "                 }             }         }     }     captură {         $errorMsg = $_. Excepție.mesaj     }

    return @{         Succes = $success         Eroare = $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", "Enable scheduled task")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 dacă ($LASTEXITCODE -eq 0) {                     $success = $true                 } altfel, {                     $errorMsg = $output -join " "                 }             }         }         altfel, {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Enable scheduled task")) {                 $result = Invoke-Command -NumeComputer $Computer -ScriptBlock {                     param($fullTaskName)                     $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1                     @{ ExitCode = $LASTEXITCODE; Ieșire = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  dacă ($result. ExitCode -eq 0) {                     $success = $true                 } altfel, {                     $errorMsg = $result. Ieșire -unire " " "                 }             }         }     }     captură {         $errorMsg = $_. Excepție.mesaj     }

    return @{         Succes = $success         Eroare = $errorMsg     } }

# Main execution Write-Host "" Write-Host "========================================" -Prim-planColor Cyan Write-Host "Secure Boot Update Task Enabler" -ForegroundColor Cyan Write-Host "========================================" -Prim-planColor Cyan Write-Host "" Write-Host "Activitate: $TaskPath$NumeA activități" -Culoare prim plan gri Write-Host ""

# Determine target computers $targets = dacă ($ComputerName) { $ComputerName } altceva { @($env:COMPUTERNAME) }

$results = @()

foreach ($computer in $targets) {     Write-Host "Verificare: $computer" -Culoare prim plan galben     $status = Get-SecureBootTaskStatus - $computer computerului     dacă ($status. Eroare) {         Write-Host " Eroare: $($status. Eroare)" -Prim-planColor roșu     }     elseif (-nu $status. TaskExists) {         Write-Host " Activitatea nu există în acest sistem" -Prim planColor Roșu         # Creați dacă este solicitat sau solicitați dacă s-a specificat Activare         $shouldCreate = $Create         dacă (-nu $shouldCreate -și $Enable) {             Write-Host ""             Write-Host " Este posibil ca activitatea să fi fost ștearsă". -Culoare prim plan galbenă             dacă ($Quiet) {                 Write-Host " Activitate de creare automată (mod silențios)" -Prim-planColor Cyan                 $shouldCreate = $true             } altfel, {                 $confirm = Read-Host " Creați din nou activitatea?                    (Y/N)"                 dacă ($confirm -eq 'Y' sau $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  dacă ($shouldCreate) {             Write-Host "Se creează activitatea..." -Prim-planColor galben             $createResult = New-SecureBootTask - $computer              computerului             dacă ($createResult.Success) {                 Write-Host " Activitate creată cu succes" -Prim-planColor verde                 # Verificați din nou starea                 $status = Get-SecureBootTaskStatus -Computer $computer                                  dacă ($status. TaskExists) {                     $stateColor = dacă ($status. IsEnabled) { "Verde" } altceva { "Roșu" }                     Write-Host " Stat: $($status. TaskState)" -Prim planColor $stateColor                 }             }             altfel, {                 Write-Host " Nu s-a reușit crearea: $($createResult.Error)" -Prim-planColor roșu             }         }     }     altfel, {         $stateColor = dacă ($status. IsEnabled) { "Verde" } altceva { "Roșu" }         Write-Host " Stat: $($status. TaskState)" -Prim planColor $stateColor                  dacă ($status. LastRunTime -și $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Ultima rulare: $($status. LastRunTime)" -Prim-planColor gri         }         dacă ($status. NextRunTime -și $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Următoarea rulare: $($status. NextRunTime)" -Prim-planColor gri         }

        # Enable if requested and currently disabled         dacă ($Enable -și -nu $status. IsEnabled) {             Write-Host "Se activează activitatea..." -Prim-planColor galben             $enableResult = Enable-SecureBootTask - $computer computerului             dacă ($enableResult.Success) {                 Write-Host "Activitatea s-a activat cu succes" -Prim-planColor Verde                 # Verificați din nou starea                 $status = Get-SecureBootTaskStatus -Computer $computer             }             altfel, {                 Write-Host " Nu s-a reușit activarea: $($enableResult.Error)" -Prim-planColor roșu             }         }         elseif ($Enable și $status. IsEnabled) {             Write-Host " Activitatea este deja activată" -Prim-planColor Verde         }     }     $results += $status     Write-Host "" }                  

# Summary Write-Host "========================================" -Prim-planColor Cyan Write-Host "Rezumat" -Prim planColor Cyan Write-Host "========================================" -Prim-planColor Cyan

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

Write-Host "Total Checked: $($results.Count)" Write-Host "Activat: $enabled" - Verde prim plan if ($disabled -gt 0) { Write-Host "Disabled: $disabled" -ForegroundColor Red } dacă ($notFound -gt 0) { Write-Host "Negăsit: $notFound" -Prim planColor Galben } if ($errors -gt 0) { Write-Host "Errors: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.