Avez-vous besoin de créer de nombreuses tâches planifiées ou d’automatiser la création de tâches planifiées? Si c’est le cas, vous avez de la chance. Dans cet article, vous allez apprendre à gérer les tâches planifiées à l’aide de PowerShell.
Les tâches planifiées qui effectuent des actions simples sont rapides à réaliser et suffisamment confortables pour être répétées à l’aide de l’interface graphique de l’application du planificateur de tâches. Cependant, les administrateurs système ou les développeurs peuvent avoir besoin de déployer des tâches plus compliquées avec plusieurs plannings, déclencheurs ou arguments.
Heureusement, vous pouvez utiliser PowerShell pour créer et gérer des tâches planifiées. La gestion des tâches planifiées avec PowerShell est rendue possible grâce à l’utilisation du module ScheduledTasks intégré à Windows.
Table des matières
Prérequis
Comme il s’agit d’un article de type apprentissage par la pratique, il existe des prérequis pour que vous puissiez suivre. Vous trouverez ci-dessous les exigences pour créer des tâches planifiées PowerShell à l’aide de PowerShell.
- Les exemples de cet article utilisent Windows 10. Mais Windows Server 2012 et plus récent peuvent faire de même.
- Windows PowerShell 5.1 ou PowerShell 7.
- Cela vous aiderait si vous aviez un éditeur de script tel que Visual Studio Code, Notepad++ ou Windows PowerShell I.
Créer une nouvelle tâche planifiée
Une tâche planifiée nécessite au moins deux composants pour fonctionner ; action et déclencheur. L’ajout d’un contexte de sécurité et d’un ensemble de paramètres associés est facultatif. Pour une meilleure compréhension, reportez–vous à la brève explication de chaque composant de tâche planifiée ci-dessous :
- Action – l’action exécutée par la tâche planifiée. Une action consiste généralement à exécuter un programme ou un script. Une tâche planifiée peut comporter plusieurs actions.
- Trigger – contrôle l’exécution de la tâche planifiée. Les déclencheurs peuvent être basés sur le temps, comme la définition d’un calendrier de récurrence quotidienne ou horaire. Les déclencheurs peuvent également être basés sur des activités, qui exécutent une tâche en fonction d’activités détectées telles que le démarrage de l’ordinateur, la connexion d’un utilisateur ou des événements enregistrés.
- Principal – contrôle le contexte de sécurité utilisé pour exécuter la tâche planifiée. Entre autres choses, un principal comprend le compte d’utilisateur et le privilège requis utilisé par la tâche planifiée.
- Settings – est un ensemble d’options et de conditions qui contrôle le comportement de la tâche planifiée. Par exemple, vous pouvez personnaliser une tâche pour qu’elle soit supprimée après un nombre de jours consécutifs pendant lesquels la tâche n’est pas utilisée.
Lors d’une création de tâche planifiée, le principal et les paramètres ne sont pas explicitement requis. Les valeurs par défaut sont utilisées à la place.
Création d’une action de tâche
Lorsque vous souhaitez qu’une tâche planifiée fasse quelque chose, créez une nouvelle action de tâche. Dans cet exemple, vous allez créer une tâche qui appellera le PowerShell.exe et exécutez un script. Assurez-vous d’avoir votre éditeur de script prêt.
Notez que le script ci-dessous n’est qu’un exemple aléatoire et que vous n’êtes pas obligé de l’utiliser. Vous pouvez utiliser n’importe quel script que vous voulez. Cependant, l’utilisation du script ci-dessous crée un résultat facilement vérifiable qui peut confirmer si la tâche planifiée a fonctionné.
L’exemple de script ci-dessous, lorsqu’il est exécuté, obtient les dix derniers événements du journal des événements de l’application. Ensuite, exportez les événements vers un nouveau fichier XML dans le c:\temp dossier. Copiez le code ci-dessous, collez-le dans votre éditeur de script et enregistrez-le sous le nom de fichier Get-LatestAppLog.ps1 dans le dossier de votre choix.
Le code ci-dessous utilise le New-ScheduledTaskAction
pour créer un nouvel objet d’action de tâche planifiée stocké dans la variable $taskAction
. Cette action appellera l’exécutable powershell.exe
et transmettra l’argument pour exécuter le C:\scripts\Get-LatestAppLog.ps1 .
Copiez la commande ci-dessus et exécutez-la dans PowerShell. L’objet résultant de la variable $taskAction
devrait ressembler à la capture d’écran ci-dessous.
Ajout d’un déclencheur
Maintenant que vous avez créé une action de tâche, l’étape suivante consiste à est de définir quand la tâche doit s’exécuter. L’applet de commande à utiliser pour créer un déclencheur est l’applet de commande New-ScheduledTaskTrigger
. La commande ci-dessous crée un déclencheur pour s’exécuter tous les jours à 15 heures. Copiez et exécutez le code dans PowerShell.
# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger
L’objet résultant de la variable $tasktrigger
doit ressembler à l’image ci-dessous.
Enregistrement de la Tâche
Jusqu’à présent, vous avez créé les exigences de base pour créer une nouvelle tâche planifiée. L’étape suivante consiste à créer la tâche planifiée et à l’enregistrer dans le système.
Le code ci-dessous utilise l’applet de commande Register-ScheduledTask
pour enregistrer la tâche planifiée. Le paramètre -Action
est nécessaire pour passer l’objet d’action de tâche stocké dans la variable nommée $taskAction
. Le paramètre -Trigger
est nécessaire pour passer le contenu de la variable $taskTrigger
.
# Register the new PowerShell scheduled task# The name of your scheduled task.$taskName = "ExportAppLog"# Describe the scheduled task.$description = "Export the 10 newest events in the application log"# Register the scheduled taskRegister-ScheduledTask ` -TaskName $taskName ` -Action $taskAction ` -Trigger $taskTrigger ` -Description $description
Copiez le code ci-dessus et exécutez-le dans PowerShell. En conséquence, la nouvelle tâche planifiée est enregistrée, comme indiqué ci-dessous.
Exécution de la tâche
Après avoir créé une tâche planifiée, vous devez confirmer que la tâche planifiée la tâche existe maintenant dans le système. Ouvrez le planificateur de tâches et recherchez la tâche planifiée dans la liste. Vous devriez voir la tâche enregistrée sur la liste.
Vous pouvez également confirmer l’existence de la tâche planifiée enregistrée en exécutant la commande PowerShell ci-dessous .
Get-ScheduledTaskInfo -TaskName ExportAppLog
Vous devriez alors voir une sortie similaire, comme la capture d’écran du résultat ci-dessous.
Et enfin, votre nouvelle tâche planifiée devrait fonctionner pour déterminer si ce que vous avez fait jusqu’à présent a réussi. Pour tester la tâche planifiée, vous pouvez attendre la prochaine planification d’exécution ou utiliser la commande ci-dessous pour déclencher manuellement.
Start-ScheduledTask -TaskName ExportAppLog
Après avoir exécuté le code, vous devriez voir un résultat similaire à celui illustré ci-dessous. Comme vous pouvez le voir, l’exécution du code a créé un fichier XML, qui indique que la tâche planifiée a fonctionné comme prévu.
Mise à jour d’une Tâche planifiée existante
Après avoir créé une tâche planifiée, certains aspects de celle-ci peuvent nécessiter une mise à jour à un moment donné. Peut-être voulez-vous le faire fonctionner une heure plus tôt ou changer l’emplacement du fichier de script. Ce sont quelques-unes des modifications apportées à la tâche planifiée qui peuvent être nécessaires.
Dans les sections suivantes, vous apprendrez à apporter des modifications aux tâches planifiées enregistrées existantes à l’aide de PowerShell.
Modification du Compte d’utilisateur, des Options de sécurité et des Paramètres de compatibilité
Dans la section précédente, la tâche planifiée s’exécute dans le même contexte de compte d’utilisateur qui l’a créée. Que se passe-t-il si la tâche doit s’exécuter à l’aide d’un autre compte d’utilisateur, comme un compte de service, par exemple.
Dans cet exemple, vous modifierez les options de sécurité de la tâche planifiée selon les paramètres ci-dessous.
- Vous devez modifier le compte d’utilisateur pour exécuter la tâche planifiée.
- Permet à la tâche de s’exécuter, que l’utilisateur se soit connecté ou non.
- Exécutez le avec les plus hauts niveaux de privilèges.
- Définissez la compatibilité de la tâche avec Windows 10.
La première ligne du code ci-dessous créera un objet principal avec le nouveau compte d’utilisateur et définira la tâche pour qu’elle s’exécute avec les privilèges les plus élevés. Assurez-vous de modifier la valeur du paramètre -UserID
si nécessaire. La deuxième ligne configure la compatibilité de la tâche avec Windows 10.
Enfin, la troisième ligne met à jour la tâche planifiée ExportAppLog
** en utilisant les valeurs stockées dans les variables the $taskPrincipal
et $taskSettings
. Copiez le code ci-dessous et exécutez-le dans PowerShell.
# Set the task principal's user ID and run level.$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'DEVPC\svcTask' -RunLevel Highest# Set the task compatibility value to Windows 10.$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8# Update the task principal settingsSet-ScheduledTask -TaskName 'ExportAppLog' -Principal $taskPrincipal -Settings $taskSettings
Vous remarquerez que la valeur du paramètre
-Compatibility
estWin8
. Ne soyez pas confus. Il semble que Microsoft n’ait pas mis à jour la sélection de la « dernière” version depuis Windows 8. Néanmoins, la spécification de la valeurWin8
entraînera la compatibilité de Windows 10.
Ensuite, la commande ci-dessous utilise l’applet de commande Set-ScheduledTask
pour mettre à jour la tâche planifiée ExportAppLog
** existante. Assurez-vous de modifier la valeur du mot de passe dans le paramètre -Password
pour utiliser le mot de passe correct du compte utilisateur.
# Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'
Après avoir exécuté la commande ci-dessus, la tâche planifiée est mise à jour. Si vous vérifiez la tâche planifiée, vous pouvez confirmer que les options de sécurité ont changé.
Modification du déclencheur
Parfois, le calendrier de déclenchement doit être modifié. changé. Peut-être à cause de certains ajustements opérationnels ou de l’optimisation des ressources. Dans tous les cas, vous pouvez également utiliser PowerShell pour remplacer ou ajouter des déclencheurs à une tâche planifiée.
Actuellement, la tâche planifiée ExportAppLog est déclenchée tous les jours à 15 heures. Supposons que vous deviez modifier l’horaire de déclenchement tous les jours à 16h30 et 1h00. Vous devez d’abord créer deux nouveaux objets de déclenchement de tâche pour les deux plannings.
$taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM
Ensuite, pour mettre à jour le déclencheur de la tâche planifiée, utilisez la commande ci-dessous. Vous remarquerez que le paramètre -Trigger
accepte les deux objets de déclenchement de tâche, à savoir $taskTrigger1
et $taskTrigger2
.
De plus, comme vous mettez à jour une tâche planifiée avec un mot de passe enregistré pour le compte utilisateur, vous devrez à nouveau fournir les valeurs -User
et -Password
.
Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'
Ci-dessous se trouve le résultat attendu après l’exécution du code.
Et comme vous pouvez le voir ci-dessous, il y a maintenant deux déclencheurs dans la tâche planifiée ExportAppLog.
La Suppression et la restauration d’une Tâche planifiée
Les Tâches planifiées peuvent devenir obsolètes avec le temps. À un moment donné, vous devrez peut-être effectuer le ménage pour les tâches planifiées. Dans cette section, vous apprendrez à gérer la suppression de tâches planifiées dans PowerShell.
Sauvegarde d’une tâche planifiée
Avant de continuer à supprimer des tâches planifiées, il est recommandé de faire d’abord une sauvegarde. La sauvegarde des tâches planifiées vous donne un point de restauration lorsque les choses tournent mal.
Il n’y a pas d’applet de commande intégrée pour effectuer une sauvegarde de tâche planifiée. Mais, tout dans PowerShell est un objet et l’exportation d’objets vers un fichier est possible. Lorsque vous devez sauvegarder un objet dans un fichier, utilisez l’applet de commande Import-Clixml
.
L’exemple de code ci-dessous exporte la tâche planifiée avec le nom ExportAppLog dans un fichier. Vous pouvez modifier le nom de fichier et l’emplacement selon vos préférences.
L’image ci-dessous affiche le fichier XML de sortie attendu.
Suppression d’une Tâche planifiée
Une fois que vous avez sécurisé une sauvegarde de la tâche planifiée, vous pouvez maintenant supprimer cette tâche planifiée. Le code ci-dessous supprime la tâche planifiée avec le nom ExportAppLog. Copiez le code ci-dessous et exécutez-le dans PowerShell.
# Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false
Bien que non requis, il est toujours bon de confirmer le résultat de la suppression de la tâche planifiée. Utilisez la commande ci-dessous pour vérifier que la tâche planifiée n’existe plus.
Get-ScheduledTask -TaskName 'ExportAppLog'
Si la tâche planifiée n’existe plus, vous devriez obtenir une sortie comme celle indiquée ci-dessous.
Notez que la sauvegarde de tâche planifiée n’inclut pas les mots de passe.
Restauration d’une tâche planifiée
Vous avez donc supprimé la tâche planifiée, puis il s’avère que vous n’étiez pas censé le faire! Et maintenant ? Ce genre de situation vous fait apprécier encore plus le concept de sauvegardes.
Vous pouvez recréer la tâche planifiée à l’aide du fichier de sauvegarde XML avec PowerShell. Et voici comment vous pouvez faire la restauration.
Tout d’abord, importez la sauvegarde XML dans votre session PowerShell. Le code ci-dessous importe le fichier c:\temp\ExportAppLog .XML. En conséquence, la variable $stBackup
contiendra les données importées.
# Import the Schedule Task backup$stBackup = Import-Clixml -Path c:\temp\ExportAppLog.xml
Ensuite, utilisez le code ci-dessous pour réinitialiser la valeur LogOnType
du principal de la tâche sur Interactive
. La réinitialisation de la valeur LogonType est essentielle pour garantir une restauration réussie des tâches planifiées.
# Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'
L’étape suivante consiste à créer un nouvel objet de tâche planifiée. Le code ci-dessous crée une nouvelle tâche planifiée. La variable $restoreTask
stocke l’objet de tâche planifiée résultant.
Vous remarquerez que les valeurs transmises aux paramètres sont celles importées de backup. Les valeurs importées sont dans la variable $restoreTask
. Les paramètres sont Action
Trigger
Settings
, et Principal.
Après avoir créé l’objet de tâche planifiée, il est temps d’enregistrer la tâche planifiée. Utilisez le code ci-dessous pour enregistrer la tâche planifiée restaurée.
Dans cet exemple, le nom de la tâche est ‘ExportAppLog_restored.’Le paramètre InputObject
accepte l’objet de tâche planifiée dans la variable $restoreTask
. Assurez-vous d’utiliser les valeurs correctes user
et password
.
Le code est maintenant terminé. Copiez et exécutez le code dans PowerShell pour restaurer la tâche planifiée supprimée. La capture d’écran ci-dessous montre la sortie attendue après l’exécution du code.
Maintenant, la tâche planifiée est enregistrée dans le système. La capture d’écran ci-dessous montre la tâche planifiée restaurée.
Résumé
La fonctionnalité Tâches planifiées dans Windows est un excellent outil pour configurer des tâches ou des emplois. Vous pouvez créer les tâches les plus basiques à plus complexes. Les paramètres et les options sont flexibles.
Avec le module Tâches planifiées PowerShell, la configuration de tâches planifiées à l’aide de commandes PowerShell est rendue possible. Ce module offre la possibilité et les moyens de créer et de déployer des tâches planifiées par programmation sur les ordinateurs locaux et distants.
Microsoft n’a pas mis à jour le module ScheduledTasks, et certains paramètres avancés ne sont pas encore facilement exposés en tant qu’applets de commande PowerShell. Un exemple est la création d’un déclencheur pour le déverrouillage du poste de travail. »Mais, vous pouvez obtenir ces paramètres avancés en utilisant la classe CIM du planificateur de tâches existant.
Néanmoins, le module de tâches planifiées PowerShell reste un outil excellent et performant que vous pouvez ajouter à votre arsenal PowerShell.