Gérer les services et les processus avec PowerShell
Notre environnement actuel nous oblige à passer par PowerShell lorsque l'on intervient en local sur le serveur : voyons comment manipuler les services et processus avec PowerShell.
La gestion des services et des processus est également à prendre en considération, d’une part car il arrive parfois que l’on ait besoin de démarrer, de redémarrer ou d’arrêter un service, d’autre part car il est nécessaire parfois d’analyser la liste des processus en cours (exemple : quel processus consomme trop de mémoire vive ?), voir même de tuer un processus.
I. Gestion des services
Tout d’abord, on va voir différentes actions qui permettent de lister les services, comme par exemple tous les services ou tous les services démarrés.
Pour un listing pur et dur de tous les services, on exécutera simplement cette commande :
Get-Service
Maintenant, on va lister uniquement les services en cours d’exécution, c’est-à-dire les services « running » (ceux en arrêts sont « stopped ») :
Get-Service | Where{ $_.Status -eq "Running" }
Pour rechercher un service dans la liste, on s’appuiera sur son « DisplayName » pour le retrouver plus facilement. Par exemple, pour retrouver le service lié à Windows Update :
Get-Service | Where{ $_.DisplayName -like "*Update*" }
On remarque que le nom du service Windows Update est « wuauserv ». Si l’on souhaite arrêter ce service :
Stop-Service -Name wuauserv
Dans la commande ci-dessus, on remarque qu’il suffit d’utiliser la commande « Stop-Service » suivie du nom du service ciblé. Pour vérifier que le service est bien « stopped », on liste l’état de ce service :
Get-Service -Name wuauserv
Pour le fun, on va démarrer ce service que l’on vient d’arrêter. On aurait pu faire comme pour l’arrêt, en remplaçant « Stop-Service » par « Start-Service » suivit du nom du service, mais on va procéder autrement. On va réaliser un « Get » pour récupérer la liste de service (un service ciblé explicitement par son nom dans ce cas précis) et via le pipe on va indiquer qu’on veut le démarrer.
Comprenez qu’avec cette méthode il est possible de démarrer ou de stopper un grand nombre de services simultanément (il suffit de jouer sur la sélection, éventuellement avec une clause where intermédiaire).
Get-Service -Name wuauserv | Start-Service
La copie d’écran ci-dessous résume les actions d’arrêt du service et de démarrage de ce même service. Des étapes intermédiaires de contrôles sont ajoutées afin de vérifier l’état du service.
Enfin, pour redémarrer un service, on utilisera tout simplement le commandlet « Restart-Service ». On va maintenant passer à la gestion des processus, vous allez voir c’est tout aussi simple, et la logique reste la même.
Pour approfondir la gestion des services avec PowerShell :
- Lister vos services en PowerShell avec Get-Service
- Gérer les services en PowerShell avec Set-Service
II. Gestion des processus
À l’instar de la gestion des services, la gestion des processus s’effectue également par des commandes de type « Start-* » et « Stop-* », à la différence qu’il n’y a pas de commande pour redémarrer ou plutôt relancer le processus.
On va commencer par exécuter le logiciel 7-Zip que nous avons installé précédemment. Pour cela, saisissez les deux commandes suivantes :
PS C:\> cd 'C:\Program Files\7-Zip\'
PS C:\Program Files\7-Zip> .\7zFM.exe
Une fois le logiciel démarré, on peut suivre le comportement du processus en PowerShell. Par l’intermédiaire de « Get-Process » et du nom du processus, ici « 7zFM», on obtiendra davantage d’informations :
Get-Process -Name 7zfm
En ajoutant l’option « FileVersionInfo » et un affichage en forme de liste, on obtiendra des informations sur l’exécutable à l’origine de ce processus, notamment le chemin vers cet exécutable (FileName). Pour illustrer mes propos, voici l’exemple pour le processus firefox :
Get-Process -Name 7zfm -FileVersionInfo | fl
À tout moment on peut tuer un processus grâce à la commande « Stop-Process » suivie du nom du processus ciblé, comme on le faisait pour un service. Ensuite, si l’on cherche à faire un « Get » sur ce processus que l’on vient de fermer, un message d’erreur sera retourné, car le processus est introuvable.
Si c’est bien le cas, alors l’opération est un succès et je vous félicite !
Stop-Process -Name 7zfm
Une application qui démarre exécute un processus sur le serveur. De ce fait, si l'on démarre un processus on va lancer l'application associée.
Pour parvenir à cela, on s’appuie sur le commandlet « Start-Process » qui requiert le chemin vers le fichier exécutable à démarrer (FilePath). Pour 7-Zip, voici la commande correspondante :
Start-Process -FilePath "C:\Program Files\7-Zip\7zFM.exe"
Enfin, sachez que si vous ne connaissez pas le nom exact du processus, vous pouvez effectuer une recherche en intégrant des astérisques/wildcard. Par exemple, au lieu de préciser "7zfm", je peux préciser ceci :
Get-Process *7z*
Grâce à ces quelques commandlets très simples d’utilisation, vous êtes en mesure de gérer l’état des services et des processus sur votre serveur, le tout via PowerShell. Si vous avez bien compris toutes les notions abordées dans ce chapitre, vous êtes prêt à passer à la suite !