Übung: Flusssteuerung
Die von Ihnen geschriebenen Skripts funktionieren wahrscheinlich wie vorgesehen, solange Sie sinnvolle Werte eingeben. Aber im Laufe der Zeit oder, wenn eine andere Person das Skript ausführt, kann es vorkommen, dass jemand einen unerwarteten Wert eingibt oder dass eine andere Vorbedingung nicht erfüllt wird. Zum Vermeiden solcher Situationen sollten Sie Ihre Eingabe bereinigen, das heißt, Sie sollten Ihr Skript um Logik ergänzen, die es frühzeitig beendet, wenn etwas nicht stimmt, und es nur dann weiter ausführt, wenn alles in Ordnung ist.
Hinweis
Diese Übung ist optional. Wenn Sie diese Übung abschließen möchten, müssen Sie ein Azure-Abonnement erstellen, bevor Sie beginnen. Wenn Sie nicht über ein Azure-Konto verfügen oder derzeit kein Azure-Konto erstellen möchten, können Sie die Anweisungen durchlesen, damit Sie die informationen verstehen, die präsentiert werden.
Hinweis
In dieser Einheit verwenden Sie Azure Cloud Shell als Terminal. Sie können über das Azure-Portal oder die Cloud Shell-Anmeldung auf die Cloud Shell zugreifen. Sie müssen nichts auf Ihrem PC oder Laptop installieren, um es zu verwenden.
Hinweis
Führen Sie die folgenden Befehle nur aus, wenn Sie noch keine der vorherigen Übungen in diesem Modul abgeschlossen haben. Wir gehen davon aus, dass Sie die vorherigen Übungen abgeschlossen haben. Wenn Sie dies noch nicht getan haben, benötigen Sie einige Dateien.
Wenn Sie die vorherigen Übungen in diesem Modul noch nicht abgeschlossen haben, führen Sie die folgenden Bash-Befehle in einem Terminal aus:
mkdir webapp cd webapp touch index.html app.js cd ..Mit diesen Befehlen wird ein Verzeichnis mit Dateien erstellt, die normalerweise zum Bereich der Webentwicklung gehören.
Hinzufügen von Überprüfungen zu Ihren Skriptparametern
Sie haben bisher mit einem Sicherungsskript gearbeitet und diesem Parameter hinzugefügt. Sie können die Verwendung Ihres Skripts noch sicherer gestalten, indem Sie Überprüfungen hinzufügen, mit denen sichergestellt wird, dass das Skript nur fortgesetzt wird, wenn ihm sinnvolle Parametereingaben übergeben werden.
Sehen wir uns das aktuelle Skript an. Wenn Sie die vorherige Übung abgeschlossen haben, sollten Sie über eine Datei namens Backup.ps1verfügen. Falls nicht, erstellen Sie die Datei, und öffnen Sie sie in Ihrem Code-Editor:
touch Backup.ps1
code Backup.ps1
Fügen Sie der Datei folgenden Code hinzu:
Param(
[string]$Path = './app',
[string]$DestinationPath = './'
)
$date = Get-Date -format "yyyy-MM-dd"
Compress-Archive -Path $Path -CompressionLevel 'Fastest' -DestinationPath "$($DestinationPath + 'backup-' + $date)"
Write-Host "Created backup at $($DestinationPath + 'backup-' + $date + '.zip')"
Wie Sie wissen, reagiert das Skript nicht mehr, wenn $Path auf ein Verzeichnis zeigt, das nicht vorhanden ist.
Verwenden Sie eine vorhandene PowerShell-Shell, wenn Sie eine haben, die ausgeführt wird. Starten Sie andernfalls eine, indem Sie
pwshin ein Terminal eingeben:pwshFügen Sie eine Überprüfung für den
$Path-Parameter hinzu, indem Sie diesen Code direkt nach demParam-Abschnitt hinzufügen, und speichern Sie die Datei dann:If (-Not (Test-Path $Path)) { Throw "The source directory $Path does not exist, please specify an existing directory" }Sie haben einen Test hinzugefügt, der überprüft, ob
$Pathvorhanden ist. Wenn dies nicht der Fall ist, beenden Sie das Skript. Außerdem erklären Sie Benutzern, was schief gelaufen ist, damit sie das Problem beheben können.Stellen Sie sicher, dass das Skript wie vorgesehen funktioniert, indem Sie es ausführen:
./Backup.ps1 -Path './app'Die folgende Ausgabe sollte angezeigt werden:
Throw "The source directory $Path does not exist, please specify … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | The source directory ./app does not exist, please specify an | existing directoryTesten Sie, dass das Skript weiterhin wie vorgesehen funktioniert. (Entfernen Sie unbedingt alle Sicherungsdateien aus der vorherigen Übung, bevor Sie fortfahren.)
./Backup.ps1 -Path './webapp'Die angezeigte Ausgabe sollte so ähnlich aussehen wie die folgende:
Created backup at ./backup-2021-01-19.zipWenn Sie das Skript noch mal ausführen, reagiert es nicht mehr. Sie werden benachrichtigt, dass die ZIP-Datei bereits vorhanden ist. Beheben wir das Problem. Wir fügen Code hinzu, um sicherzustellen, dass die Sicherung nur erstellt wird, wenn keine andere ZIP-Sicherungsdatei vom aktuellen Tag vorhanden ist.
Ersetzen Sie den Code in der Datei durch diesen Code, und speichern Sie die Datei dann:
Param( [string]$Path = './app', [string]$DestinationPath = './' ) If (-Not (Test-Path $Path)) { Throw "The source directory $Path does not exist, please specify an existing directory" } $date = Get-Date -format "yyyy-MM-dd" $DestinationFile = "$($DestinationPath + 'backup-' + $date + '.zip')" If (-Not (Test-Path $DestinationFile)) { Compress-Archive -Path $Path -CompressionLevel 'Fastest' -DestinationPath "$($DestinationPath + 'backup-' + $date)" Write-Host "Created backup at $($DestinationPath + 'backup-' + $date + '.zip')" } Else { Write-Error "Today's backup already exists" }Sie haben hier zwei Aufgaben erledigt. Zuerst haben Sie eine neue Variable erstellt:
$DestinationFile. Mit dieser Variablen können Sie ganz einfach überprüfen, ob der Pfad bereits vorhanden ist. Zweitens haben Sie Logik hinzugefügt, die festlegt, dass „die ZIP-Datei nur erstellt wird, wenn die Datei noch nicht vorhanden ist“. Diese Logik wird von diesem Code implementiert:If (-Not (Test-Path $DestinationFile)) { Compress-Archive -Path $Path -CompressionLevel 'Fastest' -DestinationPath "$($DestinationPath + 'backup-' + $date)" Write-Host "Created backup at $($DestinationPath + 'backup-' + $date + '.zip')" } Else { Write-Error "Today's backup already exists" }Führen Sie den Code aus, um sicherzustellen, dass das Skript nicht mehr reagiert und die von Ihnen erstellte Logik angewendet wird:
./Backup.ps1 -Path './webapp'Die folgende Ausgabe sollte angezeigt werden:
Write-Error: Today's backup already exists
Herzlichen Glückwunsch. Sie haben Ihr Skript ein wenig sicherer gemacht. (Beachten Sie, dass auch weiterhin problematische Eingaben für z. B. $DestinationPath möglich sind.) In dieser Übung wird gezeigt, wie Sie Überprüfungen hinzufügen. Je nach Umgebung, in der das Skript ausgeführt wird, kann es sinnvoll sein, weniger oder mehr Überprüfungen durchzuführen. Möglicherweise möchten Sie sogar schriftliche Prüfungen verlangen – es hängt ganz vom Kontext ab.