Oftentimes, wenn Sie PowerShell-Skripte schreiben, benötigen Sie eine Möglichkeit, eine Gruppe von Elementen zu speichern. Eine häufige Methode, dies zu erreichen, ist die Verwendung eines Arrays oder eines spezifischen Typs, der als ArrayList bezeichnet wird. Aber was ist überhaupt ein Array? Ein Array ist eine Datenstruktur, die entwickelt wurde, um eine Sammlung von Elementen zu speichern. Dies kann sowohl gleiche als auch unterschiedliche Arten von Elementen umfassen.
Arrays werden in vielen verschiedenen Programmiersprachen verwendet, und PowerShell macht da keine Ausnahme. Es gibt viele Möglichkeiten, Arrays zu erstellen, zu manipulieren und zu optimieren. In diesem Artikel erfahren Sie mehr über ArrayLists, Arrays und Collections sowie bewährte Methoden bei ihrer Anwendung mit PowerShell.
Voraussetzungen/Anforderungen
Da Sie nur mit der PowerShell-Sprache selbst arbeiten, gibt es keine Umgebungsanforderungen. Sie benötigen lediglich einen Windows-PC mit PowerShell. Genauer gesagt:
- Windows PowerShell 3 oder höher
- .NET Framework 4.5 oder höher
Möchten Sie mehr Tipps wie diesen erhalten? Besuchen Sie meinen persönlichen PowerShell-Blog unter: https://nkasco.com/FriendsOfATA
Arrays erstellen mit PowerShell
Es gibt viele verschiedene Möglichkeiten, Arrays mit PowerShell zu erstellen. Nehmen wir an, Sie haben eine Liste von Namen, die Sie auf irgendeine Weise verarbeiten müssen, wie unten gezeigt.
Arrays über kommagetrennte Elemente erstellen
Die einfachste Möglichkeit, ein Array zu erstellen, besteht darin, bekannte Eingaben kommagetrennt einer Variablen zuzuweisen, wie unten gezeigt.
Wenn Sie die GetType()
-Methode verwenden, die für alle Objekte in PowerShell verfügbar ist, sehen Sie, dass Sie erfolgreich ein Array erstellt haben, wie durch die BaseType
-Eigenschaft unten angezeigt wird.
Durch Verwendung des Sub-Ausdrucksoperators
Sie können auch Arrays in PowerShell mit dem Sub-Ausdrucksoperator erstellen. Dieses Konzept wird häufig verwendet, wenn Sie nicht wissen, wie viele Elemente zu Ihrem Array hinzugefügt werden. Das Ergebnis kann null oder viele Elemente enthalten, wenn es erstellt wird.
Beachten Sie unten, dass ein Array namens $MyArray
mit null Elementen erstellt wurde.
Verwendung des Bereichsoperators
Arrays sind nicht nur auf das Speichern von Zeichenfolgen beschränkt, wie oben gezeigt. Sie können auch Arrays mit anderen Objekttypen wie Ganzzahlen erstellen.
Wenn Sie ein Array von Ganzzahlen in aufsteigender Reihenfolge benötigen, können Sie eine Abkürzung verwenden und den Bereichsoperator ..
nutzen. Unten sehen Sie ein Array, das mit den Ganzzahlen 2 bis 5 mit nur einer Codezeile erstellt wurde.
Erstellen von PowerShell ArrayList-Sammlungen
Die Verwendung einer PowerShell ArrayList ist ebenfalls eine Möglichkeit, eine Liste von Elementen mit PowerShell zu speichern. Die ArrayList-Klasse gehört zum System.Collections-Namespace in .NET. Durch das Erstellen eines neuen Objekts dieses Typs können Sie dann Objekte in einer ArrayList speichern.
Unten sehen Sie, dass Sie explizit ein ArrayList-Objekt erstellen müssen, indem Sie das New-Object
-Cmdlet verwenden oder ein Standardarray in ein ArrayList-Objekt umwandeln.
Beachten Sie, dass in diesem Fall der BaseType
ein Objekt ist, während die obigen Beispiele Arrays als BaseType haben, die von der Klasse Object erben. Letztendlich bietet PowerShell Zugriff auf das .NET-Typsystem.
Hinzufügen von Elementen zu einem Array
Beim Erstellen eines Arrays können Sie entweder alle Elemente zur Erstellungszeit definieren oder sie nach Bedarf hinzufügen.
Um Elemente zu einer vorhandenen Sammlung hinzuzufügen, können Sie den +=
-Operator oder die Add
-Methode verwenden. Beachten Sie jedoch, dass es wesentliche Unterschiede in ihrer Funktionsweise gibt.
Wenn Sie ein Standardarray mit @()
erstellen, verwenden Sie den +=
-Operator. Um jedoch Elemente zu einem ArrayList hinzuzufügen, verwenden Sie die Add
-Methode. Diese Methoden unterscheiden sich darin, dass der +=
-Operator das vorhandene Array tatsächlich zerstört und ein neues Array mit dem neuen Element erstellt.
Um dies zu demonstrieren, können Sie unten die IsFixedSize
-Eigenschaft für ein Array oder ArrayList überprüfen, um zu erfahren, welches unveränderlich ist und welches nicht.
Da ein einfaches Array eine Sammlung mit fester Größe ist, können Sie es nicht ändern.
Der Versuch, die Add()
-Methode mit einem Array mit fester Größe zu verwenden, führt aufgrund der festen Größe zu einem Fehler. Im Folgenden finden Sie einige Beispiele, bei denen Sie erfolgreich Elemente zu einem Array hinzufügen können.
Entfernen von Elementen aus einem Array
Jetzt, da Sie ein besseres Verständnis dafür haben, wie man Elemente zu einem Array hinzufügt, wollen wir einige Möglichkeiten betrachten, wie Sie Elemente aus einem Array entfernen können.
Da ein grundlegendes Array fest ist, können Sie keine Elemente daraus entfernen. Stattdessen müssen Sie ein völlig neues Array erstellen. Zum Beispiel können Sie ein einzelnes Element aus einem Array entfernen, indem Sie eine bedingte Anweisung erstellen, die nur die Elemente auswählt, die Sie behalten möchten. Ein Beispiel wird unten gezeigt.
Da eine ArrayList nicht fest ist, können Sie Elemente mithilfe der Remove()
-Methode daraus entfernen. Dies ist ein Szenario, in dem Ihnen die Verwendung einer ArrayList zugutekommen kann, wenn Sie häufig Elemente hinzufügen/entfernen möchten.
Abrufen bestimmter Elemente aus einem Array oder einer ArrayList
Um bestimmte Elemente aus einem Array oder einer ArrayList abzurufen, können Sie verschiedene Methoden verwenden. Ähnlich wie bei anderen Objekten in PowerShell können Sie auf alle Elemente eines Arrays zugreifen, indem Sie einfach das Objekt aufrufen.
Vielleicht müssen Sie nur das erste Element abrufen. Arrays haben immer einen Ursprung von 0, der das erste Element des Arrays darstellt. Um das erste Element eines Arrays abzurufen, geben Sie die Indexnummer in eckigen Klammern an, wie unten gezeigt.
Umgekehrt können Sie auch auf Indizes rückwärts verweisen, indem Sie einen Bindestrich (negativen Indikator) verwenden, um die letzten X Elemente des Arrays aufzurufen. Eine häufige Methode, um das letzte Element in einem Array zu finden, ist die Verwendung von -1
wie unten gezeigt.
Der oben erwähnte Bereichsoperator kann auch verwendet werden, um Objekte eines Arrays abzurufen, indem Sie dieselbe Methode zum Aufrufen der Elemente verwenden. Angenommen, Sie möchten die ersten vier Namen im Array $BasicArray
abrufen.
Wie unten gezeigt, können Sie einen Bereich von Indizes 0-3 angeben, der die ersten vier Elemente zurückgibt.
Optimierung von Arrays mit PowerShell
Jetzt, da Sie eine solide Grundlage dafür haben, wie man Arrays erstellt und manipuliert, welche Methode sollten Sie verwenden? Um das zu beantworten, schauen wir uns einige Beispiele mit dem Befehl Measure-Command
an. Mit dem Befehl Measure-Command
werden Sie besser verstehen, wie lange Befehle benötigen, um Elemente zu verarbeiten, während sie durch die Pipeline weitergegeben werden.
Im Allgemeinen werden Sie bei einer kleinen Sammlung von Objekten wahrscheinlich keinen großen Unterschied bemerken, wie Sie Ihre Arrays manipulieren. Wenn Sie jedoch eine große Sammlung von Objekten haben, ist es wichtig, die Unterschiede zu verstehen, um optimale Ergebnisse zu erzielen.
Wenden wir nun das an, was Sie gerade im vorherigen Abschnitt gelernt haben, über den Unterschied zwischen +=
und der Verwendung der Add()
-Methode mit einer Schleife von 50.000 Elementen.
Erstellen Sie zunächst ein leeres Array und eine leere ArrayList wie unten gezeigt.
Füllen Sie dann jede Sammlung mit 50.000 Elementen mithilfe des Bereichsoperators und einer foreach-Schleife wie unten gezeigt.
Schließlich umgeben Sie Ihre Befehle mit einem Ausdruck und übergeben diesen Ausdruck dem Befehl Measure-Command
. Durch Ausführen des Ausdrucks mit Measure-Command
können Sie sehen, wie lange jeder Vorgang tatsächlich dauert.
Bedenken Sie, dass, wie Sie zuvor gelernt haben,
+=
tatsächlich ein neues Array erstellt anstatt an ein festes anzufügen.
Das Ergebnis? Fast 60 Sekunden im Vergleich zu 139 Millisekunden!
Wie Sie sehen können, ist es wesentlich schneller, eine ArrayList für große Sammlungen zu verwenden, anstatt ein Array mit fester Größe zu nutzen.
Obwohl dies ein einfaches Beispiel ist, betont es die Bedeutung des Verständnisses dessen, was Ihr Code während der Verarbeitung tut. Wenn es nicht richtig verstanden wird, kann dies zu einer schlechten Benutzererfahrung führen.
Wenn Sie bereits vorhandenes Skript haben, das von der Verwendung einer ArrayList anstelle eines Arrays profitieren könnte, bietet sich hier eine fantastische Möglichkeit, eine sofortige Verbesserung zu erzielen!
Weiterführende Informationen
Möchten Sie weitere Tipps wie diesen? Schauen Sie sich meinen persönlichen PowerShell-Blog unter https://nkasco.com/FriendsOfATA an.