Skripte können Entscheidungen treffen. Wie? Durch Verwendung eines Konzepts namens bedingte Logik. Die PowerShell if-Anweisung und die if/else-Konstrukte sind die gebräuchlichsten Methoden zum Definieren von Bedingungen.
Wenn Sie Powershell-Skripte schreiben, tun Sie dies mit einer bestimmten Aufgabe oder Aufgaben im Auge. Eine Operation kann jedoch mehr als eine mögliche Aktion basierend auf einer oder mehreren Bedingungen haben. In dieser Situation kommt das PowerShell If-Else Konstrukt ins Spiel.,
In diesem Artikel erfahren Sie, was das PowerShell If-Else Konstrukt ist, seine Syntax versteht und wie es funktioniert. Sie lernen auch aus den Beispielen einige der verschiedenen Möglichkeiten kennen, wie Sie PowerShell If-Else verwenden können, um Ihren Skripten eine bedingte Logikbehandlung hinzuzufügen.
Inhaltsverzeichnis
Verstehen der PowerShell If-Else Syntax
Das PowerShell if-else Konstrukt wertet einen oder mehrere bedingte Ausdrücke aus. Unten sehen Sie die If-Anweisungssyntax. Dieser Stil wird manchmal als Flusskontrolle bezeichnet.,
if (<test1>) {<statement list 1>}
Wie Sie der obigen Syntax entnehmen können, ist jeder Test in einer Klammer eingeschlossen ()
. Tests können verschiedene Operatoren wie Vergleichsoperatoren und logische Operatoren verwenden,
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 Anweisung
if
enthält den ersten auszuwertenden Test, gefolgt von der ersten Anweisungsliste, die in den geschweiften Klammern eingeschlossen ist{}
.Die PowerShell if-Anweisung ist die einzige Anweisung, die vorhanden sein muss. - Mit der
elseif
– Anweisung fügen Sie Bedingungen hinzu. Sie können mehrere ElseIf-Anweisungen hinzufügen, wenn Sie mehrere Bedingungen haben. PowerShell bewertet jede dieser Bedingungen nacheinander. - Die
else
Anweisung akzeptiert keine Bedingung., Die Anweisungsliste in dieser Anweisung enthält den Code, der ausgeführt werden soll, wenn alle zuvor getesteten Bedingungen falsch sind.
Verständnis des PowerShell If-Else Logikflusses
Um weiter zu verstehen, wie die PowerShell If-Else funktioniert, müssen Sie sich mit dem Logikfluss vertraut machen. Das folgende Diagramm veranschaulicht den grundlegenden Fluss der 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 wertet die Bedingung in Test 1 aus.
- Wenn das Ergebnis von Test 1 true zurückgibt, wird der Code in der If-Anweisungsliste ausgeführt und PowerShell beendet die If-Anweisung.,
- Wenn das Ergebnis von Test 1 false zurückgibt, evaluiert PowerShell die Bedingung (Test n) in der nächsten ElseIf-Anweisung weiter.
- Wenn das Ergebnis von Test n false zurückgibt, evaluiert PowerShell weiterhin die Bedingung (Test n) in der nächsten ElseIf-Anweisung, wenn eine andere ElseIf-Anweisung vorhanden ist-ODER –
- Wenn das Ergebnis von Test n false zurückgibt, wird der Code in der Else-Anweisung ausgeführt. Dann beendet PowerShell die If-Anweisung-ODER –
- Wenn das Ergebnis von Test n true zurückgibt, wird der Code in der ElseIf-Anweisung ausgeführt. Dann beendet PowerShell die If-Anweisung.,
Verwenden der PowerShell If-Else-Anweisung
In den nächsten Abschnitten finden Sie einige Beispiele für die Verwendung der PowerShell If-Else-Anweisung beim Schreiben von Skripten. Die Techniken, die Sie lernen, können Sie bei der Verwendung der If-Anweisung unterstützen, wenn Sie auf eine reale Situation stoßen, die ihre Verwendung erfordert.
Einzelne If-Else-Bedingung
Beginnend mit der grundlegendsten ist die einzelne If-Anweisung. Sie sollten eine einzelne if Anweisung verwenden, wenn nur eine Bedingung zu testen ist.
Im folgenden Beispiel wird getestet, ob der Wert der Variablen $num
größer als 10 ist., Wenn das Ergebnis wahr ist, wird das Ergebnis "$num is greater than 10"
auf dem Bildschirm angezeigt. Wenn das Ergebnis falsch ist, führt PowerShell nichts aus, da nur eine Bedingung zu testen ist.
$num = 11if ($num -gt 10) { "$num is greater than 10"}
Wenn Sie den obigen Code in PowerShell einfügen, erhalten Sie das unten gezeigte Ergebnis.,
Wenn Sie nun eine standardmäßige“ Fallback “ – Aktion hinzufügen möchten, anstatt PowerShell nichts tun zu lassen, wenn das Testergebnis falsch ist, können Sie die Else-Anweisung hinzufügen.
Im folgenden Beispiel wird der Code in der Else-Anweisung ausgeführt, wenn der Wert der Variablen $num
NICHT größer als 10 ist.
$num = 9if ($num -gt 10){ "$num is greater than 10"}else{ "$num is NOT greater than 10"}
Wenn Sie den geänderten Code in PowerShell ausführen, erhalten Sie die unten gezeigte Ausgabe.,
Ab PowerShell 7.0 wurde mit einem ternären Operator eine neue Syntax für die If-Anweisung eingeführt. Einzelne If-Anweisungen können diese neue Syntax gut nutzen.
Im obigen Beispiel würde der Code mit dem ternären Operator so aussehen.,
$num = 11$num -gt 10 ? "$num is greater than 10" : "$num is NOT greater than 10"
Mehrere If-Else Bedingungen mit ElseIf
Wenn es sind mehrere Bedingungen zu bewerten, Sie müssen fügen Sie eine oder mehrere ElseIf-Anweisungen. Jede ElseIf-Anweisung enthält den auszuführenden Testausdruck und ihren eigenen Code.,
Das folgende Skript fordert bei der Ausführung weiterhin nach einem Fruchtnamen an, bis der Tastendruck CTRL+C
ausgegeben wird oder der Benutzer den Buchstaben „X
„eingibt.
Dann durchläuft die If Anweisung jede Bedingung nacheinander, bis sie eine Übereinstimmung findet. Wenn die Eingabe keiner der Bedingungen entspricht, wird der Code in der Else-Anweisung ausgeführt.
Unten ist die Demonstration, wie sich das obige Skript verhält, wenn es in PowerShell ausgeführt wird.,
Reporting-Free-Disk-Space-Status
Freie Speicherplatz reporting ist eine Aufgabe, die ist gemeinsame für system-Administratoren. Die übliche Art, die Speicherplatzinformationen von Festplatten auf einem Windows-Computer zu melden, dreht sich um den folgenden Code.
Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}
Die Informationen, die der obige Code zurückgibt, sehen ungefähr so aus wie in diesem nächsten Screenshot.,
Wie Sie sehen können, zeigt die obige Ausgabe den Laufwerksbuchstaben und die Werte für den freien Speicherplatz zusammen mit anderen Eigenschaften. Während die obige Ausgabe in Ordnung ist, ist sie nicht intuitiv. Die Art und Weise, wie die Informationen dargestellt werden, gibt nicht an, ob sich der Speicherplatz in einem kritischen oder warnenden Zustand oder normal befindet.,
Mit einer PowerShell If-Anweisung zur Verbesserung des Codes
Mit der PowerShell If-Else-Anweisung kann eine intuitivere Ausgabe erreicht werden, indem Bedingungen hinzugefügt werden, um zu überprüfen, ob der freie Speicherplatz über oder unter bestimmten Schwellenwerten liegt. Und diese Schwellenwerte definieren den status des freien Speicherplatzes.
Das folgende Beispielskript führt Folgendes aus:
- Definieren Sie mit dem Wert der Variablen
$Critical
den Schwellenwert, bis zu dem der Prozentsatz des freien Speicherplatzes als kritisch markiert wird., - Definieren Sie mit dem Wert der Variablen
$Warning
den Schwellenwert, bis zu dem der Prozentsatz des freien Speicherplatzes als Warnung markiert wird. - Rufen Sie alle Festplatzinformationen vom lokalen Computer ab
- Durchlaufen Sie alle Festplatzinformationen, um den freien Speicherplatz zu bestimmen und seinen Status zu kennzeichnen.
- Wenn der Prozentsatz des freien Speicherplatzes höher ist als der Wert der Variablen
$Warning
, wird der Speicherplatzstatus als normal markiert., - Wenn der Prozentsatz des freien Speicherplatzes höher ist als der Wert der Variablen
$Critical
, wird der Status des Speicherplatzes als Warnung markiert. - Wenn der Prozentsatz des freien Speicherplatzes kleiner oder gleich dem Wert der Variablen
$Critical
ist, wird der Speicherplatzstatus als kritisch markiert.
- Wenn der Prozentsatz des freien Speicherplatzes höher ist als der Wert der Variablen
- Verfassen Sie die Objekteigenschaften
'Drive Letter'
,'Drive Name'
,'Total Space (GB)'
,'Free Space (GB)'
,'Free Space (%)'
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, wenn Sie mit unterschiedlichen Schwellenwerten testen möchten.
Sobald das Skript gespeichert ist, testen Sie es, indem Sie seinen Namen in PowerShell aufrufen. Unten ist die Beispieldemonstration, wie dieses Skript funktioniert.,
Wie Sie der Ausgabe entnehmen können, wird der Status für jede Festplatte durch den Prozentsatz des freien Speicherplatzes 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 innerhalb des if
– Blocks false zurückgibt.
Innerhalb deselse
Blocks müssen Sie einen weiteren bedingten Test durchführen. Als Ergebnis benötigen Sie eine weitere If-Else-Anweisung. Dieses Szenario wird als verschachteltes 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 wichtigste Punkt ist, sich an die Gerüstplatzierung zu erinnern und sicherzustellen, dass Sie Ihren Code einrücken. Wenn Sie Ihren Code einrücken, können Sie Ihre If-Else-Anweisungen leicht erkennen und trennen.
Beispiel für mehrere / verschachtelte If-Else-Anweisungen
Das folgende Beispielskript zeigt, wie mehrere und verschachtelte If-Else vom Ergebnis voneinander abhängig sein können. Die Logik des folgenden Codes lautet wie folgt.
- Wenn die
$SendEmail
$false
ist, wird das Skript nichts tun und beenden., - Wenn die
$SendEmail
$true
ist, dann dürfen die$From
und$To
Variablen nicht leer oder null sein. Andernfalls wird die$abortFlag
auf 1 gesetzt. - Wenn die
$SendEmail
$true
und die$CCEnabled
$true
ist, darf die Variable$CC
nicht leer oder null sein. Andernfalls wird die$abortFlag
auf 1 gesetzt., - Wenn die
$SendEmail
$true
und die$BCCEnabled
$true
ist, darf die Variable$BCC
nicht leer oder null sein. Andernfalls wird die$abortFlag
auf 1 gesetzt. - Wenn der Wert
$abortFlag
1 ist, wird das Skript an dieser Stelle beendet und nicht fortgesetzt. - Wenn der Wert
$abortFlag
0 ist, wird das Skript bis zum Ende fortgesetzt.
Kopiere den Code unten und speichere ihn als Send-MyMail.ps1
. Ändern Sie noch keine Werte.,
Sobald Sie die Datei gespeichert haben, führen Sie sie wie unten gezeigt in PowerShell aus. Die folgende Demonstration zeigt das Ergebnis des Skripts, wenn die Variablenwerte unverändert bleiben.
als Nächstes Bearbeiten Sie das Skript, und aktualisieren Sie alle Variablen richtig, wie dieses snippet unten.
Nachdem Sie die Variablen bearbeitet haben, speichern Sie das Skript und führen Sie es erneut aus. Es sollte Ihnen das gleiche Ergebnis zeigen, wie unten zu sehen.,
Ändern Sie nun die Variablen und probieren Sie verschiedene Kombinationen aus, um zu testen, wie das verschachtelte If-Else beeinflusst wird. Das Ändern und Testen auf eigene Faust würde Ihnen helfen, die Logik weiter zu verstehen.
Zusammenfassung
In diesem Artikel haben Sie mehr über das bedingte Logikkonstrukt erfahren-das PowerShell If-Else Konstrukt., Mit der If-Else-Anweisung können Skripte bedingte Logik formulieren und die Aktionen ihrer Skripte basierend auf Testergebnissen leiten.
Mit den in diesem Artikel gezeigten Beispielen sollten Sie Wege und Techniken zur Verwendung der If-Else-Anweisung beim Erstellen eines entscheidungsgesteuerten Codes gelernt haben. If-Else kann mit einer einzigen Bedingung einfach sein und wird komplexer, während Sie tiefer in die verschachtelten If-Else-Anweisungen eintauchen.
Was halten Sie von der If-Else-Anweisung? Ist das etwas, von dem Sie denken, dass Sie nach dem Lesen dieses Artikels immer mehr verwenden würden?, Welche anderen Zwecke können Sie sich vorstellen, wo Sie das hier erworbene Wissen anwenden können?
Weiterlesen
- Über If
- Zurück zu den Grundlagen: Die PowerShell foreach Schleife