Überblick über die Windows PowerShell-Pipeline und deren Ausgabe

Abgeschlossen

PowerShell kann Befehle in einer Pipeline ausführen, bei der es sich um eine Kette mit mindestens einem Befehl handelt, in der die Ausgabe eines Befehls als Eingabe an den nächsten Befehl übergeben werden kann. In Windows PowerShell wird jeder Befehl in der Pipeline von links nach rechts ausgeführt. Bei mehreren Befehlen werden jeder Befehl und seine Parameter durch ein Als Pipe (|) bezeichnetes Zeichen vom nächsten Befehl getrennt. Bestimmte Regeln geben vor, wie die Ausgabe von einem Befehl an den nächsten übergeben wird. In diesem Modul erfahren Sie mehr über diese Regeln.

Wenn Sie mit Windows PowerShell in der Konsolenhostanwendung interagieren, sollten Sie sich jede Befehlszeile als einzelne Pipeline vorstellen. Sie geben einen Befehl oder eine Reihe von Befehlen ein und drücken dann die EINGABETASTE, um die Pipeline auszuführen. Die Ausgabe des letzten Befehls in der Pipeline wird auf Ihrem Bildschirm angezeigt. Dieser Ausgabe folgt eine weitere Shell-Eingabeaufforderung, an der Sie Befehle in eine neue Pipeline eingeben können.

Hinweis

Sie können eine logische Befehlszeile über mehrere physische Zeilen in der Konsole eingeben. Geben Sie beispielsweise "Get-Service" ein, und drücken Sie dann die EINGABETASTE. Windows PowerShell wechselt in einen erweiterten Eingabeaufforderungsmodus, der durch zwei aufeinander folgenden Größer-als-Zeichen (>>) angezeigt wird. Dies ermöglicht Ihnen, die Befehlszeile zu vervollständigen. Wählen Sie STRG+C aus, um den Befehl zu beenden und zur Windows PowerShell-Eingabeaufforderung zurückzukehren.

Zuvor haben Sie mehr über allgemeine Aktionen oder Verben erfahren, die Windows PowerShell-Befehlen zugeordnet sind. Wenn Sie mehrere Befehle als Teil einer einzelnen Pipeline ausführen, bemerken Sie am häufigsten die Verben "Get and Set ", die in Kombination verwendet werden. Sie verwenden die Ausgabe eines Get-*- Befehls als Eingabe für einen Set-*- Befehl. Sie verwenden diese Befehle häufig in Kombination mit einem Filterbefehl, z. B. "Wo " oder "Auswählen". In diesem Fall wird die Ausgabe von "Get-*" nach dem Befehl "Wo " oder "Auswählen " gefiltert, bevor sie an den Befehl "Set-*" weitergeleitet werden.

Hinweis

Der Befehl "Where " ist ein Alias für Where-Object, und der Befehl "Auswählen " ist ein Alias für Select-Object. In Lektion 3, „Filtern von Objekten aus der Pipeline“ wird das Filtern ausführlicher erläutert.

Sie lernen, das Konzept von PowerShell-Objekten und -Pipelines zu verstehen, indem sie mit realen Elementen verglichen werden. Wenn wir zum Beispiel ein Auto als Objekt betrachten, können wir Merkmale des Autos wie Motor, Farbe, Größe, Typ, Marke und Modell beschreiben. In PowerShell würden diese Merkmale als Eigenschaften bezeichnet. Eigenschaften des Objekts könnten wiederum selbst Objekte sein. Beispielsweise ist die Eigenschaft „Motor“ gleichzeitig auch ein Objekt, das wiederum Attribute wie Kolben, Zündkerze, Kurbelwelle usw. aufweist.

Objekte weisen Aktionen auf, die Aktivitäten wie dem Öffnen oder Schließen von Türen, dem Schalten, dem Beschleunigen und dem Bremsen entsprechen. In PowerShell werden diese Aktionen als Methoden bezeichnet.

Pipelines ermöglichen es uns, die von einem Befehl erstellte Ausgabe zu übernehmen und dieses Objekt in die Eingabe eines anderen Befehls zu übergeben. Damit dies einfacher zu verstehen ist, können wir Befehle mit Fabriken vergleichen, wobei jede Fabrik Materialien erhält und in etwas anderes verarbeitet.

Pipelineausgabe

PowerShell-Befehle generieren keinen Text als Ausgabe. Stattdessen generieren sie Objekte. Objekt ist ein generisches Wort, das eine In-Memory-Datenstruktur beschreibt.

Sie können sich die Befehlsausgabe als etwas vorstellen, das einer Datenbanktabelle oder einem Arbeitsblatt ähnelt. In der PowerShell-Terminologie setzt sich die Tabelle oder Kalkulationstabelle aus einer Sammlung von Objekten oder einfach nur einer Sammlung zusammen. Jede Zeile ist ein einzelnes Objekt, und jede Spalte ist eine Eigenschaft dieses Objekts, d. h. Informationen zum Objekt. Wenn Sie beispielsweise den Befehl "Get-Service " ausführen, wird eine Auflistung von Dienstobjekten zurückgegeben. Jedes Objekt verfügt über Eigenschaften mit Namen wie Name, DisplayName und Status.

Durch die Verwendung von Objekten unterscheidet sich PowerShell von anderen Befehlszeilenshells, in denen die Befehle in erster Linie Text generieren. Angenommen, Sie möchten in einer textbasierten Shell eine Liste aller Dienste abrufen, die gestartet wurden. Sie könnten einen Befehl ausführen, um eine Textliste der Dienste zu erstellen, mit einer anderen Zeile für jeden Dienst. Jede Zeile kann den Namen eines Diensts und einige Eigenschaften des Diensts enthalten, wobei die einzelnen Eigenschaften durch Kommas oder andere Zeichen voneinander getrennt sind. Um einen bestimmten Eigenschaftswert abzurufen, müssten Sie die Textausgabe an einen anderen Befehl senden, der den Text verarbeitet, um den jeweils benötigten Wert herauszuziehen. Dieser Befehl würde erstellt, um das spezifische Textformat zu verstehen, das mit dem ersten Befehl erstellt wurde. Wenn sich die Ausgabe des ersten Befehls oder die Position der Statusinformationen ändert, müssen Sie den zweiten Befehl bearbeiten, um die neuen Positionsinformationen zu erhalten. Textbasierte Shells erfordern erhebliche Textanalysefähigkeiten. Dies macht Skriptsprachen wie Perl beliebt, da sie starke Textanalyse- und Textbearbeitungsfeatures bieten.

In PowerShell weisen Sie das Cmdlet an, die Sammlung von Dienstobjekten zu erstellen und dann nur die Name-Eigenschaft anzuzeigen. Die Struktur der Objekte im Arbeitsspeicher ermöglicht PowerShell, die Informationen für Sie zu finden. Auf diese Weise brauchen Sie sich nicht um die genaue Form der Befehlsausgabe zu kümmern.

Diese Funktionalität ermöglicht es dem Abrufen | Setzen-Muster zu funktionieren. Da es sich bei der Ausgabe eines Get-*- Befehls um ein Objekt handelt, kann PowerShell die Eigenschaften finden, die von einem Set-*- Befehl benötigt werden, damit er funktioniert, ohne sie explizit angeben zu müssen.