Die Agentur
Kompetenzen

    Anfrage senden

    Senden Sie uns eine unverbindliche Anfrage.
    Wir beraten Sie gerne.

    Eine kleine Einführung in PowerShell Skripte

    PowerShell ist ein sehr mächtiges Werkzeug, egal was man damit anstellen möchte. Das Anwendungsgebiet ist einfach gigantisch. Vielleicht fällt es deswegen dem einen oder anderen auch so schwer wie mir einen Einstieg in die richtige Syntax zu finden, wenn es einfach darum geht Daten auszuwerten. Denn anders als für gewöhnliche Programmiersprachen bin ich noch nicht auf eine einfache Einführung gestoßen. Dieser Beitrag soll das nachholen. Ich werde versuchen die Syntax zu erklären und anhand von einfachen Beispielen zu erklären, wie man durch Probieren und Beobachten zu den gewünschten Ergebnissen gelangt.

    Dieser Beitrag soll in erster Linie diejenigen unter euch unterstützen, die via PowerShell Datenerfassen und ausgeben wollen. Die Anwendungsmöglichkeiten von PowerShell sind zu komplex um sie in einen Guide zu packen.

    1. Variablen, Objekte, Kommentare

    Variablen werden einfach mit einem $ Zeichen markiert. Der Aufruf von Variablen und das Setzen von Werten ist erstmal nichts besonderes.

    1#Das ist ein Kommentar
    2
    3<# Das
    4ist ein längerer Kommentar
    5#>
    6
    7#eine beliebige Variable
    8$anyVar
    9
    10#explizit als String deklarierte Variable
    11[String] $StringVar
    12
    13#implizit als String angelegte Variable
    14$variable = 'Das ist ein String'
    15
    16#implizit als Int32 angelegte Variable
    17$var2 = 2

    Boolsche Werte setzt man in PowerShell mit $true oder $false.

    1$boolean = $true

    Eine Konsolenausgabe erhalten wir mit Write Host

    1>> Write-Host 'Ich werde in der Konsole ausgegeben
    2<< Ich werde in der Konsole ausgegeben
    

    Spannend wird es bei Arrays und Objekten. Ein Array kann direkt als solches deklariert werden, ohne Deklaration wird es aber als Object Array angelegt. Wir können ein Array mit Werten bestücken, oder auch abkürzen:

    1#explizit deklarierters Int32 Array
    2[int[]] $integerArray = 1,2,3,4,5,6,7,8,9
    3
    4#ObjectArray
    5$objectArray = 1,2,3,4,5,6,7,8,9
    6
    7#Array mit Werten [1,2,3,4,5,6,7,8,9]
    8shortCutArray = 1..9

    Strings lassen sich mit dem ‚+‘ Operator verketten

    1$var1 = 'Hello'
    2$var2 = '!'
    3$var3 = $var1 + ' World' + $var2
    4>> $var3
    5<< Hello World!

    Eine Integer Variable wird auch einfach über ‚++‘ inkrementiert und mit ‚–‚ dekrementiert

    1$zahl = 1
    2
    3$zahl++
    4>> $zahl
    5<< 2
    6
    7$zahl--
    8>> $zahl
    9<< 1
    

    Hier eine kleine Auswahl der wichtigsten Datentypen

    DeklarationBeschreibung
    [Array]Array
    [Bool]True/False
    [Int32]/[Int]Ganzzahl
    [PsObject]Object
    [String]Zeichenkette
    [Float]Fließkommazahl

    Ein leeres Object Array könnt ihr einfach folgendermaßen erstellen. Es ist sehr nützlich um gesammelte Daten wie in einem Array zu bündeln, durchzuiterieren oder auszugeben:

    1$newEmptyObjectArray = @()

    Einem Array können andere Objekte einfach hinzugefügt werden

    1$newEmptyObjectArray += 'ich werde hinzugefuegt'

    Eine Abfrage erfolgt wie gewohnt

    1>> $newEmptyObjectArray[0]
    2<< ich werde hinzugefuegt
    

    Spannend sind auch die PSCustomObjects für Datensammler:

    1#Objekt anlegen
    2$newObject = New-Object PSCustomObject
    3
    4#Wert hinzufügen
    5$newObject | Add-Member -type NoteProperty -name 'Name' -value 'Wert'
    6
    7#Wert abfragen
    8>> $newObject.Name
    9<< Wert
    10
    11#Object abfragen
    12>> $newObject
    13<< Name
    14   -----
    15   Wert
    

    2. Schleifen und Verzweigungen

    If und Else funktionieren gewöhnlich. Dafür sind die Vergleichsoperatoren für den gemeinen Javaprogrammierer gewöhnungsbedürftig:

    1if($true){
    2    #do something
    3}else if($false){
    4    #do something else
    5}else{
    6    #do something different
    7}
    8#if(1 == 1)
    9if(1 -eq 1)
    10
    11#if(4 > 1)
    12if(4 -gt 1)
    13
    14#if(1 < 5)
    15if(1 -lt 5)
    16
    17#if(1 != 2)
    18if(1 -ne 2)
    19
    20#Ein Switch sieht so aus
    21$switchVariable = 5
    22switch ($switchVariable){
    23    1 { Write-Host 'Ich werde bei 1 ausgegeben' }
    24    5 { Write-Host 'Ich werde bei 5 ausgegeben' }
    25    Default { Write-Host 'Ich werde ausgegeben, wenn nichts passt' }
    26}

    While-, For- oder Foreach Schleifen gibt es auch

    1While($true){
    2    #do something
    3}
    4
    5$Numbers = 1..9
    6ForEach($Number in $Numbers){
    7    Write-Host $Number
    8}

    Fortsetzung folgt…

    Wir beschäftigen uns bald noch mit weiteren Themen wie:

    • Parameterübergabe
    • Weitere Schleifenarten
    • Filter
    • Nutzereingaben
    • Date
    • Try/Catch
    • CSV Export