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% 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.
.Parent
ist eigentlich ein System.IO.DirectoryInfo
-Objekt. Ich verwende PowerShell 3.0-Punktnotation, um die name
von parent
Das gleiche Ergebnis kann durch Verketten der Aufrufe select
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.
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.
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 }
Tags und Links powershell pipeline powershell-v4.0