Lister vos services en PowerShell avec Get-Service

I. Présentation de Get-Service

PowerShell est d'une puissance comparable au bash Linux pour les systèmes Windows, il possède un grand nombre de cmdlet qui permettent de gérer les services et composants du système.

Aujourd'hui, nous allons découvrir la cmdlet "Get-Service" qui permet de récupérer des informations à propos des services Windows.

La cmdlet Get-Service est souvent utilisée dans des scripts locaux de supervision/monitoring.

II. Lister les services avec get-service

On peut en effet rapidement savoir quels sont les services actifs et inactifs via la commande suivante :

Get-Service

Voici un exemple de sortie de cette commande :

get-service-01

Ici, nous voyons donc trois colonnes :

  • Status
  • Name
  • DisplayName

Cela correspond à la visu que nous pouvons avoir lorsque l'on se rend sur la fenêtre "Services" en mode graphique :

get-service-02
Visualisation de l'état des services en mode graphique

A noter que la commande Get-Service ne permet que de récupérer des informations, pas de paramétrage ou de modification donc.

Il est alors possible de filtrer les services, via une technique courante en PowerShell, l'utilisation de "Select" :

Get-Service | Select Name,Status

Également, il est possible d'effectuer un tri pour, par exemple, afficher tous le services en "Stopped" en priorité :

Get-Service | Sort-Object Status

Ainsi, seul le status du service nous sera retourné.

III. Filtrer la sortie : les services actifs uniquement

Voici une petite astuce qui vous permettra de ne lister que les services actifs ("Running") :

Get-Service | Where-Object {$_.status -eq "running"}

A l'inverse, voici comment lister tous les services en "Stopped" :

Get-Service | Where-Object {$_.status -eq "stopped"}

Si vous chercher un service par son nom, cela est également possible via le filtre suivant :

Get-Service | Where-Object {$_.name -eq "nomDeMonService"}

Cette dernière commande est particulièrement utile lorsque l'on souhaite superviser un service particulier

IV. Scritpting PowerShell, démarrage automatique d'un service

Voici un petit bout de script Powershell qui va vérifier l'état d'un service (nommée "MonService" pour l'exemple) et le redémarrer s'il est à "stopped" :

$myService = "MonService"

$etatService = (get-service | Where-Object {$_.name -eq $myService } |select Status | ft -HideTableHeader) | Out-String
if ($etatService.trim() -eq "Stopped")
{
    start-service -name $myService
}

Ici, le nom du service à vérifier est donc variabilisé (positionné dans une variable) afin d'être utilisé plusieurs fois sans effort dans la suite du script. On va donc ensuite récupérer la valeur du "status" pour ce service via la commande "get-Service". Pour finir, une simple condition qui indique que si le status est "Stopped", on démarre le service via la cmdlet "start-service".

J'espère que ce tutoriel vous aura été utile ! N'hésitez pas à poser vos questions ou vos remarques sur notre forum ou dans les commentaires 🙂

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

    mickael a publié 475 articles sur IT-Connect.See all posts by mickael

    2 réactions sur “Lister vos services en PowerShell avec Get-Service

    • 19/06/2016 à 11:46
      Permalink

      Salut Mickael,
      Bel effort pour un linuxien convaincu 🙂 mais je ne résiste pas à la tentation d’apporter mon grain de sel de Windowzien (mais pas que :-)) Et puis le bash arrive sur Windows 10 😀

      Donc, pour rechercher facilement le nom, l’état ou une info sur les services, dans un tableau graphique (Windowzien ou pas ?) :
      gsv | ogv
      et en mode plus verbeux
      Get-Service | Out-Gridview
      ou pour un affichage plus sélectif
      Get-Service | Select Status, Name, DisplayName, StartType | Out-Gridview
      Ensuite il suffit d’utiliser le tri sur les entêtes de colonne, ou le filtre multicritères dans la partie haute du datagrid.
      Sinon, pour redémarrer un service arrêté alors qu’il devrait être en cours d’exécution, on peut faire ainsi.
      Get-Service | ? { $_.StartType -like ‘Auto*’ -and $_.Status -eq ‘Stopped’ } | Start-Service -Verbose

      Au plaisir d’apprécier d’autres publications qui prônent l’ouverture d’esprit…
      Christophe

      Répondre
    • 08/04/2017 à 20:08
      Permalink

      Merci Christophe pour ton aide,c’est plus claire et plus simple.

      Répondre

    Laisser un commentaire

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