Comment gérer les services dans PowerShell

  1. Lister les Services dans PowerShell
  2. Trouver des Services à Distance dans PowerShell
  3. Démarrer et Arrêter des Services dans PowerShell
  4. Redémarrer un Service dans PowerShell
  5. Changer le Type de Démarrage d’un Service dans PowerShell
Comment gérer les services 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
Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Article connexe - PowerShell Service