Copiez et collez cet exemple de script et modifiez-le si nécessaire pour votre environnement :

<# . SYNOPSIS     Active la tâche planifiée de mise à jour de démarrage sécurisé.

.DESCRIPTION     Ce script garantit la tâche planifiée de mise à jour de démarrage sécurisé Windows     (\Microsoft\Windows\PI\Secure-Boot-Update) est activé. Si cette option est désactivée,     il l’active. Si la tâche a été supprimée, elle peut la recréer.

.PARAMETER Action     Action à effectuer. Valeurs valides : case activée, activer, créer     - case activée : uniquement case activée la tâche status     - enable : (par défaut) Activer la tâche si désactivée. Si la tâche est manquante, invite à créer.- create : créer la tâche si elle n’existe pas

.PARAMETER ComputerName     Optionnel. Tableau de noms d’ordinateurs à case activée/activer la tâche.S’il n’est pas spécifié, s’exécute sur l’ordinateur local.

.PARAMETER Credential     Optionnel. Informations d’identification pour l’accès aux ordinateurs distants.

.PARAMETER Quiet     Supprime les invites et répond automatiquement à Oui. Utile pour l’automatisation.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Active la tâche status sur l’ordinateur local

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 activer     # Active la tâche si elle est désactivée. Requêtes à créer s’il est manquant.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 create     # Crée la tâche si elle a été supprimée, puis vérifie son status

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 case activée -ComputerName « PC1 », « PC2 »     # Vérifie la tâche sur les ordinateurs distants

.NOTES     Nécessite des privilèges d’administrateur pour activer ou créer la tâche.Chemin de la tâche : \Microsoft\Windows\PI\Secure-Boot-Update     La tâche s’exécute taskhostw.exe toutes les 12 heures avec des privilèges élevés.#>

[CmdletBinding(SupportsShouldProcess)] param(     [Paramètre(Position=0)]     [ValidateSet('case activée', '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" # Remarque : ce script s’exécute sur des points de terminaison pour activer la tâche de mise à jour du démarrage sécurisé.

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

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

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

    try {         if ($Computer -eq $env :COMPUTERNAME -or $Computer -eq « localhost » -or $Computer -eq « . ») {             # Utiliser schtasks.exe pour une détection de tâche plus fiable             $schtasksOutput = schtasks.exe /Query /TN « $TaskPath$TaskName » /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # La tâche introuvable n’est pas une erreur. Signifie simplement que la tâche n’existe pas                 $result. TaskExists = $false                 $result de retour             }                          # Analyser la sortie CSV             $taskData = $schtasksOutput | ConvertFrom-CSV             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')                                  # Essayer d’obtenir l’heure de la prochaine exécution à partir des données                 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 {             # Ordinateur distant : utiliser Invoke-Command avec schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Sortie = $output                 }             } -ArgumentList « $TaskPath$TaskName » -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # La tâche introuvable n’est pas une erreur. Signifie simplement que la tâche n’existe pas                 $result. TaskExists = $false                 retour $result             }

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

    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     # Utilise ComHandler avec la classe SBServicing, s’exécute en tant que LocalSystem     $taskXml = @" < ?xml version="1.0 » encoding="UTF-16 » ?> <Task version="1.6 » xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <>RegistrationInfo     <Date>2012-02-07T16:39:20</Date>     <SecurityDescriptor>O :BAG :BAD :P(A ;; FA;;; BA)(A ;; FA;;; SY)(A ;; FRFX ;;; LS)</SecurityDescriptor>     <source>'$(@ %SystemRoot %\system32\TpmTasks.dll,-601)</Source>     <Author>'$(@ %SystemRoot %\system32\TpmTasks.dll,-600)</Author>     <Description>'$(@ %SystemRoot %\system32\TpmTasks.dll,-604)</Description>     URI <>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   <>/RegistrationInfo  >principaux de <     <Principal id="LocalSystem">       <UserId>S-1-5-18</UserId>     <>/Principal   <>/Principals   <Paramètres>     <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>  >déclencheurs <    >BootTrigger <       <retard><PT5M /Delay>       <répétition>         <Interval>PT12H</Interval>       </Répétition>     <>/BootTrigger   <>/Triggers   <Actions Context="LocalSystem">     <> ComHandler       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <>< de données ! [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 »)) {                 # Enregistrer du code XML dans un fichier temporaire et importer                 $tempFile = [System.IO.Path] ::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Encodage 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 -Encodage Unicode -Force                     $output = schtasks.exe /Create /TN « $taskPath$taskName » /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE ; Sortie = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Sortie -join " " »                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Réussite = $success         Erreur = $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                 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 ; Sortie = $output }                 } -ArgumentList « $TaskPath$TaskName » -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Sortie -join " " »                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Réussite = $success         Erreur = $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 « Vérification : $computer » -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -$computer ordinateur     si ($status. Erreur) {         Write-Host " Erreur : $($status. Erreur)" -ForegroundColor Red     }     elseif (-pas $status. TaskExists) {         Write-Host « La tâche n’existe pas sur ce système » -ForegroundColor Red         # Créer si demandé, ou demander si Activer a été spécifié         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host «  »             Write-Host « La tâche a peut-être été supprimée ». -ForegroundColor Yellow             if ($Quiet) {                 Write-Host « Tâche de création automatique (mode silencieux) » -ForegroundColor Cyan                 $shouldCreate = $true             } else {                 $confirm = Read-Host « Voulez-vous recréer la tâche ?                    (Y/N)"                 if ($confirm -eq 'Y' -or $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }         if ($shouldCreate) {             Write-Host « Création d’une tâche... » -ForegroundColor Yellow             $createResult = New-SecureBootTask -$computer de l’ordinateur             if ($createResult.Success) {                 Write-Host « Tâche créée avec succès » -ForegroundColor Vert                 # Re-case activée status                 $status = Get-SecureBootTaskStatus -$computer ordinateur                 si ($status. TaskExists) {                     $stateColor = if ($status. IsEnabled) { « Green » } else { « Red » }                     Write-Host " État : $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host « Échec de la création : $($createResult.Error) » -ForegroundColor Rouge             }         }     }     else {         $stateColor = if ($status. IsEnabled) { « Green » } else { « Red » }         Write-Host " État : $($status. TaskState)" -ForegroundColor $stateColor         si ($status. LastRunTime -et $status. LastRunTime -ne [DateTime] ::MinValue) {             Write-Host " Dernière exécution : $($status. LastRunTime)" -ForegroundColor Gray         }         si ($status. NextRunTime -et $status. NextRunTime -ne [DateTime] ::MinValue) {             Write-Host " Prochaine exécution : $($status. NextRunTime)" -ForegroundColor Gray         }                                                

        # Enable if requested and currently disabled         si ($Enable -et -pas $status. IsEnabled) {             Write-Host « Activation de la tâche... » -ForegroundColor Yellow             $enableResult = Enable-SecureBootTask -$computer ordinateur             if ($enableResult.Success) {                 Write-Host « Tâche activée avec succès » -ForegroundColor Vert                 # Re-case activée status                 $status = Get-SecureBootTaskStatus -$computer ordinateur             }             else {                 Write-Host « Échec de l’activation : $($enableResult.Error) » -ForegroundColor Rouge             }         }         elseif ($Enable -et $status. IsEnabled) {             Write-Host « La tâche est déjà activée » -ForegroundColor Vert         }     }     $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 }). Compter $notFound = ($results | Where-Object { -not $_. TaskExists }). Compter $errors = ($results | Where-Object { $_. Erreur }). Compter

Write-Host "Total Checked: $($results.Count)" Write-Host « Activé : $enabled » -ForegroundColor Vert 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  

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.