Oft benötigen Sie beim Schreiben von PowerShell-Skripten eine Möglichkeit, eine Reihe von Elementen zu speichern. Ein gebräuchlicher Weg, dies zu erreichen, ist ein Array oder ein bestimmter Typ, der als ArrayList bekannt ist. Aber was ist überhaupt ein Array? Ein Array ist eine Datenstruktur, die eine Sammlung von Elementen speichern soll. Dies kann sowohl gleiche als auch verschiedene Arten von Gegenständen umfassen.
Arrays werden in vielen verschiedenen Programmiersprachen verwendet und PowerShell ist nicht anders. 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 einige Best Practices bei der Anwendung mit PowerShell.
Inhaltsverzeichnis
Voraussetzungen / Anforderungen
Da Sie nur mit der PowerShell-Sprache selbst arbeiten, gibt es keine Umgebungsvoraussetzungen. Sie müssen nur einen Windows-PC mit PowerShell haben. Genauer gesagt:
- Windows PowerShell 3 oder neuer
- .NET Framework 4.5 oder höher
Möchten Sie weitere Tipps wie diese?, Schauen Sie sich meinen persönlichen PowerShell-Blog an: https://nkasco.com/FriendsOfATA
Erstellen von Arrays mit PowerShell
Es gibt viele verschiedene Möglichkeiten, Arrays mit PowerShell zu erstellen. Nehmen wir an, Sie haben eine Liste von Namen, die Sie irgendwie verarbeiten müssen, wie unten gezeigt.
JohnSusieJimJohnnyCarrie
Arrays über kommagetrennte Elemente erstellen
Am einfachsten können Sie ein Array erstellen, indem Sie einer Variablen wie unten gezeigt bekannte, kommagetrennte Eingaben zuweisen.,
$BasicArray = "John", "Susie", "Jim", "Johnny", "Carrie"
Wenn Sie die Methode GetType()
ausführen, die für alle Objekte in PowerShell verfügbar ist, sehen Sie, dass Sie erfolgreich ein Array erstellt haben, wie durch die unten gezeigte Eigenschaft .
PS51> $BasicArray.GetType()IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object System.Array
Mit dem Unterausdruckoperator
können Sie auch Arrays in PowerShell über einen Unterausdruckoperator erstellen. Dieses Konzept wird häufig verwendet, wenn Sie nicht wissen, wie viele Elemente zu Ihrem Array hinzugefügt werden. Das Ergebnis kann beim Erstellen Null oder viele Elemente enthalten.,
Hinweis unten wurde ein Array mit dem Namen $MyArray
mit null Elementen erstellt.
#Create an empty array with the sub-expression operatorPS51> $MyArray = @()PS51> $MyArray.count0
Mit dem Bereichsoperator
Arrays werden nicht nur zum Speichern von Zeichenfolgen wie oben gezeigt verbannt. Sie können auch Arrays mit anderen Objekttypen wie Ganzzahlen erstellen.
Wenn Sie ein Array von Ganzzahlen in sequentieller Reihenfolge benötigen, können Sie eine Verknüpfung verwenden und den Operator range ..
verwenden. Unten sehen Sie, dass ein Array mit den ganzen Zahlen 2 bis 5 mit einer einzigen Codezeile erstellt wurde.,
PS51> $NumberedArray = 2..5PS51> $NumberedArray2345
Das Erstellen von PowerShell-ArrayList-Sammlungen
Mit einer PowerShell-ArrayList können Sie auch eine Liste von Elementen mit PowerShell speichern. Die ArrayList-Klasse ist Teil des Systems.Collections Namespace innerhalb von. NET. Indem Sie ein neues Objekt dieses Typs erstellen, können Sie Objekte in einer ArrayList speichern.
Unten sehen Sie, dass Sie ein ArrayList-Objekt explizit mit dem Cmdlet New-Object
erstellen oder ein Standardarray in ein ArrayList-Objekt umwandeln müssen.,
Beachten Sie, dass in diesem Fall die ein Objekt ist, während die obigen Beispiele Basistypen von Arrays enthalten, die eine Vererbung von der Objektklasse aufweisen. Letztendlich bietet PowerShell Zugriff auf das.NET-System.
Hinzufügen von Elementen zu einem Array
Beim Erstellen eines Arrays können Sie entweder alle Elemente zum Erstellungszeitpunkt definieren oder ad hoc hinzufügen.
Um Elemente zu einer vorhandenen Sammlung hinzuzufügen, können Sie den Operator +=
oder die Methode Add
. Aber wissen Sie, dass es große Unterschiede gibt, wie sie funktionieren.,
Wenn Sie ein Standardarray mit @()
erstellen, verwenden Sie den Operator +=
aber um Elemente zu einer ArrayList hinzuzufügen, verwenden Sie die Methode Add
. Diese Methoden unterscheiden sich dadurch, dass der Operator +=
das vorhandene Array tatsächlich zerstört und ein neues mit dem neuen Element erstellt.
Um zu demonstrieren, sehen Sie unten, dass Sie auf die IsFixedSize
– Eigenschaft verweisen können, damit ein Array oder eine ArrayList weiß, welche unveränderlich ist und welche nicht.,
PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse
Da ein Basisarray eine Sammlung 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. Nachfolgend sehen Sie einige Beispiele, in denen Sie einem Array erfolgreich Elemente hinzufügen können.
#Does NOT work$BasicArray.Add("Nate")#Works$BasicArray += "Nate"$MyArrayList.Add("Nate")$MyArrayList += "Nate"
Elemente aus einem Array entfernen
Nachdem Sie nun ein besseres Verständnis dafür haben, wie Elemente zu einem Array hinzugefügt werden, lassen Sie uns einige Möglichkeiten behandeln, wie Sie Elemente aus einem Array entfernen können.,
Da ein Basisarray festgelegt ist, können Sie keine Elemente daraus entfernen. Stattdessen müssen Sie ein völlig neues Array erstellen. Sie können beispielsweise ein einzelnes Element aus einem Array entfernen, indem Sie eine bedingte Anweisung erstellen, die nur mit den Elementen übereinstimmt, die Sie einschließen möchten. Ein Beispiel ist unten gezeigt.
$NewBasicArray = $BasicArray -ne "Nate"
Da eine ArrayList nicht festgelegt ist, können Sie Elemente mit der Methode Remove()
entfernen. Dies ist ein Szenario, in dem die Verwendung einer ArrayList von Vorteil sein kann, wenn Sie häufig Elemente hinzufügen/entfernen möchten.,
$MyArrayList.Remove("Nate")
Abrufen bestimmter Elemente aus einem Array oder ArrayList
Um bestimmte Elemente aus einem Array oder ArrayList abzurufen, können Sie viele 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.
PS51> $BasicArrayJohnSusieJimJohnnyCarrie
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 wie unten gezeigt in Klammern an.,
PS51> $BasicArrayJohn
Umgekehrt können Sie Indizes auch rückwärts referenzieren, indem Sie einen Bindestrich (negativer Indikator) verwenden, um die letzte X-Anzahl von Elementen aus dem Array aufzurufen. Eine übliche Methode, um das letzte Element in einem Array zu finden, ist die Verwendung von -1
wie unten gezeigt.
PS51> $BasicArrayCarrie
Der Bereichsoperator, über den Sie oben erfahren haben, kann auch zum Abrufen von Objekten eines Arrays verwendet werden, indem dieselbe Methode zum Aufrufen der Elemente verwendet wird. Angenommen, Sie möchten die ersten vier Namen im Array $BasicArray
abrufen.,
Sie können unten sehen, dass Sie einen Bereich von Indizes 0-3 angeben können, der die ersten vier Elemente zurückgibt.
PS51> $BasicArrayJohnSusieJimJohnny
Arrays mit PowerShell optimieren
Nachdem Sie nun eine gute Grundlage zum Erstellen und Bearbeiten von Arrays haben, welche sollten Sie verwenden? Um dies zu beantworten, gehen wir einige Beispiele mit dem Cmdlet Measure-Command
durch. Mit dem Cmdlet Measure-Command
verstehen Sie besser, wie lange Befehle zum Verarbeiten von Elementen dauern, wenn sie an die Pipeline übergeben werden.,
Wenn Sie eine kleine Sammlung von Objekten haben, werden Sie wahrscheinlich keinen großen Unterschied bei der Manipulation Ihrer Arrays feststellen. Wenn Sie jedoch eine große Sammlung von Objekten haben, ist es wichtig, die Unterschiede zu verstehen, um optimale Ergebnisse zu erzielen.
Wenden wir das an, was Sie gerade im vorherigen Abschnitt über den Unterschied zwischen +=
gelernt haben, und verwenden Sie die – Methode mit einer Schleife von 50.000 Elementen.
erstellen Sie Zunächst ein leeres array und eine leere ArrayList-wie unten gezeigt.,
PS51> $MyArray = @()PS51> $MyArrayList = @()
Füllen Sie als nächstes 50.000 Elemente in jeder Sammlung mit dem Bereichsoperator und einer foreach-Schleife aus, wie unten gezeigt.
@(0..50000).foreach({$MyArray += $_})@(0..50000).foreach({$MyArrayList.Add($_)})
Wickeln Sie Ihre Befehle schließlich in einen Ausdruck ein und übergeben Sie diesen Ausdruck an das Cmdlet Measure-Command
. Durch Ausführen des Ausdrucks mit Measure-Command
können Sie sehen, wie lange die Ausführung jedes Prozesses tatsächlich dauert.
Denken Sie daran, dass
+=
, wie Sie zuvor gelernt haben, tatsächlich ein neues Array erstellt, anstatt es an ein festes anzuhängen.,
Das Ergebnis? Fast 60 Sekunden gegenüber 139 Millisekunden!
Wie Sie sehen, ist es viel schneller, eine ArrayList für große Sammlungen zu nutzen, als ein Array fester Größe zu verwenden.
Dies ist zwar ein grundlegendes Beispiel, betont jedoch, wie wichtig es ist, zu verstehen, was Ihr Code während der Verarbeitung tut. Wenn es nicht richtig verstanden wird, kann es zu einer schlechten Benutzererfahrung führen.,
Wenn Sie ein vorhandenes Skript haben, das von der Verwendung einer ArrayList anstelle eines Arrays profitieren könnte, wäre dies eine fantastische Gelegenheit, eine Verbesserung über Nacht zu erzielen!
Weiterlesen
- Arrays mit PowerShell vergleichen
- So erstellen Sie Arrays für die Leistung in PowerShell (MCPmag)
Möchten Sie weitere Tipps wie diese? Schauen Sie sich meinen persönlichen PowerShell-Blog an: https://nkasco.com/FriendsOfATA.