PowerShell-Pipes und Filterung

Eine der leistungsfähigsten Funktionen von PowerShell ist der "Pipe"-Mechanismus.

Die Pipe ermöglicht es Ihnen, mehrere Befehle wie Bausteine zu kombinieren, wobei jeder Schritt Objekte verarbeitet und weitergibt. Dies macht Skripte nicht nur prägnanter, sondern verbessert auch die Flexibilität und Effizienz der Datenverarbeitung erheblich.

In diesem Abschnitt werden die|Grundprinzipien der Pipe, zwei Filtermethoden, das Extrahieren von Objekteigenschaften und gängige Kombinationstechniken vorgestellt, damit Sie leistungsfähigere und intelligentere Befehlszeilenoperationen schreiben können.


1. Was ist eine Pipe?

In PowerShell,das Pipe-Symbol|(vertikaler Balken) bedeutet, die Ausgabe des vorherigen Befehls als Eingabe an den nächsten Befehl zu übergeben.

Anders als die Textströme in traditionellen Befehlszeilen werden durch die PowerShell-PipeObjekte übergeben,was Operationen präziser und leistungsfähiger macht.

Beispiel: Laufende Dienste auflisten und sortieren

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

Erklärung:

  1. Get-ServiceAlle Dienstobjekte abrufen;
  2. Where-ObjectDienste mit dem Status Running herausfiltern;
  3. Sort-ObjectNach Dienstnamen sortieren.

2. Objektfilterung: Where-Object

Grundlegende Syntax

Where-Object { 条件表达式 }

In{}Verwenden Sie darin$_um jedes Objekt in der aktuellen Pipe darzustellen.

Beispiel 1: Prozesse mit einer Speicherbelegung von über 500MB filtern

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

Beispiel 2: Dienste filtern, deren Namen mit "Win" beginnen

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

3. Eigenschaften extrahieren: Select-Object

Select-ObjectEs wird verwendet, um die Felder zu extrahieren, die Sie interessieren, oft für eine prägnante Ausgabe, zum Umleiten in Dateien oder zum Erstellen von Berichten.

Beispiel: Die Namen und Status aller Dienste auflisten

Get-Service | Select-Object Name, Status

Sie können Felder auch umbenennen:

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

4. Daten sortieren: Sort-Object

Sort-ObjectEs wird verwendet, um Objekte nach einer bestimmten Eigenschaft zu sortieren.

Beispiel 1: Prozesse nach Speichernutzung in absteigender Reihenfolge sortieren

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

5. Ausgabe und Formatierung: Format-Table, Out-File usw.

Beispiel: Dienstinformationen in Tabellenform anzeigen

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

Ausgabe in eine Datei:

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

6. Gängige Nutzungskombinationen (praktisch)

1. Alle Prozesse anzeigen, die CPU verbrauchen (nach CPU-Auslastung sortiert)

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

2. Alle Dienste mit "Time" im Namen finden

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

3. Festplatteninformationen exportieren

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

7. Where-Object-Kurzschreibweise (PowerShell 3.0+)

PowerShell 3.0 und spätere Versionen unterstützen die Kurzsyntax:

Where-Object Name -like "*Win*"

Entspricht:

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

Anfängern wird empfohlen, sich zuerst mit der Standardsyntax vertraut zu machen und die Kurzschreibweise später zur Effizienzsteigerung zu verwenden.


8. Überblick über gängige Pipeline-Operationsbefehle

Befehl Funktionsbeschreibung
Where-Object Objekte bedingt filtern
Select-Object Angegebene Eigenschaften extrahieren
Sort-Object Nach Eigenschaft sortieren
Format-Table Ausgabe als Tabelle formatieren
Out-File Ausgabe in eine Textdatei schreiben
Export-Csv Daten in eine CSV-Datei exportieren

9. Zusammenfassung

  • PowerShell-Pipelines basieren aufObjektübergabe,die leistungsfähiger ist als herkömmliche Text-Pipelines
  • Where-Objectist das Kernwerkzeug zum Filtern von Daten
  • Select-ObjectundSort-Objectkann Daten flexibel extrahieren, sortieren und organisieren
  • Das Kombinieren mehrerer Befehle kann komplexe Datenverarbeitungsaufgaben erledigen und ist die Grundlage der Systemautomatisierung

10. Übungsaufgaben

Aufgabe 1:Alle Dienste filtern, die mit "W" beginnen, und sie nach Namen sortieren

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

Aufgabe 2:Die 10 Prozesse mit der höchsten Speichernutzung auflisten

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

Aufgabe 3:Alle lokalen IPv4-Adressen in eine Datei exportieren

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