Ist in PowerShell Folgendes möglich: "Select-Object Property.SubProperty"?

8

Das Szenario: Ich verwende Select-Object, um auf Eigenschaften eines Piped-Objekts zuzugreifen, und eine dieser Eigenschaften ist selbst ein Objekt. Nennen wir es PropertyObject. Ich möchte auf eine Eigenschaft dieses PropertyObject zugreifen, sagen wir Property1. Gibt es eine nette und saubere Möglichkeit, auf Property1 zuzugreifen, etwa wie folgt:

%Vor%

Während des Experimentierens kann ich es nur zum Laufen bringen, wenn ich etwas mache wie:

%Vor%

und wenn ich es mit einem anständigen Spaltennamen anzeigen möchte, wird es noch unordentlicher:

%Vor%

Wenn man bedenkt, wie sauber und prägnant Powershell im Allgemeinen ist, kann ich nicht umhin zu denken, dass ich etwas vermisse und es sollte eine sauberere Möglichkeit geben, auf eine Eigenschaft einer Eigenschaft zuzugreifen. Gibt es?

BEARBEITEN: Wie von Matt verlangt, hier ist das konkrete Beispiel:

Ich lese eine XML-Datei, Books3.xml:

%Vor%

Code zum Laden von XML in XmlDocument:

%Vor%

Versuch, Details für jedes Buch zu lesen:

%Vor%

Ergebnis:

%Vor%     
Simon Tewsi 12.04.2015, 22:44
quelle

3 Antworten

5

Es wäre einfacher, wenn Sie etwas wirklich Wiederholbares für uns zum Testen hätten, aber wir können das mit Get-Item s return vortäuschen.

%Vor%

.Parent ist eigentlich ein System.IO.DirectoryInfo -Objekt. Ich verwende PowerShell 3.0-Punktnotation, um die name von parent

zu erhalten

Das gleiche Ergebnis kann durch Verketten der Aufrufe select

erhalten werden %Vor%

Dies würde natürlich in PowerShell 2.0 funktionieren, ist aber keine knappe und die 3.0-Version.

Frage posten Bearbeiten

Ich bin mir nicht sicher, auf was Sie hoffen. Was Sie haben, funktioniert beim Extrahieren von Untereigenschaften wie Sie es haben. Ich kann nur einen alternativen Ansatz anbieten, der intuitiver und freundlicher ist, aber das Ergebnis ist das gleiche.

%Vor%

Natürlich müssen Sie select noch verwenden, um Ihre Ausgabe auf die Eigenschaften zu beschränken, die Sie benötigen, aber es ist eine andere Option.

    
Matt 12.04.2015, 23:24
quelle
14

Sie können berechnete Eigenschaften verwenden. Eine kurze Form würde dies ermöglichen:

%Vor%

Wenn die Eigenschaftsnamen wichtig sind, müssen Sie sie hinzufügen.

%Vor%

Wobei N eine Abkürzung für den Namen und E eine Abkürzung für den Ausdruck ist.

    
khaledh 04.01.2016 19:28
quelle
0

Ich war auch auf der Suche nach einer Auswahl der Untereigenschaft eines Objekts. In meinem Fall war es, um die Zonendaten eines DNS-Servers zu exportieren. Ich teile den Mut zu dem, was ich benutzt habe, um mein Ziel zu erreichen und dieser Beitrag hier half!

Um das zu tun, wonach Sie gesucht haben, versuchen Sie, Ihren Code wie folgt zu ändern:

%Vor%

Basierend auf der Tabellenausgabe sollte das obige funktionieren. Es hat für mich funktioniert, was du unten sehen wirst.

Dieses Skript funktionierte gut für das, was ich brauchte und ist eine Mischung aus verschiedenen Ideen. Hoffentlich funktioniert es für jemand anderen.

%Vor%

Der gelbe Vordergrund ist nützlich, wenn Sie die Ausgabe vor dem Export betrachten. Setze einfach } direkt nach HostName und vor | Export-Csv wie folgt ein: ... Sort RecordType, HostName }

    
Shad 15.12.2016 23:01
quelle