Pipes et filtrage PowerShell

L'une des fonctionnalités les plus puissantes de PowerShell est le mécanisme de "pipe".

Le pipe vous permet de combiner plusieurs commandes comme des blocs de construction, chaque étape traitant et transmettant des objets. Cela rend non seulement les scripts plus concis, mais améliore aussi grandement la flexibilité et l'efficacité du traitement des données.

Cette section présentera les|principes de base du pipe, deux méthodes de filtrage, l'extraction des propriétés d'objet et les techniques de combinaison courantes, vous aidant à écrire des opérations de ligne de commande plus puissantes et plus intelligentes.


1. Qu'est-ce qu'un pipe ?

Dans PowerShell,le symbole de pipe|(barre verticale) signifie transmettre la sortie de la commande précédente à la commande suivante comme entrée.

Contrairement aux flux de texte des lignes de commande traditionnelles, ce qui est transmis via le pipe PowerShell, ce sontdes objets,ce qui rend les opérations plus précises et plus puissantes.

Exemple : lister les services en cours d'exécution et les trier

Get-Service | Where-Object {$_.Status -eq "Running"} | Sort-Object DisplayName

Explication :

  1. Get-ServiceObtenir tous les objets service ;
  2. Where-ObjectExclure les services dont le statut est Running ;
  3. Sort-ObjectTrier par nom de service.

2. Filtrage d’objets : Where-Object

Syntaxe de base

Where-Object { 条件表达式 }

Dans{}À l’intérieur, utilisez$_pour représenter chaque objet dans le pipeline actuel.

Exemple 1 : filtrer les processus avec une utilisation mémoire supérieure à 500MB

Get-Process | Where-Object { $_.WorkingSet -gt 500MB }

Exemple 2 : filtrer les services dont les noms commencent par "Win"

Get-Service | Where-Object { $_.Name -like "Win*" }

3. Extraction des propriétés : Select-Object

Select-ObjectIl est utilisé pour extraire les champs qui vous intéressent des objets, souvent pour une sortie concise, une redirection vers des fichiers ou la création de rapports.

Exemple : lister les noms et les statuts de tous les services

Get-Service | Select-Object Name, Status

Vous pouvez également renommer les champs :

Get-Service | Select-Object @{Name="服务名"; Expression={$_.DisplayName}}, Status

4. Tri des données : Sort-Object

Sort-ObjectIl est utilisé pour trier des objets selon une propriété spécifique.

Exemple 1 : Trier les processus par utilisation de la mémoire par ordre décroissant

Get-Process | Sort-Object WorkingSet -Descending | Select-Object Name, WorkingSet -First 5

5. Sortie et mise en forme : Format-Table, Out-File, etc.

Exemple : Afficher les informations de service sous forme de tableau

Get-Service | Format-Table -Property Name, Status, DisplayName

Sortie vers un fichier :

Get-Service | Where-Object {$_.Status -eq "Running"} | 
    Select-Object Name, DisplayName |
    Out-File -FilePath "C:\RunningServices.txt"

6. Combinaisons d'utilisation courantes (pratiques)

1. Afficher tous les processus consommant du CPU (triés par utilisation du CPU)

Get-Process | Where-Object { $_.CPU -gt 0 } | Sort-Object CPU -Descending

2. Rechercher tous les services dont le nom contient "Time"

Get-Service | Where-Object { $_.DisplayName -like "*Time*" }

3. Exporter les informations du disque dur

Get-CimInstance Win32_LogicalDisk |
    Select-Object DeviceID, VolumeName, Size, FreeSpace |
    Export-Csv -Path "C:\diskinfo.csv" -NoTypeInformation

7. Raccourci de Where-Object (PowerShell 3.0+)

PowerShell 3.0 et les versions ultérieures prennent en charge la syntaxe abrégée :

Where-Object Name -like "*Win*"

Équivalent à :

Where-Object { $_.Name -like "*Win*" }

Il est conseillé aux débutants de se familiariser d'abord avec la syntaxe standard, puis d'utiliser la syntaxe abrégée plus tard pour améliorer l'efficacité.


8. Aperçu des commandes courantes d'opérations de pipeline

Commande Description de la fonction
Where-Object Filtrer les objets de manière conditionnelle
Select-Object Extraire les propriétés spécifiées
Sort-Object Trier par propriété
Format-Table Mettre en forme la sortie sous forme de tableau
Out-File Écrire la sortie dans un fichier texte
Export-Csv Exporter les données vers un fichier CSV

9. Résumé

  • Les pipelines PowerShell sont basés surle passage d'objets,ce qui est plus puissant que les pipelines textuels traditionnels
  • Where-Objectest l'outil essentiel pour le filtrage des données
  • Select-ObjectetSort-Objectpeut extraire, trier et organiser les données de manière flexible
  • Combiner plusieurs commandes permet d'accomplir des tâches complexes de traitement des données et constitue la base de l'automatisation des systèmes

10. Exercices pratiques

Tâche 1 :Filtrer tous les services commençant par "W" et les trier par nom

Get-Service | Where-Object { $_.Name -like "W*" } | Sort-Object Name

Tâche 2 :Lister les 10 processus les plus gourmands en mémoire

Get-Process | Sort-Object WorkingSet -Descending | Select-Object Name, WorkingSet -First 10

Tâche 3 :Exporter toutes les adresses IPv4 locales vers un fichier

Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress | Out-File -FilePath "C:\ip_list.txt"
Autres extensions