PowerShell: objektorientierte Befehlszeile
Der größte Unterschied zwischen PowerShell und traditionellen Kommandozeilen (wie CMD oder Bash) besteht darin, dass die Befehlsausgabe in PowerShell aus Objekten besteht, nicht aus reinem Text.
Im Vergleich zu traditionellen Kommandozeilen ist PowerShell flexibler und leistungsfähiger und macht auch Skripterstellung und Systemverwaltung effizienter.
Was ist eine „objektorientierte Kommandozeile“?
In traditionellen Kommandozeilen ist das, was zwischen Befehlen durch Pipes weitergegeben wird,|Zeichenketten-Text. Um diesen Text weiterzuverarbeiten, müssen Sie normalerweise Werkzeuge wie grep, awk und sed verwenden.
In PowerShell hingegen sind die Daten, die zwischen Befehlen durch die Pipe weitergegeben werden, Objekte. Sie können direkt auf die Eigenschaften und Methoden von Objekten zugreifen, ohne Text parsen zu müssen, was Genauigkeit und Entwicklungseffizienz erheblich verbessert.
Befehlsausgabe sind Objekte
Nehmen Sie den BefehlGet-Processals Beispiel:
Get-Process
Dieser Befehl wird verwendet, um die Liste der aktuell auf dem System ausgeführten Prozesse abzurufen.
Was der Befehl Get-Process zurückgibt, ist keine Klartext-Tabelle, sondern eine Menge von .NET-Objekten; jeder Prozess ist ein Objekt vom Typ System.Diagnostics.Process.
Wir können auf seine Eigenschaften genauso zugreifen wie auf Objekte in einer Programmiersprache, zum Beispiel:
(Get-Process)[0].Name
Der obige Befehl ruft den Namen des ersten Prozesses ab. Beispielausgabe:
explorer
Objektstruktur anzeigen: Get-Member
Um Objekte tiefgehend zu verstehen, ist der Schlüssel zu wissen, welche Eigenschaften und Methoden sie haben. PowerShell bietet denGet-MemberBefehl, mit dem wir die Objektstruktur erkunden können:
Get-Process | Get-Member
Auszug aus der Beispielausgabe:
Name MemberType Definition
---- ---------- ----------
Id Property int Id {get;}
Name Property string Name {get;}
Kill Method void Kill()
Start Method void Start()
Erklärung:
PropertyStellt eine Eigenschaft des Objekts dar, wie zum BeispielId、NameMethodStellt eine Methode des Objekts dar, wie zum BeispielKill()、Start()
Sie könnenObject.propertyoderObject.method()um diese Member zu verwenden.
Weitergabe von Objekten in der Pipeline
Die Pipeline übergibt Objekte
Wenn in PowerShell mehrere Befehle mit|was übergeben wird, sindObjekteund nicht Text.
Das bedeutet, dass Sie in nachfolgenden Befehlen direkt auf die Eigenschaften der Objekte zugreifen können, die vom vorherigen Befehl übergeben wurden.
Beispiel: Alle Dienste filternRunningdessen Status Running ist:
Get-Service | Where-Object { $_.Status -eq 'Running' }
Erklärung:
$_Stellt das aktuelle Objekt in der Pipeline darStatusist eine Eigenschaft des Dienstobjekts
Flussdiagramm für Pipeline-Vorgänge (Mermaid)

Häufige Befehle zur Objektverarbeitung
PowerShell bietet eine Reihe integrierter Befehle für die Arbeit mit Objekten, die häufig für Filterung, Sortierung, Gruppierung, Export und andere Szenarien verwendet werden:
| Befehl | Beschreibung |
|---|---|
Where-Object |
Filtert Objekte nach Bedingung |
Select-Object |
Wählt Objekteigenschaften aus oder benennt sie um |
Sort-Object |
Sortiert Objekte nach einer Eigenschaft |
Group-Object |
Gruppiert und zählt Objekte nach Eigenschaft |
Measure-Object |
Berechnet Anzahl, Summe, Durchschnitt usw. von Objekten |
Export-Csv |
Exportiert Objekte in eine CSV-Datei |
ConvertTo-Json |
Konvertiert Objekte in JSON-Formatzeichenfolgen |
Filterung von Objekteigenschaften und berechnete Spalten
Auswählen bestimmter Eigenschaften
Get-Process | Select-Object Name, Id, CPU
Dieser Befehl extrahiert den Namen, die ID und die CPU-Auslastung jedes Prozesses.
Hinzufügen berechneter Spalten (benutzerdefinierte Eigenschaften)
Sie können benutzerdefinierte Eigenschaften durch Skriptblöcke hinzufügen:
Get-Process | Select-Object Name, @{Name="MemoryMB";Expression={$_.WorkingSet / 1MB -as [int]}}
Erklärung:
@{}Erstellen Sie eine Hashtabelle, um eine neue Eigenschaft zu definierenNameGeben Sie den neuen Spaltennamen anExpressionStellen Sie die Berechnungslogik bereit
Sortier- und Gruppierungsvorgänge
Prozesse nach CPU-Auslastung sortieren
Get-Process | Sort-Object CPU -Descending
Nach Dienststatus gruppieren
Get-Service | Group-Object Status
Beispielausgabe:
Count Name Group
----- ---- -----
75 Running {WinDefend, WSearch, ...}
35 Stopped {Fax, Spooler, ...}
Export und strukturierte Daten
Export in eine CSV-Datei
Get-Service | Select-Object Name, Status | Export-Csv -Path services.csv -NoTypeInformation
In das JSON-Format konvertieren
Get-Service | ConvertTo-Json
Diese Formate erleichtern die Integration in andere Systeme oder APIs und sind ein wichtiger Bestandteil automatisierter Workflows.
Typische praktische Beispiele
Fall 1: Die 5 Prozesse finden, die die meiste CPU verbrauchen
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU
Fall 2: Nach Dienststatus zählen
Get-Service | Group-Object Status | Select-Object Name, Count
Zusammenfassung und Empfehlungen
Die objektorientierten Funktionen von PowerShell machen Kommandozeilenoperationen stärker mit der Programmierdenkweise vereinbar. Durch Objekteigenschaften und -methoden können Benutzer präziser auf Systemressourcen zugreifen und leistungsfähigere und zuverlässigere Automatisierungsskripte erstellen.
Anfängern wird empfohlen, ihre Fähigkeiten in den folgenden Bereichen zu festigen:
- Häufiger verwenden:
Get-MemberObjektstruktur erkunden - Beherrschen lernen
Where-ObjectundSelect-Objectusage - Versuchen Sie,
Group-Object、Sort-Objectum Daten zu verarbeiten - Versuchen Sie, Befehlsergebnisse in CSV- oder JSON-Dateien zu exportieren