Polarys

Syntaxe et pipeline

Le pipeline et les objets

Le pipeline et les objets

La différence fondamentale entre PowerShell et les shells UNIX est la nature du pipeline. En Bash, | transporte du texte. En PowerShell, | transporte des objets .NET avec des propriétés et des méthodes.

Pourquoi les objets changent tout

# UNIX : parse du texte pour extraire le PID
ps aux | grep firefox | awk '{print $2}'

# PowerShell : accès direct à la propriété Id
Get-Process firefox | Select-Object -ExpandProperty Id

Pas de parsing fragile. Si Microsoft renomme une colonne dans la sortie texte, votre script Bash casse. Si Microsoft renomme une propriété objet, PowerShell émet une erreur explicite.

Select-Object : filtrer les propriétés

# Afficher uniquement Name et CPU des processus
Get-Process | Select-Object Name, CPU, WorkingSet

# Créer une propriété calculée
Get-Process | Select-Object Name, @{Name='RAM_MB'; Expression={[math]::Round($_.WorkingSet / 1MB, 2)}}

Where-Object : filtrer les objets

# Processus consommant plus de 100 Mo de RAM
Get-Process | Where-Object { $_.WorkingSet -gt 100MB }

# Services arrêtés
Get-Service | Where-Object { $_.Status -eq 'Stopped' }

# Syntaxe courte PowerShell 3+
Get-Service | Where-Object Status -eq Stopped

Sort-Object et Format-Table

# Trier par RAM décroissant, afficher les 5 premiers
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 | Format-Table Name, CPU, @{N='RAM_MB';E={[math]::Round($_.WorkingSet/1MB,1)}} -AutoSize

Cas concret : rapport des services arrêtés

Get-Service |
  Where-Object { $_.Status -eq 'Stopped' -and $_.StartType -eq 'Automatic' } |
  Select-Object Name, DisplayName, StartType |
  Sort-Object DisplayName |
  Export-Csv -Path C:\Temp\services-arretes.csv -NoTypeInformation

Ce pipeline en 5 étapes génère un rapport CSV des services automatiques arrêtés : utile en audit.

Erreurs fréquentes

  • Oublier $_ dans Where-Object : $_ représente l'objet courant dans le pipeline. Sans lui, la condition ne fait pas référence à l'objet.
  • Mixer Format- avec d'autres cmdlets* : Format-Table convertit les objets en objets de formatage. Ne pipez jamais Format-Table vers Export-Csv : exportez AVANT de formater.
  • Trop tôt dans le pipeline : Select-Object Name en début de pipeline élimine les autres propriétés dont les cmdlets suivants auraient besoin.

À retenir

  • Pipeline PowerShell = objets, pas du texte → accès direct aux propriétés.
  • Where-Object { $_.Propriété -opérateur valeur } pour filtrer.
  • Select-Object pour choisir les colonnes, Sort-Object pour trier.
  • Formater (Format-Table) seulement en dernière étape du pipeline.

Mini-exercice

Construisez un pipeline qui liste les 3 processus consommant le plus de mémoire virtuelle (VirtualMemorySize64), en affichant leur nom et leur consommation en Mo.

Quiz de validation

Quiz - 2 questions

1. Quelle est la différence principale entre le pipeline PowerShell et le pipeline Bash ?

2. Pourquoi ne faut-il pas mettre Format-Table au milieu d'un pipeline ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.