Variablen und Arrays in PowerShell

Im vorigen Artikel „Tutorial zur Skripterstellung mit PowerShell für Einsteiger“ haben Sie gelernt, wie Sie über die PowerShell-Konsole Skripts ausführen, was Cmdlets sind und wie Sie ihre Eigenschaften anzeigen können und wie Daten mithilfe von Pipes an ein anderes Cmdlet weitergeleitet werden können.

In diesem Artikel geht es um Variablen und Arrays. Sie erfahren, was Variablen und Arrays sind und wie Sie diese erstellen, löschen und ändern können.

PowerShell-Variablen

Eine Variable ist eine Speichereinheit, in der Werte gespeichert werden. In PowerShell beginnen Variablen mit „$“ (Dollarzeichen) und ihre Namen können Buchstaben, Ziffern und Unterstriche enthalten. Um einer Variablen einen Wert zuzuweisen, wird der Operator „=“ verwendet. Um den Wert einer Variablen anzuzeigen, geben Sie die Variable einfach ein. Mit den folgenden Befehlen können Sie einer Variablen einen Wert zuweisen und diesen dann überprüfen:

$var1 = 777
$var1

PowerShell Variables and Arrays assign a value

Sie können arithmetische Operationen mit Zahlen ausführen:

$var1 = 777
$var2 = 333
$var3 = $var1 + $var2
$var3

PowerShell_Variables_Assign_Value_Numbers

Mit dem Operator „+“ können Sie außerdem Zeichenfolgen kombinieren:

$var1 = "Complete"
$var2 = "Visibility"
$var3 = $var1 + $var2
$var3

PowerShell_Variables_Combine_Strings

Wenn Sie eine Zahl zu einer Zeichenfolge hinzufügen, wird diese automatisch in eine Zeichenfolge umgewandelt:

$var1 = "Netwrix"
$var2 = 2018
$var3 = $var1 + $var2
$var3

owerShell_Variables_Combine_Strings_Add_Plus

Variablentypen

Der PowerShell-Variablentyp wird automatisch anhand des Werts festgelegt, den Sie der Variablen zuweisen. Sie können den Typ jedoch auch manuell festlegen:

[string]$var1 = "Netwrix"

PowerShell_Variables_Assign type

Den Typ einer Variablen können Sie mit dem Parameter „GetType ()“ ermitteln:

$var1 = "Netwrix"
$var1.GetType().FullName

Wie Sie sehen können, ist der Variablen „$var1“ der Typ „System.String“ zugewiesen.

Im Folgenden finden Sie eine Beschreibung aller PowerShell-Variablentypen:

Variablentyp Beschreibung Beispiel
[string]
System.String
Textzeichenfolge $var1 = “Netwrix”
[char]
System.Char
Symbol [char]$var1 = 0x265b
[bool]
System.Boolean
Boolescher Wert ($true oder $false) $var1 = $true
[int]
System.Int32
32-Bit-Ganzzahl $var2 = 235235345
[long]
System.Int64
64-Bit-Ganzzahl $var2 = 2352353457
[decimal]
System.Decimal
128-Bit-Dezimalzahl mit dem Buchstaben „d“ am Ende $var2 = 23523.53456d
[double]
System.Double
8-Byte-Gleitkommazahl [double]$var2 = 23523.53456
[single]
System.Single
32-Bit-Gleitkommazahl [single]$var2 = 23523.53
[DateTime]
System.DateTime
Datum und Uhrzeit $var3 = get-date
[array]
System.Object[]
Array (weiter unten ausführlich erläutert) $var3 = “first”, “second”, “third”
[hashtable]
System.Collections.Hashtable
Hashtabelle.
Der Unterschied zwischen Hashtabellen und Arrays besteht darin, dass in Arrays Indizes und in Hashtabellen benannte Schlüssel verwendet werden. Hashtabellen sind nach folgendem Format aufgebaut: @ {Schlüssel = “Wert”}
Um ein Element zu einer Hashtabelle hinzuzufügen, können Sie dem Element entweder einen noch nicht vorhandenen Schlüssel zuweisen oder die Methode „Add ()“ verwenden. Wird dem Element ein bereits vorhandener Schlüssel zugewiesen, übernimmt der Schlüssel den neu zugewiesenen Wert. Um ein Element aus einer Hashtabelle zu löschen, verwenden Sie die Methode „Remove ()“.
$var3 = @{1=”one”; 2=”two”; 3=”three”}

$var3.Add(“4”, “four”)
$var3.5 = “five”
$var3.Remove(“2”)

 

Sie haben vermutlich bereits erkannt, dass Sie nicht nur einen bestimmten Wert in die Variable schreiben können, und den Variablentyp „System.Object []“ in der Tabelle gesehen. In diese Variable können Sie die Ausgabe eines beliebigen Cmdlet schreiben.

Variablenbereich

Der Variablenbereich in PowerShell kann lokal oder global sein. Standardmäßig haben Variablen einen lokalen Bereich. Eine Variable ist durch ihren Bereich begrenzt. Eine lokale Variable kann beispielsweise in einer aktuellen Funktion oder einem Skript enthalten sein, während globale Variablen während der gesamten PowerShell-Sitzung aktiv sind. Um eine globale Variable zu kennzeichnen, verwenden Sie das Format „$Global: Variable = Wert“, wie im folgenden Beispiel gezeigt:

$Global:var4 = 12

Beispiele für PowerShell-Variablen

Auflisten von Variablen

Um alle derzeit verfügbaren Variablen aufzulisten, führen Sie den Befehl „ls variable:*“ aus. Die Ausgabe kann wie folgt aussehen:

PowerShell_Variables_List

Festlegen von Variablen

Sie können eine Variable erstellen, indem Sie ihr einfach einen Wert zuweisen. Mit dem Befehl „$var4 = “Variablenbeispiel”“ wird beispielsweise die Variable „$var4“ erstellt, der ein Zeichenfolgenwert zugewiesen wird. Die doppelten Anführungszeichen (” “) lassen erkennen, dass der Wert der Variablen eine Zeichenfolge ist.

Abrufen von Variablen

Das Abrufen von Variablen funktioniert ähnlich wie das Auflisten von Variablen, es wird lediglich ein anderes Cmdlet verwendet:

Get-Variable | Out-String

Ausgeben des Inhalts von Variablen

Sie können eine Variable als txt-, csv- oder HTML-Datei ausgeben.

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

$var5 = "Hello World!"
$var5 | Out-File C:\scripts\Hello_World.txt

Für den Export der Daten in eine csv-Datei verwenden Sie den Befehl „Export-Csv“:

$var6 = Get-Process
$var6 | SELECT Name, Path | Export-Csv -Path C:\scripts\processes.csv

PowerShell_Variables_print

Um den Inhalt in eine HTML-Datei zu schreiben, verwenden Sie den Befehl „ConvertTo-Html“:

$var6 = Get-Process
$var6 | ConvertTo-Html -Property Name, Path > C:\scripts\processes.html

Um eine exportierte Datei zu lesen, verwenden Sie das Cmdlet „Get-Content“:

Get-Content C:\scripts\processes.csv

Löschen des Inhalts von Variablen

Um den Inhalt einer Variablen zu löschen, verwenden Sie das Cmdlet „Clear-Variable“:

Clear-Variable -name var6 #without $

Löschen von Variablen

Wenn Sie eine Variable vollständig löschen möchten, verwenden Sie das Cmdlet „Remove-Variable“:

Remove-Variable -name var6 #without $

PowerShell-Arrays

Ein Array ist ein Variablentyp. Es besteht aus verschiedenen Komponenten (Arrayelementen), die in einer bestimmten Reihenfolge angeordnet sind. Die Arrayelemente haben fortlaufende Nummern. Sie können über die Indexnummer auf ein Element zugreifen.

Bei der Erstellung von Arrays sollten Sie wissen, wie PowerShell standardmäßig vorgeht. Wenn Sie ein Array mit mehreren Elementen erstellen, wird das gewünschte Array von PowerShell erstellt. Geben Sie als Beispiel ein paar Zahlen in ein Array ein und überprüfen Sie dann den Datentyp der Variablen:

$array1 = 1, 2, 3
$array1.GetType()

Wie Sie sehen können, hat PowerShell hier ein Array (System.Array) erstellt.

Wenn Sie jedoch nur einen Wert in eine Variable eingeben, erstellt PowerShell kein Array:

$array1 = 1
$array1.GetType()

PowerShell_Variables_One value

Natürlich können Sie nicht immer schon im Voraus wissen, wie viele Objekte Sie durch Ausführung eines bestimmten Befehls erhalten. Sie benötigen deshalb einen Code, der das Ergebnis immer als Array behandelt.

Hierfür gibt es viele Möglichkeiten. Sie können beispielsweise den Operator „,“ verwenden. Wird ein Komma als binärer Operator verwendet, erstellt PowerShell ein normales Array. Wird das Komma als unärer Operator verwendet, besteht das Array lediglich aus einem Element. So erstellen Sie ein Array, das aus einem Element besteht:

$array1 = ,1
$array1.GetType()

PowerShell_Variables_Array_one element

Alternativ können Sie den Datentyp für eine Variable explizit angeben:

[object[]]$array1 = 1
$array1.GetType()

Und schließlich können Sie ein Array auch erstellen, indem Sie den Unterausdrucksoperator „@“ verwenden. Damit wird auch dann ein Array erstellt, wenn gar keine Objekte angegeben sind. Es ist sehr praktisch, eine Variable als Array zu initialisieren und dem Array dann Objekte hinzuzufügen, ohne sich Gedanken über die Nummerierung machen zu müssen.

$array3 = @()
$array3.GetType()

PowerShell_Variables_Create array

Beachten Sie, dass jedes Element eines Arrays einen eigenen Datentyp besitzt und Sie mit dem Typ „object[]“ Werte zum Array hinzufügen können. Bei Bedarf können Sie die Elemente eines Arrays auf einen bestimmten Datentyp beschränken. Auf diese Weise erstellen Sie ein typisiertes Array. Sie können beispielsweise festlegen, dass Arrayelemente aus Ganzzahlen bestehen müssen:

[int32[]]$array1 = 1
$array1.GetType()

Und so definieren Sie Systemprozesse als Arraymitglieder:

[System.Diagnostics.Process[]]$array1 = Get-Process
$array1.GetType()

PowerShell_Variables_Define systems processes as array members

Arrayliste

Wenn Sie ein Array häufig ändern oder suchen, können Sie dafür die Klasse „ArrayList“ verwenden. Damit lassen sich auf einfache Weise Elemente hinzufügen, löschen oder suchen:

$array3 = New-Object System.Collections.ArrayList

Arrayindex

Ein Index im Array ist ein Wert (in der Regel eine Ganzzahl), über den ein Arrayelement identifiziert und referenziert wird. Arrayindizes beginnen je nach Programmiersprache entweder mit null oder mit eins. Windows PowerShell-Arrays sind nullbasiert. Um auf das erste Element des Arrays „$var3“ (Element null) zu verweisen, geben Sie daher „$var3 [0]“ ein.

$var3 = "first", "second", "third"

PowerShell__Array_Element zero

Mehrdimensionale Arrays

Mehrdimensionale Arrays sind Variablen, mit denen Informationen in einer Tabelle gespeichert werden können, ohne sie in eine Datenbank schreiben zu müssen. Ein mehrdimensionales Array sieht wie eine Hashtabelle aus, kann jedoch verschiedene Arten von Informationen speichern, beispielsweise Zeichenfolgen und Ganzzahlen. Es besteht sozusagen aus einer Tabelle mit Spalten und Zeilen, bei der jede Zelle über einen eigenen Index in einer PowerShell-Umgebung verfügt.

$mdarray1 = @()
$mdarray1_counter ++
$mdarray1 += ,@($mdarray1_counter, 'Earth',12742)
$mdarray1_counter ++
$mdarray1 += ,@($mdarray1_counter, 'Mars',6779)
$mdarray1_counterr ++
$mdarray1 += ,@($mdarray1_counter, 'Venus',12104)
$mdarray1_counter ++
$mdarray1 += ,@($mdarray1_counter, 'Saturn',116464)
foreach($array10 in $mdarray1)
    {
    Write-host ($array10)
    }

PowerShell_Multidimesional arrays

Beispiele für PowerShell-Arrays

Sortieren eines Arrays

Wenn ein Array nur einen Datentyp enthält, können Sie die Werte mithilfe der Methode „Sort“ sortieren:

$array3 | Sort

Um ein Array mit mehreren Datentypen zu sortieren, müssen Sie das Cmdlet „Sort-Object“ verwenden.

Hinzufügen von Elementen zu einem Array

Erstellen Sie zunächst ein Array:

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

PowerShell_Add to array

Um das Array bearbeiten zu können, muss es zur Sammlung „ArrayList“ hinzugefügt werden:

[System.Collections.ArrayList]$ArrayList1 = $array5
$ArrayList1.GetType()

PowerShell_Modify array

Wie Sie sehen können, ist unter „BaseType“ ein anderer Variablentyp zu sehen. Das Array kann nun ganz einfach geändert werden:

$ArrayList1.Add("six")
$ArrayList1.Remove("three")
$ArrayList1

PowerShell_Modify array base type

Arraylänge

Mit dem Parameter „.length“ können Sie die Anzahl der Elemente im Array anzeigen:

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

PowerShell_Array length

Entfernen von Elementen aus einem Array

Um ein Element zu entfernen, verwenden Sie den Befehl „.Remove“. Auch hier empfiehlt es sich, eine Arrayliste zu verwenden:

[System.Collections.ArrayList]$ArrayList1 = $array5
$ArrayList1.GetType()
$ArrayList1.Remove("three")
$ArrayList1

PowerShell_Remove item from array

Inhalt des Arrays

Wenn Sie wissen möchten, ob Elementen in einem Array ein bestimmter Wert zugewiesen ist, verwenden Sie die Methode „Contains“:

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

PowerShell__Array contains

Löschen des Inhalts von Arrays

Zwar können die meisten Operationen für Arrays in PowerShell relativ einfach ausgeführt werden, doch lassen sich Arrays nicht ohne Weiteres löschen. Die einfachste Methode für das Löschen eines gesamten Arrays besteht darin, dem Array die Variable „$null“ zuzuweisen:

$array7 = $null
$array7

Mit dem folgenden Skript können Sie überprüfen, ob einem Array der Wert Null zugewiesen ist:

$array7 -eq $null

PowerShell_Clear array

Wenn in PowerShell eine Variable den Wert Null hat, können Sie keine Methoden darauf anwenden.

Ausgeben des Inhalts von Arrays

Für die Ausgabe eines gesamten Arrays können Sie dieselben Methoden verwenden wie für die Ausgabe von Variablen.

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

$var5 | Out-File C:\scripts\array.txt

Für den Export in eine csv-Datei verwenden Sie den Befehl „Export-Csv“:

$var6 | Export-Csv -Path C:\scripts\array.csv

Um den Inhalt in eine HTML-Datei zu schreiben, verwenden Sie den Befehl „ConvertTo-Html“:

$var6 | ConvertTo-Html > C:\scripts\processes.html

Durchlaufen eines Arrays

Um die einzelnen Elemente in einem Array nacheinander auszuführen, müssen Sie mit dem Operator „foreach“ eine Schleife erstellen. Wenn Sie beispielsweise ein Zeichenfolgenarray deklarieren und die Länge der einzelnen Wörter im Array ermitteln möchten, sollten Sie folgendes Skript ausführen:

$array8 = @("Earth","Mercury","Venus","Jupiter","Saturn","Mars", "Neptune", "Pluto")

 foreach ($array in $array8) {
   "$array = " + $array.length
 }

PowerShell_Loop through an array

In diesem Artikel haben Sie Variablen und Variablentypen kennengelernt. Der Variablentyp „Array“ und seine Verwendung wurden ausführlich beschrieben. Mit diesen Grundlagen sind Sie nun gerüstet, mehr über die weiteren Funktionen und Befehle von PowerShell zu erfahren.

Tutorial zur Skripterstellung mit Windows PowerShell für Einsteiger