Exercice – Contrôle du flux
Lorsque vous écrivez des scripts, ils peuvent fonctionner comme prévu tant que vous saisissez des valeurs raisonnables. Toutefois, si le temps passe ou qu’un autre utilisateur exécute le script, il est possible qu’une valeur inattendue soit entrée ou qu’une autre condition préalable ne soit pas remplie. Pour éviter des situations comme celle-ci, vous devez nettoyer votre entrée ; autrement dit, vous devez ajouter une logique à votre script pour vous assurer qu’il quitte tôt si quelque chose est incorrect et continue à s’exécuter uniquement si tout est correct.
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 seulement si vous n'avez encore effectué aucun des exercices précédents de 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.
Ajouter des vérifications à vos paramètres de script
Vous avez déjà utilisé un script de sauvegarde jusqu’à présent et vous y avez ajouté des paramètres. Vous pouvez sécuriser encore votre script en ajoutant des vérifications garantissant que le script se poursuit uniquement s’il obtient des entrées de paramètres raisonnables.
Examinons le script actuel. Si vous avez terminé l’exercice précédent, vous devez avoir un fichier appelé Backup.ps1. Sinon, créez le fichier et ouvrez-le dans votre éditeur de code :
touch Backup.ps1
code Backup.ps1
Ajoutez ce code au fichier :
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')"
Comme vous le savez, le script cessera de répondre si $Path pointe vers un répertoire qui n’existe pas.
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 :pwshAjoutez une vérification pour le paramètre
$Pathen ajoutant ce code juste après la sectionParam, puis enregistrez le fichier :If (-Not (Test-Path $Path)) { Throw "The source directory $Path does not exist, please specify an existing directory" }Vous avez ajouté un test qui vérifie si
$Pathexiste. Si ce n’est pas le cas, vous arrêtez le script. Vous expliquez également aux utilisateurs ce qui s’est passé pour qu’ils puissent résoudre le problème.Assurez-vous que le script fonctionne comme prévu en l’exécutant :
./Backup.ps1 -Path './app'Cette sortie doit s’afficher :
Throw "The source directory $Path does not exist, please specify … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | The source directory ./app does not exist, please specify an | existing directoryVérifiez que le script fonctionne toujours comme prévu. (Veillez à supprimer tous les fichiers de sauvegarde de l’exercice précédent avant de continuer.)
./Backup.ps1 -Path './webapp'Vous devez obtenir un message similaire à ceci :
Created backup at ./backup-2021-01-19.zipSi vous exécutez à nouveau le script, il cesse de répondre. Il vous informe que le fichier zip existe déjà. Corrigeons ce problème. Nous allons ajouter du code pour nous assurer que la sauvegarde est créée seulement si aucun autre fichier zip de sauvegarde du jour même n’existe.
Remplacez le code dans le fichier par ce code, puis 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" }Vous avez fait deux choses ici. Tout d’abord, vous avez créé une nouvelle variable,
$DestinationFile. Cette variable permet de vérifier facilement si le chemin existe déjà. Deuxièmement, vous avez ajouté une logique qui indique de « créer le fichier zip seulement si le fichier n’existe pas déjà ». Ce code implémente cette logique :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" }Exécutez ce code pour vous assurer que le script ne cessera pas de répondre et que votre logique sera appliquée :
./Backup.ps1 -Path './webapp'Cette sortie doit s’afficher :
Write-Error: Today's backup already exists
Félicitations ! Vous avez rendu votre script un peu plus sûr. (Notez qu’il est encore possible de fournir une entrée problématique à $DestinationPath, par exemple.) L’objectif de cet exercice est de montrer comment ajouter des vérifications. Selon l’environnement dans lequel le script s’exécutera, vous souhaiterez peut-être plus ou moins de vérifications. Vous pouvez même souhaiter des tests écrits. Tout dépend du contexte.