Der PowerShell Select-Object-Cmdlet ermöglicht es Ihnen, nahtlos Objekte und Eigenschaften aus einer Eingabegruppe von Objekten auszuwählen. Aber manchmal müssen Sie einfach mehr wissen. Der ExpandProperty ist ein Schalter für Select-Object, der Details zu einer bestimmten Eigenschaft erweitert.
Entdecken Sie die Leistung des PowerShell Expand Property (-ExpandProperty
)-Schalters in diesem beispielgeführten Tutorial.
Voraussetzungen
Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, benötigen Sie lediglich eine Windows-Maschine mit PowerShell 5.1 und höher. Dieser Artikel verwendet eine Windows 10-Maschine mit PowerShell 5.1.
Extrahieren von Werten aus Eigenschaftsobjekten mit PowerShell Expand Property
Melden Sie sich an Ihrer Windows-Maschine an und starten Sie ein PowerShell-Terminal. In diesem Abschnitt lernen Sie das Select-Object
-Cmdlet und seinen ExpandProperty
-Schalter kennen.
1. Führen Sie das Get-Service-Cmdlet aus, um eine Liste aller Dienste auf Ihrem System zu erhalten. Leiten Sie die Ausgabe an das Select-Object-Cmdlet weiter, um nur die Name-Eigenschaft jedes Dienstobjekts auszuwählen und anzuzeigen, wie unten dargestellt.
Sie sollten jetzt eine einzelne Spalte von Objekten sehen, die eine Liste von Namen der Dienste auf Ihrem System repräsentieren, wie im abgeschnittenen Screenshot unten.

2. Führen Sie das Get-Member-Cmdlet am Ende des vorherigen Pipelines aus, um den Typ der Objekte zu bestätigen, die Select-Object zurückgibt, wie unten dargestellt. Die Kenntnis des Objekttyps hilft beim Schreiben von Funktionen oder Cmdlets, um Ihre Pipelines zu erweitern.
Beziehen Sie sich auf den Screenshot unten, und Sie werden feststellen, dass der -Property-Schalter zwar eine Liste von Zeichenfolgen auszugeben scheint, es sich jedoch um die ausgewählte Liste von System.ServiceProcess.ServiceController-Objekten handelt.

3. Ersetzen Sie das Get-Member-Cmdlet durch mkdir, um automatisch für jeden Dienst einen Ordner zu erstellen. Der -first 5-Schalter begrenzt die Anzahl der zurückzugebenden Objekte. Die mkdir-Funktion erstellt ihrerseits nur fünf Ordner basierend auf den Objekten in der Pipeline.
Sie sollten eine Ausgabe ähnlich dem untenstehenden Screenshot sehen, was einen erfolgreichen Versuch anzeigt.

4. Entfernen Sie die Ordner, indem Sie mkdir durch rmdir wie im folgenden Ausschnitt ersetzen. Schalten Sie den -Verbose-Schalter ein, um detaillierte Ausgaben in Ihrem Terminal anzuzeigen.
Der rmdir-Befehl erwartet Zeichenfolgen und kann die Hashtable-Repräsentation der ServiceController-Objekte nicht verarbeiten. Ihr Versuch sollte mit mehreren Fehlern scheitern, wie im folgenden Screenshot.

Ändern Sie den -Property-Schalter in den -ExpandProperty-Schalter wie im folgenden Ausschnitt. Dadurch können Sie den Wert einer Eigenschaft als Zeichenfolge erhalten, wenn Sie nur eine Zeichenfolge benötigen.
In Kombination mit rmdir sollte Ihr Versuch, die Ordner automatisch zu entfernen, ohne Fehler erfolgreich sein, wie im folgenden Screenshot.

Erstellen eines Satzes ausgewählter Objekte mit bestimmten Eigenschaften
Um die Codeausschnitte in den Abschnitten zu verkürzen, erstellen Sie eine Variable für die ersten 20 Dienste auf Ihrem Computer wie folgt.
Führen Sie den Befehl Get-Service
aus, wählen Sie die ersten 20
Objekte über den Select-Object
-Befehl aus und speichern Sie die Objekte in einer Variablen mit dem Namen $testServices
. Wählen Sie nur die Eigenschaften Name
, Status
und DependentServices
wie folgt aus.
Der PowerShell Expand Property-Schalter kann immer nur eine Eigenschaft gleichzeitig erweitern, im Gegensatz zum Property-Schalter, der mehrere Eigenschaften gleichzeitig auswählen kann.
Führen Sie die Variable mit dem Namen $testServices
aus, um die Struktur ihrer Inhalte anzuzeigen.
Sie sollten eine Tabelle sehen, die die Eigenschaften der von Ihnen ausgewählten Dienste ähnlich wie im folgenden Screenshot anzeigt.

Erweitern einer Sammeleigenschaft mit PowerShell Expand Property
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
Führen Sie das Select-Object
-Cmdlet auf der Variable $testServices
aus und erweitern Sie die Eigenschaft DependentServices
jedes Dienstes.
Da DependentServices
eine Sammeleigenschaft ist, ist die Ausgabe eine Liste der Dienste in allen bevölkerten Sammlungen, wie unten gezeigt. Beachten Sie die Duplikate in der Liste aufgrund der Verknüpfung von Ergebnissen aus den erweiterten DependentServices
.

Kombination von Eigenschaften mit PowerShell Expand Property für kategorisierte Ausgabe
Jetzt haben Sie eine Liste von abhängigen Diensten, aber wie wissen Sie, von welchem Dienst sie abhängen? In diesem Abschnitt lernen Sie, den Schalter -Property
zu verwenden, um eine erweiterte Eigenschaft zu kategorisieren.
Führen Sie den folgenden Befehl aus, um die Eigenschaften DependentServices
nach Name
zu kategorisieren.
Da die abhängigen Dienste bereits eine Name
-Eigenschaft haben, schlägt der Kategorisierungsschritt fehl, wie unten gezeigt.
Der untenstehende Fehler zeigt Ihnen, dass die ursprüngliche Liste der Dienste (in $testServices) bereits eine Name-Eigenschaft hat, die mit einer Name-Eigenschaft in der erweiterten DependentServices-Eigenschaft in Konflikt steht.

Eine Möglichkeit besteht darin, Calculated Properties zu erstellen, um die Bezeichnungseigenschaft wie folgt umzubenennen.
Speichern Sie die vorherige Befehlsausgabe, die zur Spezifizierung einer berechneten Eigenschaft namens „Depends On“ als Bezeichnungseigenschaft in einer Variable namens $depServ modifiziert wurde. „Depends On“ wird den Namenswert für jeden Dienst in $testService enthalten.
Der Eigenschaftsname, Depends on
, wurde in diesem Tutorial willkürlich gewählt und kann durch jeden Ausdruck Ihrer Wahl ersetzt werden.
Geben Sie das Objekt in $depServ
durch Select-Object
weiter, um abhängige Diensteigenschaften Name
, Status
und Depends On
auszuwählen.
Sie können nun erkennen, welche Dienste von den Diensten in $testServices
abhängig sind, wie unten gezeigt.

Kombinieren Sie Format-List mit dem PowerShell Expand Property für mehr Übersichtlichkeit
PowerShell kann die anzuzeigenden Objekteigenschaften einschränken, insbesondere in tabellarischer Ausgabe, und die Ausgabe des Schalters -ExpandProperty
kann dasselbe Problem verursachen. Als Umgehung können Sie die erweiterten Eigenschaften stattdessen in einer Liste anzeigen lassen.
Führen Sie den folgenden Get-Process
-Befehl aus, um alle Module
abzurufen, die der explorer
-Prozess verwendet. Schalten Sie den Schalter -ExpandProperty
ein, um die Eigenschaften der Module anzuzeigen.
Die Ausgabe auf Ihrem Bildschirm sollte der folgenden Abbildung ähneln, automatisch auf drei Eigenschaften beschränkt.

Leiten Sie die Objekte an das Format-List
-Cmdlet weiter, um alle Werte für die Modulobjekte in einer übersichtlicheren Liste anzuzeigen.
Wie unten gezeigt, werden alle Eigenschaften und ihre Werte aufgelistet. Sie können die Daten weiterhin in einer Datei speichern oder sie an ein anderes Cmdlet für weitere Verarbeitung übergeben.

Abschluss
Indem Sie es erfolgreich bis hierhin geschafft haben, haben Sie gesehen, wie Sie von dem PowerShell-Schalter für Eigenschaften erweitern (-ExpandProperty) des Cmdlets Select-Object profitieren können. PowerShell bietet eine Vielzahl nützlicher Cmdlets für viele gängige Aufgaben. Sie können Ihr neues Wissen erweitern, indem Sie lernen, wie Sie Dateien schnell mit PowerShell Cat anzeigen.
Source:
https://adamtheautomator.com/powershell-expand-property/