> Tech > Tâches d’arrière-plan PowerShell

Tâches d’arrière-plan PowerShell

Tech - Par Renaud ROSSET - Publié le 09 juin 2011
email

Une autre fonctionnalité fantastique de PowerShell 2.0, laquelle convient également pour la gestion à distance, est la prise en charge des tâches d’arrière-plan. Dans PowerShell 1.0, si vous deviez exécuter une expression de longue durée, votre session PowerShell était bloquée jusqu’à la fin du processus.
Il n’existait pas

Tâches d’arrière-plan PowerShell

d’approche native pour placer un processus en arrière-plan comme c’est le cas dans les univers Unix et Linux. PowerShell peut lancer des tâches sur l’ordinateur local ou sur un ordinateur distant.

Quelques cmdlets, essentiellement Get-WMIObject et Invoke-Command, comportent un paramètre –AsJob :

PS C:\> get-wmiobject win32_ntlogevent -filter « logfile=’system' » -asjob

 

Au lieu d’attendre les résultats, PowerShell crée une tâche d’arrière-plan. La version 2.0 introduit plusieurs cmdlets de tâches. La cmdlet Get-Job affiche le statut d’une tâche donnée.

Voyons le statut de la tâche WMI que je viens d’exécuter :

PS C:\> get-job job13
Id Name State HasMoreData Location Command
— —- —– ———– ——– ——-
13 Job13 Completed True localhost Get-WMIObject

La cmdlet Receive-Job retourne les résultats de la tâche vers ma console. Je peux exploiter les données dans un pipeline PowerShell comme pour n’importe quelle autre expression. Vous noterez que j’utilise le paramètre –keep afin de conserver les résultats de ma tâche. Sinon, ils seront effacés du cache de tâche à la fin de Receive-Job :

PS C:\> receive-job job13 -keep | sort Type | group Type | sort Count
-Descending | format-table
Count,Name -auto
Count Name
—– —-
24127 Information
354 Error
106 Warning
3 Critical

Vous pouvez appliquer cette même technique dans une session à distance interactive. Les tâches d’arrière-plan sont particulièrement indiquées pour l’exécution de tâches sur de multiples ordinateurs. En reprenant la collection de sessions distantes créées précédemment, nous allons exécuter la même commande à distance, mais sous forme de tâche locale, d’où aucun temps d’attente de mon côté :

PS C:\> invoke-command $sessions -scriptblock {get-eventlog -list |
where {$_.Entries.count -gt 0}} –asjob

Si la tâche nécessite trop de temps, je peux toujours l’arrêter avec Stop-Job. Sinon, j’ai la possibilité d’accomplir d’autres tâches et de vérifier périodiquement le statut de la tâche. Une fois le traitement terminé, il ne me reste plus qu’à recevoir les résultats et à les exploiter comme bon me semble.
L’association de la gestion à distance et des tâches d’arrière- plan signifie que vous pouvez accomplir beaucoup de choses sans avoir à attendre les résultats. Il est possible de récupérer les résultats lorsque vous êtes prêt et de les employer dans le cadre de n’importe quelle expression PowerShell.

Encore une fois, je vous encourage à examiner l’aide complète sur les cmdlets de tâches, notamment les rubriques Invoke-Command et About Job.

Téléchargez cette ressource

Préparer l’entreprise aux technologies interconnectées

Préparer l’entreprise aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 09 juin 2011