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.