Exercice – Traitement des erreurs
Dans cet exercice, vous allez utiliser un bloc Try/Catch pour vous assurer que le script cesse de répondre de façon anticipée si une condition donnée n’est pas remplie. Vous travaillerez à nouveau avec votre script de sauvegarde.
Supposons que vous ayez remarqué que vous spécifiez parfois un chemin erroné, ce qui entraîne la sauvegarde de fichiers qui ne devraient pas être sauvegardés. Vous décidez d’ajouter une gestion des erreurs.
Notes
Cet exercice est facultatif. Si vous souhaitez effectuer cet exercice, vous devez créer un abonnement Azure avant de commencer. Si vous n’avez pas de compte Azure ou si vous ne souhaitez pas en créer un à ce stade, vous pouvez lire les instructions pour comprendre les informations qui sont présentées.
Notes
Dans cette unité, vous utilisez Azure Cloud Shell comme terminal. Vous pouvez accéder à Cloud Shell via le portail Azure ou la connexion Cloud Shell. Vous n’avez pas besoin d’installer quoi que ce soit sur votre PC ou ordinateur portable pour l’utiliser.
Notes
Exécutez les commandes suivantes uniquement si vous n’avez effectué aucun des exercices précédents dans ce module. Nous supposons que vous avez effectué les exercices précédents. Si ce n’est pas le cas, vous avez besoin de quelques fichiers.
Si vous n’avez pas effectué les exercices précédents de ce module, exécutez les commandes bash suivantes dans un terminal :
mkdir webapp cd webapp touch index.html app.js cd ..Ces commandes créent un répertoire contenant les fichiers généralement associés à un développement web.
Vous avez également besoin d’un fichier nommé Backup.ps1. Exécutez ces commandes :
touch Backup.ps1 code Backup.ps1Maintenant que vous avez un éditeur en cours d’exécution, ajoutez le code requis. Collez ce code dans l’éditeur et enregistrez le fichier :
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" }
Implémenter un besoin métier en utilisant Try/Catch
Supposons que votre entreprise crée principalement des applications web. Ces applications se composent de fichiers HTML, CSS et JavaScript. Vous décidez d’optimiser le script pour reconnaître les applications web.
Utilisez un interpréteur de commandes PowerShell existant si vous en avez un d’opérationnel. Dans le cas contraire, démarrez-en un en tapant
pwshdans un terminal :pwshOuvrez Backup.ps1. Dans la section
Param, ajoutez une virgule après le dernier paramètre, puis ajoutez le paramètre suivant :[switch]$PathIsWebAppVous avez ajouté un paramètre de commutateur. Si ce paramètre est présent lorsque le script est appelé, vous effectuez la vérification du contenu. Après cela, vous pouvez déterminer si un fichier de sauvegarde doit être créé.
Sous la section
Param, ajoutez ce code, puis enregistrez le fichier :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)" } }Le code précédent commence par vérifier si le paramètre
$PathIsWebAppest fourni au moment de l’exécution. Si c’est le cas, le code continue d’obtenir la liste des extensions de fichier à partir du répertoire spécifié par$Path. Dans notre cas, si vous exécutez cette partie du code sur le répertoire webapp , le code suivant imprime une liste d’éléments :(Get-ChildItem $Path).Extension | Sort-Object -UniqueVoici le format :
.html .jsDans l’instruction complète, nous utilisons l’opérateur
-match. L’opérateur-matchattend un modèle d’expression régulière. Dans ce cas, l’expression stipule « Une ou plusieurs extensions de fichier correspondent-elles à.html,.jsou.css? ». Le résultat de l’instruction est enregistré dans la variable$ContainsApplicationFiles.Ensuite, le bloc
Ifvérifie si la variable$ContainsApplicationFilesa pour valeurTrueouFalse. À ce stade, le code peut accepter deux chemins d’accès :- Si le répertoire source est destiné à une application web, le script affiche « Les fichiers sources semblent en ordre, on continue ».
-
Si le répertoire source n’est pas destiné à une application web, le script génère une erreur indiquant « Pas une application web ». L’erreur est interceptée dans un
Catchbloc. Le script s’arrête et vous générez à nouveau l’erreur avec un message d’erreur amélioré.
Testez le script en fournissant le commutateur
$PathIsWebApp:Notes
Avant d’exécuter le script, assurez-vous qu’aucun fichier .zip n’est présent. De tels fichiers ont pu être créés quand vous avez effectué les exercices précédents de ce module. Utilisez
Remove-Item *zippour les supprimer../Backup.ps1 -PathIsWebApp -Path './webapp'Le script doit afficher une sortie similaire à ce texte :
Source files looks good, continuing Created backup at ./backup-2021-12-30.zipÀ l’aide de votre terminal, créez un répertoire nommé python-app. Dans le nouveau répertoire, créez un fichier appelé script.py :
mkdir python-app cd python-app touch script.py cd ..Votre répertoire doit maintenant ressembler à ceci :
-| webapp/ ---| app.js ---| index.html -| python-app/ ---| script.py -| Backup.ps1Dans l’interpréteur de commandes PowerShell, réexécutez le script, mais cette fois en changeant la valeur
-Pathpour qu’elle pointe sur./python-app:./Backup.ps1 -PathIsWebApp -Path './python-app'Votre script doit maintenant afficher ce texte :
No backup created due to: Not a web appLa sortie indique que la vérification a échoué. Cela devait se produire, car le répertoire ne contient aucun fichier doté d’une extension .html, .js ni .css. Votre code a levé une exception qui a été interceptée par votre bloc
Catch, et le script s’est arrêté de façon anticipée.Félicitations ! Vous avez implémenté un besoin métier.