Beiträge von
Marius Gawenda

Expertenwissen von Marius Gawenda

| |

PowerShell: Sprachkonstrukte (If/ElseIF/Else Anweisung) – Part 17.1

4.4 Sprachkonstrukte

Die Cmdlets und Befehle sowie die Pipeline, die in der PowerShell zur Verfügung stehen, bieten bereits sehr viele Möglichkeiten in der Shell. Um jedoch komplexere Funktionen und Skripte zu schreiben, bedarf es noch zusätzlich einiger Sprachelemente, welche wiederholtes Ausführen eines Skriptblocks oder logische Abzweigungen und Entscheidungen erlauben. Diese Sprachelemente, sogenannte Keywords oder reservierte Wörter, sind Teil der PowerShell Skriptsprache. Das impliziert, dass sie im Gegensatz zu Cmdlets, Befehlen und Funktionen nicht umdefiniert werden können.

| |

PowerShell: Skriptblöcke – Part 18

4.5 Skriptblöcke

Skriptblöcke sind bereits öfter in diesem Dokument verwendet oder erwähnt worden. Im Grunde ist das ein Stück Code, eingeschlossen in geschweifte Klammern. Sie können nicht nur in CMDLets, Funktionen und Sprachelementen verwendet werden, sondern können auch direkt ausgeführt oder als Argument übergeben werden. Darüber hinaus können Skriptblöcke als Funktionen, Filter (siehe Kapitel 4.6) und CMDLets verwendet werden. Letztlich können Skriptblöcke auch zur Funktionsdefinition zur Laufzeit verwendet werden, was allerdings nicht Bestandteil dieses Dokuments wird.

| |

PowerShell: Sprachkonstrukte (Try, Catch, Finally) – Part 17.8

4.4.12    Try, Catch, Finally

Try, Catch und Finally wurde in der PowerShell 2.0 implementiert und verhält sich ähnlich, wie das gleich benannte Konstrukt in C#. Damit kann eine sehr elegante Fehlerbehandlung in der Powershell realisiert werden. Die Syntax lautet wie folgt:

 

Try                                  Try Schlüsselwort
 {    
<StatementList>                      Anweisungsblock für Try
}    
Catch                                Catch Schlüsselwort
[[<Error-Type>][,<ErrorType>]*]      Optionale Fehlertypen
{    
<StatementList> 

| |

PowerShell: Sprachkonstrukte (Trap Anweisung, Throw Anweisung) – Part 17.7

4.4.10    Trap Anweisung

Mit der Trap Anweisung werden sogenannte Exceptions (oder Terminating Errors) behandelt. Die Syntax lautet wie folgt:

Trap                     Trap Schlüsselwort
[<ExceptionType>]        Optional, Fehlertyp
{    
<StatementList>          Anweisungsblock
[Breack|Continue]        Optional, Schlüsselworte zur Flusssteuerung
}    

Wenn eine Exception auftritt, ist das, was danach passiert, abhängig von einigen Systemvariablen.

| |

PowerShell: Sprachkonstrukte (Switch Anweisung) – Part 17.6

4.4.9     Switch Anweisung

Die Switch Anweisung ersetzt in ihrer einfachsten Form mehrere IF-Abfragen. Durch unterschiedliche Schalter kann die Switch Anweisung jedoch wesentlich mehr. Die Syntax lautet wie folgt:

Switch <Options>                                  Switch Schlüsselwort mit optionalen Parametern
 (    
<Pipeline>                                                Pipeline zum Testen
)    
{    
<Pattern1> {<StatementList1>}    Anweisungsblock für „pattern1“
<Pattern2> {<StatementList2>}    Anweisungsblock für „pattern2“
. . .                                                                  . . .

| |

PowerShell: Sprachkonstrukte (Flusssteuerung mit CMDLets) – Part 17.5

4.4.8     Flusssteuerung mit CMDLets

Die Flusssteuerung kann auch mit Hilfe von CMDLets vorgenommen werden. Sie können prinzipiell die gleichen Aufgaben erledigen wie die Sprachkonstrukte, es gibt jedoch einige wichtige Unterschiede. Die am häufigsten für die Flusssteuerung verwendete CMDLets sind ForEach-Object und Where-Object.

4.4.8.1     ForEach-Object

Das ForEach-Objekt CMDLet arbeitet ähnlich wie die Foreach-Schleife. Es wird eine Reihe von Objekten aus einer Collection nacheinander in einem Anweisungsblock abgearbeitet. Der Unterschied zu der Foreach-Schleife besteht darin,

| |

PowerShell: Sprachkonstrukte (Foreach- und While Schleife) – Part 17.3

4.4.3     Foreach-Schleife

Die Foreach-Schleife eignet sich, im Gegensatz zur For-Schleife, für die Verarbeitung von Sammlungen (Collections), welche eine unbekannte Anzahl von Elementen aufweisen. Für jedes Element der Sammlung kann innerhalb der Foreach-Schleife ein Anweisungsblock ausgeführt werden.

Foreach   
 (   
Foreach Schlüsselwort

<Varlable> 
In   
SchleifenvariableIn
Schlüsselwort

<Pipeline>  
)   
{   
Pipeline zur Verarbeitung

<StatementList>  

| |

PowerShell: Sprachkonstrukte (For-Schleife) – Part 17.2

4.4.2     For-Schleife

Die For-Schleife ist eine einfache numerische Schleife. In der PowerShell ist sie als eine ausdrucksorientierte Schleife implementiert. Das hört sich kompliziert an, bedeutet aber nur, dass sie auch Pipelines verarbeiten kann. Die For-Schleife hat die folgende Syntax:

For
(

For Schlüsselwort

<Pipeline1>;
<Pipeline2>;
Initialisierungspipeline
Testpipeline

<Pipeline3>   
)   
{
Inkrementpipeline

<StatementList>

| |

PowerShell: Rückgabewerte von Funktionen, Kommentare und Hilfe – Part 16

Solange eine Funktion Befehle enthält, welche eine Bildschirmausgabe tätigen (und das tun fast alle Befehle), ist eine dedizierte Rückgabe von Werten aus einer Funktion nicht notwendig:

?

1
2
3
4
5
6
7
8

1.  PS X:\Temp> function Get-Density([Int32]$Mass, [Int32]$Volume)
2.  >> {$Mass/$Volume}
3.  >>
4.  Get-Density 40 100
0,4
5.  $a = Get-Density 33 50
6.  $a
0,66

 

Eine direkte Zuweisung einer Funktion zu einer Variablen speichert dort die Ausgabe der Funktion (ausgenommen sind hier Ausgaben,