Comment gérer les services dans PowerShell
- Lister les Services dans PowerShell
- Trouver des Services à Distance dans PowerShell
- Démarrer et Arrêter des Services dans PowerShell
- Redémarrer un Service dans PowerShell
- Changer le Type de Démarrage d’un Service dans PowerShell

Les services Windows sont l’un des sujets que presque tous les administrateurs système Windows doivent utiliser. Bien sûr, pour gérer les services Windows, nous pourrions ouvrir le composant logiciel enfichable MMC services.msc
pour des tâches ponctuelles, mais que faire si nous devons créer une automatisation avec PowerShell ?
Cet article discutera de tous les cmdlets de service PowerShell, de leur utilisation, et développera notre script pour gérer des services sur de nombreux ordinateurs, localement ou à distance.
Lister les Services dans PowerShell
Une des tâches les plus basiques que nous pouvons accomplir avec PowerShell et les services est simplement d’énumérer quels services existent sur un ordinateur local ou distant. Par exemple, ouvrez PowerShell, exécutez la commande Get-Service
, et observez la sortie.
La commande Get-Service
va lister tous les services sur l’ordinateur local ainsi que le Statut
, le Nom
, et le Nom d'affichage
de chaque service.
Get-Service
Sortie :
Status Name DisplayName
------ ---- -----------
Stopped AarSvc_55244 AarSvc_55244
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Running AMD Crash Defen... AMD Crash Defender Service
<SNIP>
Comme beaucoup d’autres cmdlets, PowerShell ne retourne pas toutes les propriétés pour chaque service.
Bien que, par exemple, nous aimerions voir un service requis ou peut-être la description du service, nous pouvons trouver ces propriétés en passant le résultat à la commande Select-Object
et en utilisant le caractère générique *
pour représenter toutes les propriétés.
Get-Service ALG | select *
Sortie :
Name : ALG
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : Application Layer Gateway Service
DependentServices : {}
MachineName : .
ServiceName : ALG
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32OwnProcess
StartType : Manual
Site :
Container :
Trouver des Services à Distance dans PowerShell
Peut-être sommes-nous sur un réseau et devons-nous énumérer des services sur un ou plusieurs ordinateurs Windows distants. Nous aurions pu le faire à l’époque de PowerShell Windows en utilisant le paramètre -ComputerName
, mais malheureusement, ce paramètre n’existe plus.
Une façon d’inspecter les services Windows sur un ordinateur distant est d’utiliser le PowerShell Remoting (ou PS Remoting). Utiliser PS Remoting peut encapsuler toute commande locale et l’invoquer dans une session distante, tout comme nous le faisions localement.
En supposant que nous avons PowerShell Remoting activé sur un ordinateur distant, nous pourrions, par exemple, utiliser le cmdlet Invoke-Command
pour exécuter la commande Get-Service
sur un ordinateur distant.
$cred = Get-Credential
Invoke-Command -ComputerName SRV1 -ScriptBlock { Get-Service } -Credential $cred
Sortie :
Status Name DisplayName PSComputerName
------ ---- ----------- --------------
Stopped AarSvc_55244 AarSvc_55244 SRV1
<SNIP>
Une fois exécuté, le cmdlet Invoke-Command
passe toutes les informations que Get-Service
a retournées, et les services vous seraient retournés comme prévu.
Remarquez la propriété supplémentaire PSComputerName
retournée par le cmdlet Invoke-Command
. Nous pouvons également créer un script simple pour énumérer des services sur de nombreux ordinateurs distants.
Démarrer et Arrêter des Services dans PowerShell
Nous pouvons également démarrer et arrêter des services avec PowerShell Windows.
Les cmdlets Start-Service
et Stop-Service
font précisément ce que nous nous attendons. Ensuite, nous pouvons utiliser le pipeline ou le paramètre -Name
ci-dessous.
## Stop a service
$serviceName = 'wuauserv'
Stop-Service -Name $serviceName
## Stop a service with the pipeline
Get-Service $wuauserv | Stop-Service
Tous les cmdlets *-Service
nous permettent de compléter par tab les valeurs des noms de service avec les paramètres -Name
et -DisplayName
. Il suffit de taper le paramètre -Name
suivi d’un espace et d’appuyer sur la touche Tab
.
Nous verrons qu’il parcourt tous les services sur l’ordinateur local. Le même concept s’applique également pour démarrer un service.
## Start a service
$serviceName = 'wuauserv'
Start-Service -Name $serviceName
## Start service with the pipeline
Get-Service $wuauserv | Start-Service
Les commandes Start-Service
et Stop-Service
sont idempotentes, ce qui signifie que si un service est soit démarré, soit arrêté et que nous essayons d’arrêter ou de démarrer le service alors qu’il est déjà dans cet état, les cmdlets passeront le service.
Pour arrêter et démarrer des services à distance avec PowerShell, encore une fois, vous devrez envelopper ces commandes dans un bloc de script et utiliser PowerShell Remoting pour les invoquer à distance, comme montré ci-dessous.
$cred = Get-Credential
$serviceName = 'wuauserv'
Invoke-Command -ComputerName SRV02 -ScriptBlock { Start-Service -Name $using:serviceName } -Credential $cred
Redémarrer un Service dans PowerShell
Pour limiter la réutilisation de code pour redémarrer un service avec PowerShell Windows, nous devrions mieux utiliser le cmdlet Restart-Service
. Ce cmdlet fait précisément ce que nous pensons et fonctionne de manière similaire aux autres commandes de service.
Par exemple, si nous voulons démarrer et arrêter le service wuauserv
comme montré dans l’exemple précédent, nous pourrions économiser du code en passant simplement la sortie de Get-Service
directement à Restart-Service
, comme montré ci-dessous.
## Restart a service with the Name parameter
$serviceName = 'wuauserv'
Get-Service -Name $serviceName | Restart-Service
Changer le Type de Démarrage d’un Service dans PowerShell
Le type de démarrage d’un service est l’attribut qui dicte ce que les services font lorsque Windows démarre. Donc encore une fois, nous avons quelques options.
Automatique
: Le service démarre automatiquement lorsque Windows démarre.Désactivé
: Le service ne démarrera jamais à moins d’être changé.Manuel
: Le service peut être démarré mais doit être fait manuellement.Automatique - Retardé
: Le service démarre automatiquement mais est retardé une fois Windows démarré.
D’abord, nous devons savoir ce qu’est un type de démarrage. Vous pouvez le trouver avec Get-Service
.
Si vous utilisez Get-Service
pour trouver le type de démarrage, vous découvrirez que Get-Service
l’appelle Statut
et est représenté comme la propriété Statut
.
(Get-Service -Name wuauserv | select *).StartType
Sortie :
Manual
Une fois que vous connaissez le type de démarrage actuel, nous pouvons le changer en utilisant Set-Service
. L’exemple ci-dessous définit le type de démarrage sur Automatique
.
Set-Service -Name <service name> -StartupType Automatic
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn