Menu Fermer

Gérer les services Windows en Powershell

Windows permet de gérer les services Windows depuis la console services.msc ou avec la commande CMD sc.exe mais on peut aussi le faire en PowerShell.

Cet article vous donne les cmdlets Powershell pour démarrer, arrêter ou supprimer des services Windows.

Gérer les services Windows en Powershell

Introduction

PowerShell permet beaucoup de choses parmi lesquels vous pouvez gérer les services Windows.
Cela va de lister les services, à arrêter ou démarrer un service Windows et enfin modifier la configuration.

Il faut bien entendu ouvrir un PowerShell en administrateur puisque vous modifiez la configuration de Windows.

Gérer les services Windows en Powershell

Voici la commande qui affiche la liste des cmdlets Powershell liés aux services Windows.

Get-Help \*-Service

Lors de la première exécution, on vous demande si vous souhaitez installer Update-Help.
Répondez oui puis une mise à jour s’effectue.

Update-Help pour afficher l'aide des cmdlets PowerShell pour gérer les services Windows

Enfin la liste des commandes Powershell pour gérer les services Windows s’affichent.

  • Get-Service – permet d’obtenir les services sur un ordinateur local ou distant à la fois en cours d’exécution ou arrêté;
  • New-Service – crée un service. L’applet de commande crée une nouvelle entrée pour un service Windows dans le registre et dans la base de données de service;
  • Restart-Service – redémarre un service. L’applet de commande envoie le message de redémarrage via le contrôleur de service Windows;
  • Resume-Service – reprend un service. L’applet de commande envoie un message de reprise au Gestionnaire de services Windows;
  • Set-Service – modifie les paramètres d’un service local ou distant, y compris son état, sa description, son nom affiché ou son mode de démarrage. Vous pouvez également utiliser cette applet de commande pour démarrer, arrêter ou suspendre un service;
  • Start-Service – démarre un service;
  • Stop-Service – arrête un service (l’applet de commande envoie un message d’arrêt au Gestionnaire de services Windows);
  • Suspend-Service – suspend un service. Un service suspendu est toujours en cours d’exécution, mais il ne fait rien tant qu’il ne reprend pas son utilisation (par exemple, avec la cmdlet Resume-Service).
Les cmdlets PowerShell pour gérer les services Windows

Pour obtenir l’aide d’un Cmdlet en particulier, utilisez la commande Get-Hep de cette manière :

Get-Help Get-Service

Get-Service : Vérifier l’état d’un service Windows

Le cmdlet Get-Service permet de lister les services et obtenir l’état et informations sur ces derniers.

Get-Service
Lister les services Windows en PowerShell

Vous pouvez filtrer la liste sur le nom grâce à -Name.
Par exemple :

Get-Service -Name brave*
Lister les services Windows en PowerShell

ou encore sur le statut par exemple selon le type de démarrage :

Get-Service | Where-Object {$_.status -eq 'running'}
Get-Service | Where-Object {$_.starttype -eq 'Manual'}

Notez que l’on peut aussi utiliser get-wmiobject :

get-wmiobject win32_service -filter "name='brave'"
Afficher la configuration d'un service Windows en PowerShell

Si vous ne connaissez pas le nom exact du service, vous pouvez le trouver par son nom affiché à l’aide du paramètre –DisplayName. Vous pouvez utiliser la liste des valeurs et des caractères génériques.

Ensuite pour obtenir les status du service, on utilise Select.
Ainsi pour obtenir le statut du service wuauserv :

Get-Service wuauserv | Select DisplayName,Status,ServiceName,Can*
Afficher la configuration d'un service Windows en PowerShell

Enfin pour afficher les dépendances, on utilise les paramètres –DependentServices ou –RequiredServices

DependentServices permet d’afficher les services dépendant du service donné :

Get-Service –Name wuauserv -RequiredServices

Alors que RequiredServices affiche les services dont dépend le service donné :

Get-Service –Name wuauserv -DependentServices

Comment arrêter, démarrer ou redémarrer le service avec PowerShell

Pour arrêter un service Windows, on utilise Stop-Service suivi du nom du service:

Stop-Service -Name wuauserv

On peut forcer l’arrêt avec le paramètre –force, cela va aussi arrêter les services qui en dépendant :

Stop-Service wuauserv –Force -Passthru

Enfin avec un pipe, on peut arrêter plusieurs services :

get-service bits,wuauserv | where {$_.status -eq 'running'} | stop-service –passthru

Le démarrage d’un service utilise la même syntaxe avec le cmdlets Start-Service

Start-Service -Name wuauserv -PassThru

Le service ne démarre que les services qui en dépendent sont démarrés.
Ainsi, on peut démarrer tout cela en une seule commande PowerShell :

get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}

Pour relancer un service Windows en Powershell :

Restart-Service -Name spooler

Et si l’on veut relancer tous les services en pause :

get-service | where-object {$_.Status -eq "Stopped"} | restart-service

Ou encore par exemple, pour relancer tous les services Network en pause :

get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service

Enfin on peut mettre un service en pause, si ce dernier le supporte avec Suspend-Service.

Get-Service samss | Format-List name, canpauseandcontinue

Pour le relancer, on utilise Resume-Service :

Resume-Service -Name samss

Changer le type de démarrage d’un service

Le cmdlet Set-Service donne la possibilité de changer le type de démarrage d’un service.
Les paramètres possibles :

  • Automatic : le service démarre au lancement de Windows
  • Manual : un programme ou l’utilisateur peut le démarrer manuellement
  • Disable : le service est désactivé.

Pour passer un service en démarrage automatique :

Set-Service spooler –startuptype automatic –passthru

Pour modifier le type de démarrage d’un service Windows en Powershell en manuel :

Set-Service spooler –startuptype manual –passthru

Créer ou supprimer en Powershell

Enfin le cmdlet New-Service vous permet de créer un nouveau service Windows.
Voici la syntaxe à utiliser :

new-service -name TestSvc -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"