4.3 : Processus et services

Vous connaissez déjà Get-Process depuis la leçon 1.4. Sophie vous emmène cette fois du côté des services Windows — ces programmes qui tournent en arrière-plan, sans fenêtre, souvent essentiels au bon fonctionnement d’un serveur (impression, mise à jour, base de données…).

Les processus : agir, pas seulement observer

Au-delà de Get-Process vu en section 1 et 2, on peut aussi agir directement sur un processus en cours d’exécution.

Arrêter un processus par son nom ou son identifiant (PID) :

Stop-Process -Name "notepad"
Stop-Process -Id 4532

Si un processus ne répond plus et refuse de s’arrêter proprement, -Force insiste :

Stop-Process -Name "notepad" -Force

Comme pour Remove-Item, Stop-Process est une action immédiate et irréversible pour l’utilisateur (le travail non enregistré dans l’application est perdu). Le réflexe -WhatIf fonctionne aussi ici, à tester avant toute automatisation sur un poste de production.

Les services : le cœur de l’administration système

Les services suivent exactement la même logique Verbe-Nom vue en 2.1. Lister tous les services :

Get-Service

Cibler un service précis :

Get-Service -Name "Spooler"

Démarrer, arrêter, redémarrer :

Start-Service -Name "Spooler"
Stop-Service -Name "Spooler"
Restart-Service -Name "Spooler"

Modifier le comportement au démarrage d’un service

Set-Service permet de changer le type de démarrage (Automatic, Manual, Disabled) :

Set-Service -Name "Spooler" -StartupType Automatic

C’est exactement le genre de réglage qu’on a filtré au TP de la section 2 : repérer les services Stopped dont le StartType est Automatic (un service qui aurait dû démarrer tout seul, mais qui a échoué).

Agir sur un serveur distant

La plupart de ces cmdlets acceptent un paramètre -ComputerName, pour agir sans avoir à se connecter physiquement au serveur concerné (on approfondira les vraies sessions distantes en section 7 avec le Remoting) :

Get-Service -Name "Spooler" -ComputerName "SRV-02"

Ce paramètre -ComputerName a ses limites (protocole ancien, souvent bloqué par les pare-feux modernes) — c’est justement pour ça qu’on lui préférera Invoke-Command et le Remoting en section 7 pour un usage professionnel sérieux.

Un exemple concret Nordika

$servicesCritiques = "Spooler", "W32Time", "Dnscache"

foreach ($nomService in $servicesCritiques) {
    $service = Get-Service -Name $nomService

    if ($service.Status -ne "Running") {
        Write-Warning "$nomService est arrêté, tentative de redémarrage..."
        Start-Service -Name $nomService
    } else {
        Write-Output "$nomService fonctionne normalement"
    }
}

Ce script (dont le if/else sera détaillé en section 5) vérifie un lot de services critiques et relance automatiquement ceux qui seraient arrêtés — un vrai script de supervision basique, tel qu’on pourrait le planifier en section 8.

Retenez le parallèle avec la leçon 4.1 : processus et services ne passent pas par un Provider de type « lecteur » comme FileSystem ou Registry, mais suivent la même philosophie de cmdlets Verbe-Nom cohérentes (Get-, Start-, Stop-, Restart-, Set-).

Dans la prochaine leçon, on passe à la gestion des utilisateurs et groupes locaux.