Übung: Fehlerbehandlung
In dieser Übung stellen Sie mit einem Try/Catch-Block sicher, dass das Skript nicht frühzeitig stoppt, wenn eine bestimmte Bedingung nicht erfüllt ist. Sie arbeiten wieder mit Ihrem Sicherungsskript.
Sie haben beispielsweise bemerkt, dass Sie manchmal einen fehlerhaften Pfad angeben, der eine Sicherung von Dateien verursacht, die nicht gesichert werden sollten. Sie entscheiden sich, eine Fehlerverwaltung hinzuzufügen.
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 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.
Sie benötigen auch eine Datei mit dem Namen Backup.ps1. Führen Sie die folgenden Befehle aus:
touch Backup.ps1 code Backup.ps1Nachdem Sie nun einen Editor ausgeführt haben, fügen Sie den erforderlichen Code hinzu. Fügen Sie diesen Code in den Editor ein, und speichern Sie die Datei:
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" }
Implementieren einer Geschäftsanforderung mit Try/Catch
Angenommen, Ihr Unternehmen erstellt hauptsächlich Web-Apps. Diese Apps bestehen aus HTML-, CSS- und JavaScript-Dateien. Sie entscheiden sich für die Optimierung des Skripts, damit dieses Web-Apps erkennt.
Verwenden Sie eine vorhandene PowerShell-Shell, wenn Sie eine haben, die ausgeführt wird. Starten Sie andernfalls eine, indem Sie
pwshin ein Terminal eingeben:pwshÖffnen Backup.ps1. Fügen Sie im Abschnitt
Paramhinter dem letzten Parameter ein Komma und dann den folgenden Parameter hinzu:[switch]$PathIsWebAppSie haben einen Switch-Parameter hinzugefügt. Wenn dieser Parameter beim Aufrufen des Skripts vorhanden ist, wird eine Überprüfung des Inhalts durchgeführt. Danach können Sie festlegen, ob eine Sicherungsdatei erstellt werden soll.
Fügen Sie im
ParamAbschnitt diesen Code hinzu, und speichern Sie dann die Datei:If ($PathIsWebApp -eq $True) { Try { $ContainsApplicationFiles = "$((Get-ChildItem $Path).Extension | Sort-Object -Unique)" -match '\.js|\.html|\.css' If ( -Not $ContainsApplicationFiles) { Throw "Not a web app" } Else { Write-Host "Source files look good, continuing" } } Catch { Throw "No backup created due to: $($_.Exception.Message)" } }Der vorangehende Code überprüft zunächst, ob der Parameter
$PathIsWebAppzur Laufzeit bereitgestellt wird. Wenn ja, ruft der Code weiterhin eine Liste der Dateierweiterungen aus dem Verzeichnis ab, das durch$Pathangegeben wird. Wenn Sie diesen Teil des Codes im Webapp-Verzeichnis ausführen, druckt der folgende Code eine Liste von Elementen:(Get-ChildItem $Path).Extension | Sort-Object -UniqueSo sieht die Ausgabe aus:
.html .jsIn der vollständigen Anweisung verwenden wir den
-match-Operator. Der-match-Operator erwartet ein Muster für reguläre Ausdrücke. In diesem Fall besagt der Ausdruck „stimmt eine der Dateierweiterungen mit.html,.jsoder.cssüberein?“ Das Ergebnis der Anweisung wird in der Variable$ContainsApplicationFilesgespeichert.Anschließend überprüft der
If-Block, ob die Variable$ContainsApplicationFilesTrueoderFalseist. An diesem Punkt kann der Code zwei Pfade nehmen:- Wenn das Quellverzeichnis für eine Web-App bestimmt ist, schreibt das Skript "Quelldateien sehen gut aus, fortsetzen".
-
Wenn das Quellverzeichnis nicht für eine Web-App bestimmt ist, löst das Skript einen Fehler aus, der "Keine Web-App" besagt. Der Fehler wird in einem
CatchBlock abgefangen. Das Skript wird beendet, und Sie geben den Fehler mit einer verbesserten Fehlermeldung erneut aus.
Testen Sie das Skript, indem Sie den Schalter
$PathIsWebAppbereitstellen:Hinweis
Stellen Sie vor dem Ausführen des Skripts sicher, dass keine ZIP-Dateien vorhanden sind. Möglicherweise wurden welche erstellt, als Sie vorherige Übungen in diesem Modul durchgeführt haben. Verwenden Sie
Remove-Item *zip, um sie zu entfernen../Backup.ps1 -PathIsWebApp -Path './webapp'Das Skript sollte einen ähnlichen Text wie diesen ausgeben:
Source files looks good, continuing Created backup at ./backup-2021-12-30.zipErstellen Sie mit Ihrem Terminal ein Verzeichnis namens python-app. Erstellen Sie im neuen Verzeichnis eine Datei namens script.py:
mkdir python-app cd python-app touch script.py cd ..Das Verzeichnis sollte jetzt wie folgt aussehen:
-| webapp/ ---| app.js ---| index.html -| python-app/ ---| script.py -| Backup.ps1Führen Sie das Skript in der PowerShell-Shell noch mal aus, ändern Sie dieses Mal jedoch den
-Path-Wert so, dass er auf./python-appverweist:./Backup.ps1 -PathIsWebApp -Path './python-app'Ihr Skript sollte nun diesen Text ausgeben:
No backup created due to: Not a web appDie Ausgabe gibt an, dass die Überprüfung fehlgeschlagen ist. Das ist richtig so, da sich im Verzeichnis keine Dateien mit einer HTML-, JS- oder CSS-Erweiterung befinden. Ihr Code hat eine Ausnahme ausgelöst, die von Ihrem
Catch-Block abgefangen wurde, und das Skript wurde frühzeitig beendet.Glückwunsch! Sie haben eine geschäftliche Anforderung implementiert.