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:
Get-ServiceAlle Dienstobjekte abrufen;Where-ObjectDienste mit dem Status Running herausfiltern;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 DatenSelect-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