PowerShell Select-Object einfach erklärt: Ein Leitfaden für Anfänger

PowerShell ist ein leistungsstarkes Werkzeug zur Verwaltung von Daten, liefert jedoch in der Regel gleichzeitig zu viele Informationen. Wie Sie wissen, kann zu viele Informationen überwältigend und schwer zu durchsuchen sein. Aber keine Sorge. Das PowerShell Select-Object Cmdlet wird sich als nützlich erweisen.

In diesem Tutorial lernen Sie die Grundlagen des Select-Object Cmdlets kennen, um Ergebnisse auf verschiedene Arten einzugrenzen oder zu filtern.

Lesen Sie weiter und starten Sie die schmerzfreie Datenverwaltung!

Voraussetzungen

Dieses Tutorial umfasst praktische Demonstrationen. Um mitzumachen, stellen Sie sicher, dass Sie ein System mit PowerShell installiert haben. Dieses Tutorial verwendet Windows 10 mit PowerShell 7, aber jede moderne Version sollte ebenfalls funktionieren.

Was ist das PowerShell Select-Object Cmdlet?

Das Select-Object Cmdlet vereinfacht die Datenverwaltung, indem es Ihnen ermöglicht, bestimmte Eigenschaften aus einem Objekt oder Datensatz auszuwählen. Gleichzeitig können Sie Eigenschaften umbenennen oder basierend auf vorhandenen Eigenschaften berechnete Eigenschaften erstellen.

Die grundlegende Syntax von Select-Object lautet wie folgt, wobei:

Parameter Function
-InputObject Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet.
Property Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas.
Optional Parameters Allows you to refine your selection, such as selecting a certain number of objects or skipping objects.
Select-Object [-InputObject] [Property] [Optional Parameters]

Auswahl von Objekten nach Eigenschaften

Da mehr als eine kurze Einführung erforderlich ist, um Ihrem Wunsch nach Informationen zum Cmdlet Select-Object gerecht zu werden, warum beginnen Sie nicht mit einem seiner häufigen Anwendungsfälle? Starten Sie dieses Tutorial, indem Sie eine bestimmte Eigenschaft von einem Objekt mit dem Cmdlet Select-Object auswählen.

Angenommen, Sie haben eine Liste der auf Ihrem Computer ausgeführten Prozesse, möchten jedoch nur die Namen jedes Prozesses sehen. Durch Angabe der Name-Eigenschaft an das Cmdlet Select-Object wird dies erledigt.

Öffnen Sie PowerShell und führen Sie den folgenden Befehl Get-Process aus, um eine Liste aller Prozesse nur nach Name auszuwählen und anzuzeigen (Select-Object).

Get-Process | Select-Object Name
Selecting objects by property

Neben laufenden Prozessen ermöglicht Ihnen das Cmdlet Select-Object auch die Arbeit mit einer CSV-Datei. Angenommen, Sie haben eine CSV-Datei mit vielen Spalten, benötigen jedoch nur einige davon. Lassen Sie das Cmdlet Select-Object nur die relevanten Spalten auswählen, damit Sie die Daten bearbeiten und analysieren können.

Führen Sie jetzt den folgenden Befehl aus, um mehrere Eigenschaften auszuwählen (\code{Select-Object}): \code{Name} und \code{CPU} (durch Kommas getrennt). Diese Funktion hilft beim Arbeiten mit großen Datensätzen, bei denen Sie nur einige Eigenschaften jedes Objekts benötigen.

Darüber hinaus sortiert dieser Befehl auch die Liste der Objekte (\code{Sort-Object}) in absteigender Reihenfolge mit der Eigenschaft \code{CPU} als Referenz.

Get-Process | Select-Object Name, CPU | Sort-Object -Descending CPU

Unten sehen Sie die aufgelisteten Prozesse, beginnend mit dem ressourcenintensivsten, Google Chrome (falls installiert).

Selecting multiple properties

Erstellen einer berechneten Eigenschaft

Wenn Sie nach Eigenschaften suchen, die Ihren Anforderungen besser entsprechen, sollten Sie die Erstellung einer berechneten Eigenschaft in Betracht ziehen. Warum? Berechnete Eigenschaften ermöglichen es Ihnen, Daten zu manipulieren und zu transformieren, vorhandene Eigenschaften zu kombinieren, mathematische Operationen auszuführen oder Daten auf eine bestimmte Weise zu formatieren.

Um eine berechnete Eigenschaft zu erstellen, müssen Sie einen neuen Eigenschaftsnamen und einen Ausdruck angeben, der definiert, wie der Eigenschaftswert berechnet wird:

Führen Sie den folgenden Befehl aus, um Folgendes durchzuführen:

  • Abrufen einer Liste von laufenden Prozessen (\code{Get-Process}), wobei nur die Eigenschaften \code{Name} und \code{CPU} ausgewählt werden.
  • Erstellen Sie eine neue berechnete Eigenschaft mit dem Namen \texttt{Memory (MB)}, die den Speicherverbrauch jedes Prozesses in Megabyte berechnet. Der Speicherverbrauch wird mit einem \texttt{Ausdruck} berechnet, der die Eigenschaft \texttt{WorkingSet} durch \texttt{1MB} teilt. Jeder gültige PowerShell-Ausdruck funktioniert beim Erstellen einer berechneten Eigenschaft.
  • Druckt alle abgerufenen laufenden Prozesse in absteigender Reihenfolge nach der berechneten \texttt{Memory (MB)}-Eigenschaft.
Get-Process | Select-Object Name, CPU, @{Name="Memory (MB)";Expression={$_.WorkingSet/1MB}} | Sort-Object -Descending "Memory (MB)"
Creating a calculated property

Ausschluss einer bestimmten Eigenschaft

Im wirklichen Leben können die Ergebnisse eines \texttt{Select-Object}-Befehls sensible Informationen wie Benutzernamen und Passwörter enthalten. Wie kann man dieses Risiko vermeiden?

Um zu verhindern, dass sensible Daten im Ausgabefenster angezeigt werden, fügen Sie den Parameter \texttt{-ExcludeProperty} hinzu, um eine bestimmte Eigenschaft aus der Ausgabe auszuschließen.

Führen Sie den folgenden Befehl aus, um die folgenden Aufgaben auszuführen:

  • Abrufen einer Liste aller Dateien und Ordner (Get-ChildItem) im Verzeichnis \texttt{C:\\} rekursiv (-Recurse).
  • Leiten Sie die Ausgabe an das cmdlet Select-Object weiter, um die Eigenschaften Name, Länge und LastWriteTime auszuwählen.
  • Schließen Sie die Eigenschaft FullName von der Ausgabe aus (-ExcludeProperty). Dadurch werden die vollständigen Pfade in der Ausgabe nicht angezeigt, die vertrauliche Informationen enthalten können.
Get-ChildItem -Path C:\ -Recurse | Select-Object Name, Length, LastWriteTime -ExcludeProperty FullName
Excluding a specified property

Überspringen der ersten oder letzten Anzahl von Objekten

Bei der Arbeit mit umfangreichen Datensätzen kann das Auffinden der benötigten Daten wie die Suche nach einem Diamanten in einem Kohlebergwerk sein. Aber warum Zeit damit verschwenden, irrelevante Daten zu durchsuchen?

In PowerShell bietet das cmdlet Select-Object zwei Parameter, mit denen Sie die ersten (-Skip) und letzten (-SkipLast) Anzahl von Objekten in der Ausgabe ausschließen können.

Um zu sehen, wie das Überspringen mehrerer Objekte aus einer Ausgabe funktioniert:

Führen Sie den folgenden Befehl aus, um alle laufenden Prozesse (Get-Process) zu erhalten, aber überspringen Sie die ersten 100 zurückgegebenen Objekte mit -Skip.

Beachten Sie, dass die Anzahl der übersprungenen Objekte auf ganzen Zahlen basiert (positive ganze Zahlen ohne Dezimalstellen), die in diesem Fall 100 sind.

Get-Process | Select-Object -Skip 100
Skipping the first 100 objects

Führen Sie nun den folgenden Befehl aus, um eine Liste der Inhalte des Arbeitsverzeichnisses (Get-ChildItem) zu erhalten, aber überspringen Sie die letzten 100 zurückgegebenen Objekte mit -SkipLast.

Get-ChildItem | Select-Object -SkipLast 100
Skipping the last 100 objects

Auswahl der ersten oder letzten Anzahl von Objekten

Abgesehen davon, dass Sie die ersten und letzten Objekte überspringen können, könnten Sie auch daran interessiert sein, stattdessen die ersten und letzten Objekte auszuwählen. Das Cmdlet Select-Object unterstützt dieses Feature mit den Parametern First und Last, die es Ihnen ermöglichen, alles andere zu überspringen, um Zeit und Ressourcen zu sparen.

Führen Sie den folgenden Befehl aus, um alle Prozesse abzurufen, aber nur die ersten -First 10 zurückgegebenen Objekte auszuwählen.

Get-Process | Select-Object -First 10
Selecting the first 10 objects returned

Führen Sie nun den folgenden Befehl aus, um alle Inhalte des Arbeitsverzeichnisses (Get-ChildItem) abzurufen, aber nur die letzten -Last 10 zurückgegebenen Objekte auszuwählen.

Get-ChildItem | Select-Object -Last 10
Selecting the last 10 objects returned

Auswahl ausschließlich eindeutiger Objekte

Bei der Arbeit mit größeren Datensätzen werden Sie auf Duplikate stoßen, die Sie möglicherweise aus der Ausgabe ausschließen möchten, was üblich ist. Aber das Gute am Cmdlet Select-Object ist, dass Sie Duplikatwerte nicht manuell ausschließen müssen.

Das Anhängen des Parameters -Unique ermöglicht es Ihnen, nur die eindeutigen Objekte aus der Ausgabe auszuwählen, was Ihre Analyse optimiert und die Genauigkeit Ihrer Ergebnisse verbessert.

Führen Sie den folgenden Befehl aus, um auszuwählen (Select-Object) und die ersten -First 2 Objekte zurückzugeben.

"1","1","2","3" | Select-Object -First 2

Unten sehen Sie zwei zurückgegebene Objekte, unabhängig davon, ob eines davon ein Duplikatwert ist.

Selecting and returning objects with duplicate values

Führen Sie abschließend den folgenden Befehl aus, um jeweils nur einen -Unique Wert für jedes der ausgewählten -First 2 Objekte zurückzugeben.

"1","1","2","3" | Select-Object -First 2 -Unique

Dieses Mal sehen Sie nur eines der ersten beiden ausgewählten Objekte zurückgegeben, da das andere nur ein doppelter Wert ist. Wie Sie sehen, beweist diese Ausgabe, dass das `-Unique`-Parameter praktisch ist, um schnell doppelte Objekte in Ihren Daten zu verwerfen.

Selecting unique objects exclusively

Schlussfolgerung

PowerShell neigt dazu, eine Überlastung von Informationen zu erzeugen. Aber in diesem Tutorial haben Sie gelernt, wie das PowerShell-Select-Object-Cmdlet Ihre Daten vereinfacht, um nur die benötigten Informationen anzuzeigen.

Sie haben gesehen, wie verschiedene Parameter es Ihnen ermöglichen, Daten auszuwählen und auszuschließen, insbesondere doppelte Werte aus einer Ausgabe. Mit dem Select-Object-Cmdlet muss das Verwalten großer Datenmengen keine entmutigende Aufgabe sein.

Zu diesem Zeitpunkt können Sie Ihre Ergebnisse schnell verfeinern, um sie besser für Analyse und Fehlerbehebung geeignet zu machen. Aber warum nicht lernen, wie Sie Ihre berechneten Eigenschaften formatieren, um Lesbarkeit und Benutzerfreundlichkeit zu verbessern?

Source:
https://adamtheautomator.com/powershell-select-object/