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

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 523.Voir tous les posts

6 thoughts on “Lister vos services en PowerShell avec Get-Service

  • 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
  • Merci Christophe pour ton aide,c’est plus claire et plus simple.

    Répondre
  • Merci Mickael pour cet article très intéressant qui m’a beaucoup appris pour moi qui suit débutant sur Powershell

    Répondre
  • Bonjour Mickael,
    dans le « III. Filtrer la sortie : les services actifs uniquement », en tant que DBA, je me sers de la cde suivante pour connaitre les services SqlSrv présents sur une machine :

    Get-Service -DisplayName « *sql* » | Format-Table -AutoSize

    Tu n’est pas obligé de passer par le Where-Object pour filter

    Répondre
  • Bonjour,

    Tout d’abord merci pour votre aide.
    J’aimerais savoir s’il était possible d’afficher les services démarrer en fonction du logiciel démarré?

    Merci

    Répondre

Répondre à Christophe Mandin Annuler la réponse

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.