Gérer les services de Windows
Sommaire
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.