Dieser Artikel wurde für 2023 aktualisiert!
Skripte können Entscheidungen treffen. Wie? Indem sie ein Konzept namens bedingte Logik verwenden. Die PowerShell if-Anweisung und die if/else-Konstrukte sind die üblichen Möglichkeiten, Bedingungen zu definieren.
Wenn Sie PowerShell-Skripte schreiben, tun Sie dies mit einer bestimmten Aufgabe oder einem bestimmten Ziel im Sinn. Aber eine Operation kann basierend auf einer oder mehreren Bedingungen mehrere mögliche Aktionen haben. Hier kommt das PowerShell If-Statement-Konstrukt ins Spiel.
In diesem Artikel lernen Sie das PowerShell If-Else-Konstrukt kennen und verstehen seine Syntax und wie es funktioniert. Sie lernen auch einige Möglichkeiten kennen, wie Sie die PowerShell If-Anweisung verwenden können, um bedingte Logik in Ihren Skripten aus den Beispielen hinzuzufügen.
Verständnis der PowerShell If-Anweisungssyntax
Das PowerShell If-Else-Konstrukt bewertet eine oder mehrere bedingte Ausdrücke. Nachfolgend sehen Sie die Syntax der If-Anweisung. Dieser Stil wird oft als Flusssteuerung bezeichnet.
Wie Sie aus der obigen Syntax sehen können, ist jeder Test in Klammern ()
eingeschlossen. Tests können verschiedene Operatoren verwenden, wie Vergleichsoperatoren und logische Operatoren,
Die Anweisungslisten enthalten den Code, der ausgeführt werden soll, wenn das Ergebnis des Tests als wahr ausgewertet wird.
Dann gibt es drei mögliche Anweisungen in einer If-Anweisungsgruppe. Dies sind die IF-, ELSEIF- und ELSE-Anweisungen.
- Die
if
-Anweisung enthält den ersten Test zur Auswertung, gefolgt von der ersten Anweisungsliste, die in geschweifte Klammern{}
eingeschlossen ist. Die PowerShell if-Anweisung ist die einzige erforderliche Anweisung, die vorhanden sein muss. - Die
elseif
-Anweisung ist der Ort, an dem Sie Bedingungen hinzufügen. Sie können mehrere ElseIf-Anweisungen hinzufügen, wenn Sie mehrere Bedingungen haben. PowerShell wertet jede dieser Bedingungen sequentiell aus. - Die
else
-Anweisung akzeptiert keine Bedingung. Die Anweisungsliste in dieser Anweisung enthält den Code, der ausgeführt werden soll, wenn alle vorherigen getesteten Bedingungen falsch sind.
Verstehen des PowerShell-If-Anweisungslogikflusses
Um besser zu verstehen, wie das PowerShell-If-Else funktioniert, machen Sie sich mit seinem Logikfluss vertraut. Das folgende Diagramm veranschaulicht den grundlegenden Ablauf des PowerShell-If-Else.

Wenn die if-Anweisung ausgeführt wird, durchläuft PowerShell jede Bedingung und bewertet, ob der Code true oder false zurückgibt. Eine Zusammenfassung des Verhaltens finden Sie unten:
- PowerShell bewertet die Bedingung in Test 1.
- Wenn das Ergebnis von Test 1 true zurückgibt, wird der Code innerhalb der If-Anweisungsliste ausgeführt, und PowerShell verlässt die If-Anweisung.
- Wenn das Ergebnis von Test 1 false zurückgibt, fährt PowerShell fort, die Bedingung (Test n) in der nächsten ElseIf-Anweisung zu bewerten.
- Wenn das Ergebnis von Test n false zurückgibt, wird PowerShell weiterhin die Bedingung (Test n) in der nächsten ElseIf-Anweisung auswerten, wenn eine weitere ElseIf-Anweisung existiert -ODER-
- Wenn das Ergebnis von Test n false zurückgibt, wird der Code in der Else-Anweisung ausgeführt und PowerShell wird die If-Anweisung verlassen -ODER-
- Wenn das Ergebnis von Test n true zurückgibt, wird der Code in der ElseIf-Anweisung ausgeführt und PowerShell wird die If-Anweisung verlassen.
Verwendung der PowerShell If-Else-Anweisung
In den nächsten Abschnitten finden Sie mehrere Beispiele, wie die PowerShell If-Anweisung beim Schreiben von Skripten verwendet wird. Die Techniken, die Sie lernen werden, können Sie dabei unterstützen, die If-Anweisung zu verwenden, falls Sie auf eine reale Situation stoßen, die ihre Verwendung erfordert.
Einzige If-Else-Bedingung
Beginnen wir mit dem Einfachsten, der einzelnen PowerShell If-Anweisung. Sie sollten eine einzelne If-Anweisung verwenden, wenn nur eine Bedingung getestet werden soll.
Das folgende Beispiel überprüft, ob der Wert der Variablen $num
größer als 10 ist. Wenn das Ergebnis wahr ist, wird das Ergebnis "$num ist größer als 10"
auf dem Bildschirm angezeigt. Wenn das Ergebnis falsch ist, führt PowerShell keine Aktion aus, da nur eine Bedingung getestet werden soll.
Wenn Sie nur nach einem bestimmten Wert suchen, wie
if ($Value) { }
, wird PowerShell überprüfen, ob der$Value
nicht$Null
,0
,$False
, ein leerer String oder ein leeres Array ist.
Wenn Sie den obigen Code in PowerShell einfügen, erhalten Sie das unten gezeigte Ergebnis.

Jetzt können Sie die Else-Anweisung hinzufügen, wenn Sie eine standardmäßige „Fallback“-Aktion hinzufügen möchten, anstatt PowerShell einfach nichts tun zu lassen, wenn das Testergebnis falsch ist.
Im folgenden Beispiel wird der Code in der Else-Anweisung ausgeführt, wenn der Wert der Variablen $num
NICHT größer als 10 ist.
Wenn Sie den modifizierten Code in PowerShell ausführen, erhalten Sie die unten gezeigte Ausgabe.

Ab PowerShell 7.0 wurde eine neue Syntax für die If-Anweisung eingeführt, die einen Ternäroperator verwendet. Einzelne If-Anweisungen können von dieser neuen Syntax gut Gebrauch machen.
Mit dem gleichen obigen Beispiel würde der Code mit dem Ternär-Operator so aussehen.

Testen auf $Null in einer PowerShell-If-Anweisung
Sie könnten denken, dass das Testen auf eine $Null
-Bedingung einfach ist. Aber die Seite, auf der Sie den Wert $Null
platzieren, ist wichtig, da dies nicht in jeder Bedingung zu demselben Ergebnis führt. Es ist bewährte Praxis, die $Null
-Bedingung immer auf der linken Seite wie folgt zu platzieren.
Wenn Sie den $Null
-Test auf der rechten Seite platzieren und der Wert auf der linken Seite eine Liste ist, wie zum Beispiel ein Array, dann wird $Null
als Filter wirken. Wie Sie am Beispiel unten sehen können, erhalten Sie konsistente boolesche Ergebnisse, wenn $Null
auf der linken Seite platziert ist.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

Mehrere If-Else-Bedingungen mit ElseIf
Bei der Bewertung mehrerer Bedingungen müssen Sie eine oder mehrere ElseIf-Anweisungen hinzufügen. Jede ElseIf-Anweisung enthält den Testausdruck und den auszuführenden Code.
Das folgende Skript fordert bei der Ausführung fortlaufend nach einem Fruchtnamen, bis die Tastenkombination CTRL+C
eingegeben wird oder der Benutzer den Buchstaben „X
“ eingibt.
Dann wird die If-Anweisung jede Bedingung nacheinander durchlaufen, bis sie eine Übereinstimmung findet. Wenn die Eingabe keiner der Bedingungen entspricht, wird der Code innerhalb der Else-Anweisung ausgeführt.
Nachstehend wird demonstriert, wie sich das obige Skript beim Ausführen in PowerShell verhält.

Berichterstattung über den Status des freien Speicherplatzes
Die Berichterstattung über den freien Speicherplatz ist eine Aufgabe, die für Systemadministratoren üblich ist. Die übliche Methode zur Berichterstattung über die Speicherinformationen von Festplatten auf einem Windows-Computer basiert auf dem folgenden Code.
Die Informationen, die der obige Code zurückgibt, würden wie in der nächsten Bildschirmaufnahme dargestellt aussehen.

Wie Sie sehen können, zeigt die obige Ausgabe den Laufwerksbuchstaben, die freien Speicherplatzwerte und andere Eigenschaften an. Obwohl die obige Ausgabe in Ordnung ist, ist sie nicht intuitiv. Die Art und Weise, wie die Informationen präsentiert werden, gibt nicht an, ob der Festplattenspeicher kritisch, warnend oder normal ist.
Verwendung einer PowerShell If-Anweisung zur Verbesserung des Codes
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
Das folgende Beispiel-Skript führt folgendes aus:
- Verwenden des Variablenwerts von
$Critical
, um die Schwelle zu definieren, bei der der Prozentsatz des freien Speicherplatzes als kritisch markiert wird. - Verwenden Sie den Wert der Variablen
$Warning
, um die Schwelle festzulegen, bis zu der der Prozentsatz des freien Speicherplatzes als warning markiert wird. - Holen Sie alle Informationen zu festen Laufwerken von der lokalen Maschine
- Schleife durch alle Laufwerksinformationen, um den freien Speicherplatz zu bestimmen und seinen Status zu markieren.
- Wenn der Prozentsatz des freien Speicherplatzes höher ist als der Wert der Variablen
$Warning
, wird der Status des Festplattenspeichers als normal markiert. - Wenn der Prozentsatz des freien Speicherplatzes höher ist als der Wert der Variablen
$Critical
, wird der Status des Festplattenspeichers als warning markiert. - Wenn der Prozentsatz des freien Speicherplatzes kleiner oder gleich dem Wert der Variablen
$Critical
ist, wird der Status des Festplattenspeichers als critical markiert.
- Wenn der Prozentsatz des freien Speicherplatzes höher ist als der Wert der Variablen
- Komponieren Sie die Objekteigenschaften
'Laufwerksbuchstabe'
,'Laufwerkname'
,'Gesamtspeicherplatz (GB)'
,'Freier Speicherplatz (GB)'
,'Freier Speicherplatz (%)'
und'Status'
. - Geben Sie den Abschlussbericht zurück.
Kopieren Sie den folgenden Code und speichern Sie das Skript mit dem Dateinamen Get-DiskSpace.ps1
. Vergessen Sie nicht, die Werte der Variablen $Critical
und $Warning
zu ändern, um mit verschiedenen Schwellenwerten zu testen.
Sie können das Ergebnis der if/else-Bedingung auch einer Variablen zuweisen, z.B.
$Status = if ($percentFree -gt $Warning) { 'Normal' }
, um möglicherweise eine kürzere Bedingung zu erstellen.
Wenn das Skript gespeichert ist, testen Sie es, indem Sie seinen Namen in PowerShell aufrufen. Unten finden Sie eine Beispieldemonstration, wie dieses Skript funktioniert.

Wie Sie aus der Ausgabe sehen können, wird der Status für jede Festplatte durch den Prozentsatz des freien Festplattenspeichers bestimmt, der das Ergebnis der Verwendung mehrerer Bedingungen mit PowerShell If-Else war.
Mehrere und verschachtelte If-Else
Angenommen, Sie haben eine If-Else-Anweisung mit einer Bedingung, die im else
-Block definiert ist. Wenn die If-Else-Anweisung ausgeführt wird, wird der else
-Block aufgerufen, wenn der Code im if
-Block false zurückgibt.
Innerhalb des else
-Blocks müssen Sie einen weiteren bedingten Test durchführen. Als Ergebnis benötigen Sie eine weitere If-Else-Anweisung. Dieses Szenario wird als verschachtelte If-Else bezeichnet. Die verschachtelte If-Else-Anweisung wird häufig verwendet, wenn das innere If-Else vom Ergebnis der Operation im äußeren If-Else abhängt.
Die Verwendung mehrerer und verschachtelter If-Else-Anweisungen kann ziemlich verwirrend sein. Der Schlüsselpunkt ist, sich an die Platzierung des Gerüsts zu erinnern und sicherzustellen, dass Sie Ihren Code einrücken. Durch Einrücken Ihres Codes können Sie Ihre If-Else-Anweisungen leicht erkennen und trennen.
Beispiel für mehrfache/verschachtelte If-Else-Anweisungen
Das folgende Beispielskript zeigt, wie mehrere und verschachtelte If-Else-Anweisungen voneinander abhängig sein können. Die Logik des untenstehenden Codes ist wie folgt.
- Wenn
$SendEmail
$false
ist, tut das Skript nichts und beendet. - Wenn
$SendEmail
$true
ist, dürfen die Variablen$From
und$To
nicht leer oder null sein. Andernfalls wird$abortFlag
auf 1 gesetzt. - Wenn
$SendEmail
$true
ist und$CCEnabled
$true
ist, darf die Variable$CC
nicht leer oder null sein. Andernfalls wird$abortFlag
auf 1 gesetzt. - Wenn
$SendEmail
$true
ist und$BCCEnabled
$true
ist, darf die Variable$BCC
nicht leer oder null sein. Andernfalls wird$abortFlag
auf 1 gesetzt. - Wenn der Wert von
$abortFlag
1 ist, wird das Skript an diesem Punkt beendet und nicht fortgesetzt. - Wenn der Wert von
$abortFlag
0 ist, wird das Skript bis zum Ende fortgesetzt.
Kopieren Sie den folgenden Code und speichern Sie ihn als Send-MyMail.ps1
. Ändern Sie noch keine Werte.
Nachdem Sie die Datei gespeichert haben, führen Sie sie in PowerShell aus, wie unten gezeigt. Die Demonstration unten zeigt das Ergebnis des Skripts, wenn die Variablenwerte unverändert bleiben.

Bearbeiten Sie als nächstes das Skript und aktualisieren Sie alle Variablen ordnungsgemäß, wie im folgenden Ausschnitt gezeigt.
Nachdem Sie die Variablen bearbeitet haben, speichern Sie das Skript und führen Sie es erneut aus. Es sollte das gleiche Ergebnis wie unten gezeigt anzeigen.

Ändern Sie nun die Variablen und versuchen Sie verschiedene Kombinationen, um zu testen, wie sich das verschachtelte If-Else verhält. Durch eigenständiges Ändern und Testen können Sie die Logik weiter verstehen.
Zusammenfassung
In diesem Artikel haben Sie die bedingte Logikstruktur – die PowerShell If-Anweisung – kennengelernt. Die If-Else-Anweisung ermöglicht es Skriptern, bedingte Logik zu formulieren und die Aktionen ihrer Skripts basierend auf Testergebnissen zu steuern.
Mit den Beispielen in diesem Artikel sollten Sie Möglichkeiten und Techniken gelernt haben, um die If-Else-Anweisung beim Erstellen eines entscheidungsorientierten Codes zu verwenden. If-Else kann einfach sein, wenn eine einzelne Bedingung verwendet wird, und wird komplexer, wenn Sie tiefer in verschachtelte If-Else-Anweisungen eintauchen.
Was halten Sie von der If-Else-Anweisung? Ist dies etwas, das Sie Ihrer Meinung nach nach dem Lesen dieses Artikels immer häufiger verwenden werden? Welche anderen Zwecke können Sie sich vorstellen, bei denen Sie das hier erworbene Wissen anwenden können?