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、Name
  • MethodStellt 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 dar
  • Statusist 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 definieren
  • NameGeben Sie den neuen Spaltennamen an
  • ExpressionStellen 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:

  1. Häufiger verwenden:Get-MemberObjektstruktur erkunden
  2. Beherrschen lernenWhere-ObjectundSelect-Objectusage
  3. Versuchen Sie,Group-Object、Sort-Objectum Daten zu verarbeiten
  4. Versuchen Sie, Befehlsergebnisse in CSV- oder JSON-Dateien zu exportieren
Weitere Erweiterungen