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
- Beispiele für PowerShell-Variablen
- PowerShell-Arrays
- Beispiele für PowerShell-Arrays
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
Sie können arithmetische Operationen mit Zahlen ausführen:
$var1 = 777 $var2 = 333 $var3 = $var1 + $var2 $var3
Mit dem Operator „+“ können Sie außerdem Zeichenfolgen kombinieren:
$var1 = "Complete" $var2 = "Visibility" $var3 = $var1 + $var2 $var3
Wenn Sie eine Zahl zu einer Zeichenfolge hinzufügen, wird diese automatisch in eine Zeichenfolge umgewandelt:
$var1 = "Netwrix" $var2 = 2018 $var3 = $var1 + $var2 $var3
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"
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:
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
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()
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()
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()
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()
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"
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) }
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()
Um das Array bearbeiten zu können, muss es zur Sammlung „ArrayList“ hinzugefügt werden:
[System.Collections.ArrayList]$ArrayList1 = $array5 $ArrayList1.GetType()
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
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
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
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)
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
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 }
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.