> 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

Percer le brouillard des rançongiciels

Percer le brouillard des rançongiciels

Explorez les méandres d’une investigation de ransomware, avec les experts de Palo Alto Networks et Unit 42 pour faire la lumière dans la nébuleuse des rançongiciels. Plongez au cœur de l’enquête pour comprendre les méthodes, les outils et les tactiques utilisés par les acteurs de la menace. Découvrez comment prévenir les attaques, les contrer et minimiser leur impact. Des enseignements indispensables aux équipes cyber.

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