Sophie repose un ticket sur votre bureau, presque identique à un vrai signalement reçu la veille par le support : « Le serveur RDS de l’étage 3 rame. Avant d’aller plus loin, donne-moi les 5 processus qui bouffent le plus de mémoire, avec leur nom et la RAM en Mo — pas en octets, ce n’est pas lisible. »
Objectif
Utiliser uniquement Get-Process, Sort-Object, Select-Object et une propriété calculée pour produire un résultat propre et directement lisible par Sophie.
Consignes
Étape 1 — Récupérez tous les processus, triés par mémoire utilisée (WS), du plus gourmand au moins gourmand.
Indice : revoyez la leçon 2.4, section « Sort-Object ».
Étape 2 — Ne gardez que les 5 premiers.
Indice : un seul mot-clé de Select-Object suffit.
Étape 3 — La propriété WS est en octets. Affichez-la en mégaoctets, arrondie à 1 décimale, dans une colonne nommée RAM_Mo.
Indice : Select-Object accepte des propriétés calculées, sous la forme @{Name="NomColonne"; Expression={ calcul }}. Par exemple :
@{Name="Taille_Ko"; Expression={ $_.Length / 1KB }}
Étape 4 — N’affichez au final que le nom du processus et cette colonne RAM_Mo.
Étape 5 (bonus) — Sophie veut la même chose, mais uniquement pour les processus dépassant 200 Mo, sans limite de nombre cette fois.
Indice : quelle cmdlet de la leçon 2.4 permet de filtrer selon une condition, plutôt que de limiter un nombre de lignes ?
Solution commentée
Étapes 1 à 4 combinées :
Get-Process |
Sort-Object -Property WS -Descending |
Select-Object -First 5 -Property ProcessName, @{Name="RAM_Mo"; Expression={ [math]::Round($_.WS / 1MB, 1) }}
Résultat attendu (les valeurs varient selon votre machine) :
ProcessName RAM_Mo
----------- ------
chrome 842.3
pwsh 210.7
Teams 198.4
explorer 156.2
Code 140.9
Détails à retenir :
[math]::Round(..., 1) arrondit à 1 décimale — sans ça, vous obtiendriez un nombre à rallonge peu lisible.1MB est une unité reconnue nativement par PowerShell (comme 1KB, 1GB), inutile de diviser par 1048576 à la main.- L’ordre compte : on trie et on sélectionne les 5 premiers avant de reformater les colonnes, sinon
-First 5 s’appliquerait après coup sur un tri déjà faussé (voir le piège de la leçon 2.3).
Étape 5 (bonus) :
Get-Process |
Where-Object { $_.WS -gt 200MB } |
Sort-Object -Property WS -Descending |
Select-Object -Property ProcessName, @{Name="RAM_Mo"; Expression={ [math]::Round($_.WS / 1MB, 1) }}
Ici, Where-Object remplace Select-Object -First 5 : on ne limite plus un nombre de lignes, on filtre selon une condition (mémoire > 200 Mo). Le nombre de résultats devient donc variable selon l’état réel de la machine — exactement ce que demandait Sophie.
Si l’étape 3 vous a donné du fil à retordre, c’est normal : les propriétés calculées sont la première vraie syntaxe « avancée » de la formation. Retenez simplement le motif @{Name="..."; Expression={...}}, vous le recroiserez très souvent, y compris à la section 4 lors de l’export en CSV.