Magic Quadrant™ für Privileged Access Management 2025: Netwrix zum vierten Jahr in Folge anerkannt. Laden Sie den Bericht herunter.

Plattform
Ressourcen­zentrumBlog
Wie man Powershell-Arrays verwendet

Wie man Powershell-Arrays verwendet

Oct 24, 2023

Einführung

Ein Array ist eine Datenstruktur, die mehr als einen Wert gleichzeitig halten kann. Stellen Sie es sich als eine Sammlung oder Liste von Elementen gleicher oder unterschiedlicher Datentypen vor. Arrays werden in vielen Skript- und Programmiersprachen verwendet, einschließlich Windows PowerShell.

Lassen Sie uns eintauchen, wie man ein array in PowerShell erstellt und verwendet.

Erstellen eines Arrays von Objekten

Standardmäßig ist jedes Element in einem Array ein Objekt, anstatt eines anderen Datentyps wie String oder Integer. Hier ist ein Beispiel dafür, wie man ein Array von Objekten erstellt, indem man explizit Objekte hinzufügt:

      $people = @(

    [PSCustomObject]@{Name='Alice'; Age=30},

    [PSCustomObject]@{Name='Bob'; Age=25}
      

Erstellen eines Arrays mit nur einem Element

Wenn Sie nur einen Wert in eine Variable eintragen, wird PowerShell kein Array erstellen. Um dies zu bestätigen, verwenden wir zwei Skripte und geben deren Datentypen aus.

Zuerst werden wir ein Array in PowerShell mit fünf Elementen erstellen:

      $array = @(1, 2, 3, 4, 5)

$array1.GetType()
      

Jetzt versuchen wir, ein ähnliches Skript zu verwenden, um ein Array mit nur einem Element zu erstellen:

      $array1 = 1

$array1.GetType()
      

Wie Sie aus der untenstehenden Ausgabe ersehen können, hat PowerShell ein Array (System.Array) für das erste Beispiel-Skript erstellt, jedoch nicht für das zweite.

Image

Dieses Verhalten ist besonders besorgniserregend, wenn Sie ein Array erstellen möchten, indem Sie Objekte durch Ausführen eines bestimmten Befehls abrufen, da Sie nicht im Voraus wissen, wie viele Objekte in den Ergebnissen zurückgegeben werden.

Um dieses Problem zu umgehen, können Sie den , (Komma) Operator verwenden. Wenn ein Komma als binärer Operator verwendet wird, dann wird ein normales Array erstellt; wenn es als unärer Operator verwendet wird, hat das Array nur ein Element.

Zum Beispiel, hier ist, wie wir ein Array erhalten können, das aus einem Element besteht:

      $array1 = ,1

$array1.GetType()
      

Wir können die Erstellung des Arrays mit der unten gezeigten Ausgabe bestätigen:

Image

Erstellen eines leeren Arrays

In PowerShell können Sie auch ein Array erstellen — einschließlich eines leeren Arrays — mit dem Operator @. Wenn Sie @() angeben, erhalten Sie ein Array ohne jegliche Objekte. Es ist eine praktische Methode, um Variablen als Arrays zu initialisieren und später Objekte zu Arrays hinzuzufügen, ohne sich um deren Anzahl zu kümmern.

      $array3 = @()

$array3.GetType()
      
Image

Erstellen eines stark typisierten Arrays

Standardmäßig können die Elemente eines Arrays unterschiedliche Datentypen haben. Sie können jedoch auch Arrays erstellen, die nur Werte eines einzigen festgelegten Typs akzeptieren. Der Versuch, einen Wert eines anderen Typs hinzuzufügen, führt zu einem Fehler. Hier erfahren Sie, wie Sie die gängigsten stark typisierten Arrays erstellen:

Ganzzahl:

      [int[]]$intArray = 1, 2, 3
      

Zeichenkette:

      [string[]]$strArray = "one", "two", "three"
      

Datum/Uhrzeit:

[datetime[]]$dateArray = (Get-Date), (Get-Date).AddDays(1)

Erstellen eines mehrdimensionalen Arrays (Matrix)

Durch das Verschachteln von Arrays mit Kommas können Sie eine strukturierte Anordnung von Daten in Zeilen oder Spalten erstellen. Hier erstellen wir eine 3×3-Matrix:

$twoDArray = @(

@(1, 2, 3),

@(4, 5, 6),

@(7, 8, 9)

)

Vergleichen, Gruppieren, Auswählen und Sortieren von Arrays

Weitere nützliche PowerShell-Cmdlets zum Arbeiten mit Arrays sind:

  • Compare-Object — Vergleicht zwei Arrays und gibt die Unterschiede zurück.
  • Group-Object — Gruppiert Array-Elemente basierend auf Eigenschaftswerten.
  • Select-Object — Wählt bestimmte Eigenschaften eines Objekts oder einer Gruppe von Objekten aus und kann auch verwendet werden, um eine spezifische Anzahl von Elementen aus einem Array auszuwählen.
  • Sort-Object — Wird verwendet, um Arrays zu sortieren, die nur einen Datentyp enthalten, wie unten gezeigt:
      $array = @(3, 1, 4, 2)
$sortedArray = $array | Sort-Object
      
Image

Durchlaufen eines Arrays

Um jedes Element in einem Array nacheinander zu bearbeiten, müssen wir eine Schleife mit dem foreach-Operator verwenden. Zum Beispiel, wenn wir ein String-Array deklarieren und die Länge jedes Wortes im Array zählen möchten, sollten wir das folgende Skript ausführen:

      $array8 = @("Earth","Mercury","Venus","Jupiter","Saturn","Mars", "Neptune", "Pluto")
foreach ($array in $array8) {
 "$array = " + $array.length
}
      

Das Ergebnis wird wie folgt aussehen:

Image

Mit einer Pipeline

Die Pipeline wird in PowerShell verwendet, um die Ausgabe eines Befehls als Eingabe für einen anderen zu übergeben. Bei der Arbeit mit Arrays können Sie die Pipeline nutzen, um die Daten im Array zu verarbeiten und zu manipulieren und das Ergebnis einem neuen Array zuzuweisen oder das bestehende zu modifizieren.

Hier werden wir jedes Array-Element mit 2 multiplizieren:

      $numbers = 1,2,3,4,5

$doubled = $numbers | ForEach-Object { $_ * 2 }
      
Image

Zu einem Array hinzufügen

Die Größe eines Arrays in PowerShell ist unveränderlich, sobald es definiert ist. Der Operator += ermöglicht es Ihnen jedoch, ein neues Array zu erstellen, indem Sie Elemente an ein vorhandenes Array anhängen – im Grunde genommen ein neues kombiniertes Array erstellen.

      $array = @(1, 2, 3)
$array += 4
      
Image

Erstellen einer ArrayList

Bei großen Arrays oder häufigen Hinzufügungen kann die Verwendung von += hinsichtlich der Leistung bedenklich sein, da jedes Mal, wenn Sie es verwenden, ein neues Array erstellt wird, die alten Elemente kopiert und das neue Element am Ende hinzugefügt wird. In solchen Fällen möchten Sie vielleicht eine ArrayList verwenden.

Die Größe einer ArrayList ist veränderlich, sodass Sie Elemente hinzufügen oder entfernen können, ohne die gesamte Sammlung neu erstellen zu müssen. Wie ein Standardarray kann eine ArrayList Elemente unterschiedlicher Datentypen enthalten.

Hier ist das Cmdlet zum Erstellen eines ArrayList:

      $array3 = New-Object System.Collections.ArrayList

      

Fordern Sie eine kostenlose Testversion von Netwrix Directory Manager an

Ein Element aus einem Array entfernen

Nun verwenden wir eine ArrayList, um ein Element aus einem Array zu entfernen. Zuerst erstellen wir ein Array.

      $array5 = "one", "two", "three", "four", "five"
$array5.gettype()
      

Nun werden wir es zu einer ArrayList hinzufügen, damit wir es leicht ändern können.

      [System.Collections.ArrayList]$ArrayList1 = $array5

$ArrayList1.GetType()
      

Wir werden dann den Befehl .Remove verwenden.

      $ArrayList1.Remove("three")

      
Image

Leeren eines Arrays

Es gibt keine definierte Methode, um ein Array zu löschen, aber es gibt mehrere Möglichkeiten, den Inhalt eines Arrays zu entfernen (leeren). Eine davon ist, der Variablen $null dem Array zuzuweisen:

      $array7 = $null
$array7
      

Hier ist eine weitere Methode, um ein Array zu leeren:

      $array = @("element1", "element2", "element3")

$array = @()
      

Hier erfahren Sie, wie Sie eine ArrayList leeren:

      $arrayList = New-Object System.Collections.ArrayList
$arrayList.Add("element1")
$arrayList.Add("element2")
$arrayList.Clear()
      

Ein Array drucken

Der einfachste Weg, den Inhalt eines Arrays anzuzeigen, besteht darin, einfach auf die Array-Variable zu verweisen. Das folgende Beispiel zeigt, wie man den Text „Element:“ vor jedem Element im Array einfügt:

Image

Um in eine .txt-Datei zu schreiben, verwenden Sie den Befehl Out-File :

      $var5 | Out-File C:scriptsarray.txt

      

Um in eine .csv-Datei zu exportieren, verwenden Sie den Befehl Export-Csv :

      $var6 | Export-Csv -Path C:scriptsarray.csv

      

Filtern eines Arrays

Wir können das Where-Object-Cmdlet verwenden, um nur die geraden Zahlen aus einem Array abzurufen:

      $numbers = 1,2,3,4,5,6

$evenNumbers = $numbers | Where-Object { $_ % 2 -eq 0 }

$evenNumbers
      
Image

Alternativ können wir die .Where()-Methode verwenden, die keine Pipeline benötigt:

      $numbers = 1,2,3,4,5,6

$evenNumbers = $numbers.Where({ $_ % 2 -eq 0 })

$evenNumbers

      

Überprüfung der Länge eines Arrays

Um die Anzahl der Elemente in einem Array zurückzugeben, verwenden Sie den Parameter .length :

      $array6 = 1,2,3,4,5,6
echo $array6.Length
      
Image

Überprüfen, ob ein Array einen bestimmten Wert enthält

Wenn Sie überprüfen möchten, ob eines der Elemente in einem Array einen bestimmten Wert enthält, verwenden Sie die Methode Contains. Dieser Code zeigt, ob ein Array eine 2 oder eine 12 enthält:

      $array7 = 1,2,5,8,3,4,5
$array7.Contains(2)
$array7.Contains(12)
      
Image

Zugriff auf Elemente über den Array-Index

Wie bei den meisten Programmiersprachen kann jedes einzelne Element in einem PowerShell-Array über einen Index aufgerufen werden. Der Index eines Arrays beginnt bei Null, also ist in einem Array mit drei Elementen das erste Element am Index 0, das zweite am Index 1 und das dritte am Index 2.

Um auf Elemente über den Array-Index zuzugreifen, müssen Sie den Index in eckigen Klammern hinter der Array-Variablen angeben. Unten finden Sie ein Beispiel, das zeigt, wie man ein Array erstellt und das zweite Element anzeigt:

      $colors = "Red", "Green", "Blue", "Yellow"

$secondColor = $colors[1]

Write-Output $secondColor
      
Image

Sie können auf Elemente vom Ende eines Arrays zugreifen, indem Sie einen negativen Index verwenden. -1 bezieht sich auf das letzte Element, -2 bezieht sich auf das vorletzte Element usw.

Verwendung des Join-Operators und des Split-Operators

In PowerShell wird der join-Operator verwendet, um ein Array von Strings zu einem einzelnen String zusammenzufügen, optional mit einem bestimmten Trennzeichen. Hier ist ein Beispiel ohne Trennzeichen.

      $array = "Power", "Shell"

$joined = $array -join ""

# Output: "PowerShell"
      

Hier ist es mit einem Trennzeichen:

Image

Der split-Operator macht im Grunde das Gegenteil des join-Operators, wie im folgenden Beispiel gezeigt:

      $string = "apple,banana,grape"
$fruits = $string -split ","
      
Image

Verwendung des Replace-Operators

Der replace-Operator wird verwendet, um eine Zeichenkette durch eine andere zu ersetzen. Hier ist die Struktur des Cmdlets:

      <originalString> -replace <patternToFind>, <replacementString>

      

Hier ist ein Beispiel, das „Hello World“ durch „PowerShell“ ersetzt:

      $string = "Hello World"

$newString = $string -replace "World", "PowerShell"

      
Image

Ein Array aufteilen

Sie können ein Teilarray erstellen, indem Sie einen Bereich angeben, wie hier gezeigt:

      $array = 1,2,3,4,5,6,7,8,9

$subset = $array[3..6]

      

Ein Array umkehren

Hier ist ein Beispiel dafür, wie man die Reihenfolge der Elemente in einem Array umkehrt:

      $numbers = 1..5

[Array]::Reverse($numbers)
      

Fazit

Arrays sind eine grundlegende Datenstruktur in den meisten Skript- und Programmiersprachen, da sie es Ihnen ermöglichen, eine Sammlung von Elementen verschiedener Datentypen zu speichern, abzurufen und zu manipulieren. Das Verständnis von Arrays wird Ihre Fähigkeit verbessern, Aufgaben mithilfe von PowerShell zu automatisieren.

Jetzt kann Netwrix helfen

Müssen Sie Ihr Active Directory und Entra ID (Azure AD) Umfeld effizienter und effektiver absichern? Ziehen Sie Netwrix Directory Manager. Seine automatisierten Gruppen- und Benutzerverwaltungsfunktionen verringern das Risiko von Datenpannen und eliminieren zeitraubende manuelle Verwaltungsaufgaben.

Netwrix Directory Manager ermächtigt Sie zu:

  • Automatisieren Sie das Anlegen und Entfernen von Benutzern aus Ihrem HR-Informationssystem (HRIS) in Active Directory, Entra ID und SCIM-fähigen Anwendungen, wodurch neue Mitarbeiter schnell produktiv werden können und das Risiko verringert wird, dass Gegner veraltete Identitäten übernehmen.
  • Aktualisieren Sie Verzeichnisgruppen automatisch basierend auf Änderungen wie der Beförderung eines Mitarbeiters oder dem Wechsel in eine andere Rolle, wie in Ihrem HRIS erfasst. Diese Automatisierung hält Zugriffsrechte nahezu in Echtzeit auf dem neuesten Stand, wie es für Sicherheit und Compliance erforderlich ist, und spart gleichzeitig Ihrem IT-Team Zeit.
  • Übertragen Sie das Management von Gruppen und Benutzern an die Personen, die wissen, wer Zugang zu welchen Ressourcen haben sollte. Einfache Workflows ermöglichen es Geschäftsbereichsleitern, ihre Gruppen zu überprüfen und Benutzerzugriffsanfragen zu genehmigen oder abzulehnen, wodurch das Risiko von zu vielen Berechtigungen für Gruppen und Benutzer in Ihrem Verzeichnis verringert wird.
  • Halten Sie das Verzeichnis sauber und leichter zu verwalten mit automatisierter Benutzererstellung, -ablauf und -löschung.
  • Halten Sie die Einhaltung von Vorschriften und Standards aufrecht und weisen Sie diese mit tiefen Einblicken, effektiver Automatisierung und klarem Reporting über Gruppen und Mitglieder nach.

Beherrschen Sie die Grundlagen des Windows PowerShell-Skriptings

Erfahren Sie mehr



Teilen auf

Erfahren Sie mehr

Über den Autor

Asset Not Found

Jonathan Blackwell

Leiter der Softwareentwicklung

Seit 2012 hat Jonathan Blackwell, ein Ingenieur und Innovator, eine führende Rolle in der Ingenieurskunst übernommen, die Netwrix GroupID an die Spitze des Gruppen- und Benutzermanagements für Active Directory und Azure AD Umgebungen gebracht hat. Seine Erfahrung in Entwicklung, Marketing und Vertrieb ermöglicht es Jonathan, den Identity-Markt und die Denkweise der Käufer vollständig zu verstehen.