17/11/2024

Gérer les services de Windows

I. Présentation

Dans ce chapitre, nous allons utiliser PowerShell pour gérer les services Windows afin que vous soyez en mesure de lister les services, de les configurer, mais aussi de les démarrer et les arrêter, à partir de la console ou d'un script PowerShell.

Pour manipuler les services Windows avec PowerShell, nous pouvons utiliser plusieurs cmdlets présents dans le module "Microsoft.PowerShell.Management" intégré nativement dans Windows :

  • Get-Service : lister les services Windows
  • New-Service : créer un nouveau service
  • Remove-Service : supprimer un service
  • Set-Service : modifier la configuration d'un service existant
  • Restart-Service : redémarrer un service
  • Suspend-Service : suspendre un service
  • Resume-Service : reprendre un service (suspendu)
  • Start-Service : démarrer un service
  • Stop-Service : arrêter un service

Si nous faisons l'abstraction de PowerShell, la gestion des services Windows à partir de la ligne de commande s'effectue via l'outil "sc.exe" (Service Control) intégré nativement au système d'exploitation.

II. Lister les services

Pour lister les services avec PowerShell, nous devons utiliser le cmdlet "Get-Service". Sans paramètre, ni filtre, il retournera la liste de l'ensemble des paramètres présents sur la machine locale avec trois propriétés : le statut (Status), le nom du service (Name) et le nom d'affichage (DisplayName). Chaque service possède un ensemble de propriétés.

Get-Service

Grâce à Where-Object, nous pouvons filtrer cette sortie. Par exemple, nous pouvons lister uniquement les services en cours d'exécution :

Get-Service | Where-Object { $_.Status -eq "Running" }

Par ailleurs, vous pouvez effectuer une recherche d'un service à partir d'un mot clé. Ceci est pratique quand vous recherchez un service, mais que vous avez oublié le nom exact. Ici, nous allons obtenir la liste de tous les services dont le nom d'affichage contient le mot clé "pare-feu".

Get-Service | Where-Object { $_.DisplayName -like "*pare-feu*" }

Ainsi, nous obtenons une liste avec un ou plusieurs services, en fonction de la requête.

III. Configurer un service

Au sein du système d'exploitation Windows, chaque service a sa propre configuration avec plusieurs paramètres : un type de démarrage, un état, un compte associé pour exécuter le service, des paramètres de démarrage, etc... Avec le cmdlet "Set-Service" de PowerShell, nous allons pouvoir modifier la configuration d'un service.

Nous allons modifier la configuration du service "Télécopie" de Windows (pour le Fax), car il est très rarement utilisé, donc nous n'affecterons pas le bon fonctionnement du système en cas de mauvaise manipulation.

Nous pouvons modifier le type de démarrage de service. Actuellement, il est en type de démarrage "Manuel", nous allons le désactiver. Il y a plusieurs valeurs possibles : Automatic, Boot, Disabled, Manual, System. Vous devez exécuter une console PowerShell en tant qu'administrateur pour exécuter la commande ci-dessous, car elle nécessite une élévation de privilèges.

Set-Service -Name Fax -StartupType Disabled

Nous pourrions même changer le nom d'affichage de ce service. Ceci permettrait d'utiliser le nom d'affichage "Télécopie (Fax)" à la place de "Télécopie". De la même façon, avec le paramètre "-Description", nous pourrions modifier la description de ce service.

Set-Service -Name Fax -DisplayName "Télécopie (Fax)"

À chaque fois, nous identifions le service à modifier avec le paramètre "-Name".

De plus, nous pouvons spécifier le paramètre "-PassThru", que nous retrouvons sur différents cmdlets. Il est pratique, car il affiche dans la console l'objet créé, modifié ou affecté par la commande précédente, alors que par défaut, cette commande ne retourne pas son résultat.

Set-Service -Name Fax -DisplayName "Télécopie (Fax)" -PassThru

Voici le résultat obtenu :

IV. Changer l'état d'un service

Comme nous l'avons mentionné en introduction, PowerShell met à notre disposition un ensemble de cmdlets pour gérer l'état d'un service Windows. Ils sont particulièrement utiles pour arrêter, démarrer ou redémarrer un service, car ce sont les trois actions effectuées le plus fréquemment lorsque nous administrons un serveur ou un poste de travail Windows.

À chaque fois, nous pouvons utiliser le paramètre "-Name" ou "-DisplayName" pour agir sur le service, selon l'information dont nous disposons.

  • Démarrer un service :
Start-Service -Name <Nom du service>
Start-Service -DisplayName <Nom d'affichage du service>
  • Redémarrer un service :
Restart-Service -Name <Nom du service>
Restart-Service -DisplayName <Nom d'affichage du service>
  • Arrêter un service :
Stop-Service -Name <Nom du service>
Stop-Service -DisplayName <Nom d'affichage du service>

Il est à noter que ce cmdlet dispose du paramètre "-Force" pour forcer l'arrêt d'un service, ce qui peut rendre service dans certaines situations si un service refuse de s'arrêter.

Par ailleurs, vous devez savoir que le cmdlet "Get-Service" contient plusieurs méthodes permettant d'agir sur l'état d'un service. Par exemple, nous avons la méthode Start() pour démarrer un service et la méthode Stop() pour arrêter un service.

Voici comment agir sur le service "wuauserv" correspond à Windows Update (ce service est arrêté, sauf quand vous recherchez les mises à jour sur votre machine ou que des mises à jour sont en cours d'installation) :

(Get-Service -Name wuauserv).Start()
(Get-Service -Name wuauserv).Stop()

V. Supprimer un service

PowerShell 6.0 a introduit le cmdlet "Remove-Service" dont l'objectif est de supprimer un service Windows. Il vient compléter la famille des cmdlets dédiés à la gestion des services.

Ce cmdlet s'utilise de la façon suivante :

Remove-Service -Name "<Nom du service>"

Attention, cette action est irréversible. Ce cmdlet supprime le service Windows dans le Registre et dans la base de données de service. Si vous supprimez un service par erreur, vous devez le recréer de toutes pièces. Si vous n'utilisez pas PowerShell 6 ou 7, mais que votre machine dispose seulement de Windows PowerShell 5.1 (ou une version inférieure), sachez que vous pouvez supprimer un service avec l'outil sc.exe :

sc.exe delete "<Nom du service>"

VI. Conclusion

Suite à la lecture de ce chapitre, vous devriez être en mesure d'utiliser les cmdlets PowerShell relatifs à la gestion des services Windows.


livre pour apprendre PowerShell
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.