Cvičení – zpracování chyb
V této lekci použijete Azure Cloud Shell na pravé straně obrazovky jako terminál Linuxu. Azure Cloud Shell je prostředí, ke které můžete přistupovat prostřednictvím webu Azure Portal nebo na adrese https://shell.azure.com. Abyste ho mohli používat, nemusíte na počítač nic instalovat.
V tomto cvičení použijete Try/Catch
blok, abyste zajistili, že skript přestane reagovat včas, pokud není splněna určitá podmínka. Znovu budete pracovat se záložním skriptem.
Řekněme, že jste si všimli, že někdy zadáte chybnou cestu, která způsobuje zálohování souborů, které by se neměly zálohovat. Rozhodnete se přidat správu chyb.
Poznámka:
Následující příkazy spusťte jenom v případě, že jste nedokončili žádná z předchozích cvičení v tomto modulu. Předpokládáme, že jste dokončili předchozí cvičení. Pokud jste to ještě neudělali, potřebujete několik souborů.
Pokud jste nedokončili předchozí cvičení v tomto modulu, spusťte v terminálu následující příkazy Bash:
mkdir webapp cd webapp touch index.html app.js cd ..
Tyto příkazy vytvoří adresář, který obsahuje soubory obvykle spojené s vývojem webu.
Potřebujete také soubor s názvem Backup.ps1. Spusťte tyto příkazy:
touch Backup.ps1 code Backup.ps1
Teď, když máte spuštěný editor, přidejte požadovaný kód. Vložte tento kód do editoru a uložte soubor:
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" }
Implementace obchodního požadavku pomocí Try/Catch
Předpokládejme, že vaše společnost většinou vytváří webové aplikace. Tyto aplikace se skládají ze souborů HTML, CSS a JavaScript. Rozhodnete se optimalizovat skript pro rozpoznávání webových aplikací.
Pokud máte spuštěné prostředí PowerShell, použijte existující prostředí PowerShell. V opačném případě začněte zadáním
pwsh
do terminálu:pwsh
Otevřete Backup.ps1.
Param
V části přidejte za poslední parametr čárku a pak přidejte následující parametr:[switch]$PathIsWebApp
Přidali jste parametr přepínače. Pokud je tento parametr k dispozici při vyvolání skriptu, provedete kontrolu obsahu. Potom můžete určit, jestli se má vytvořit záložní soubor.
Param
V části přidejte tento kód a pak soubor uložte: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)" } }
Předchozí kód nejprve zkontroluje, jestli je parametr
$PathIsWebApp
zadaný za běhu. Pokud ano, kód dál získá seznam přípon souborů z adresáře určeného uživatelem$Path
. Pokud v našem případě spustíte tuto část kódu v adresáři webové aplikace , následující kód vytiskne seznam položek:(Get-ChildItem $Path).Extension | Sort-Object -Unique
Tady je výstup:
.html .js
V úplném příkazu používáme
-match
operátor. Operátor-match
očekává vzor regulárního výrazu. V tomto případě výraz uvádí," že se některá z přípon souborů shoduje.html
,.js
nebo.css
?" Výsledek příkazu se uloží do proměnné$ContainsApplicationFiles
.If
Blok pak zkontroluje, jestli$ContainsApplicationFiles
jeTrue
proměnná neboFalse
. V tomto okamžiku může kód mít dvě cesty:- Pokud je zdrojový adresář pro webovou aplikaci, skript zapíše "Zdrojové soubory vypadají dobře, pokračujte".
-
Pokud zdrojový adresář není pro webovou aplikaci, skript vyvolá chybu s informacemi o tom, že se nejedná o webovou aplikaci. Chyba je zachycena
Catch
v bloku. Skript se zastaví a chybu znovu zvětšíte vylepšenou chybovou zprávou.
Otestujte skript zadáním přepínače
$PathIsWebApp
:Poznámka:
Před spuštěním skriptu se ujistěte, že neexistují žádné .zip soubory. Mohly se vytvořit, když jste v tomto modulu dokončili předchozí cvičení. Slouží
Remove-Item *zip
k jejich odebrání../Backup.ps1 -PathIsWebApp -Path './webapp'
Skript by měl vytisknout výstup podobný tomuto textu:
Source files looks good, continuing Created backup at ./backup-2021-12-30.zip
Pomocí terminálu vytvořte adresář s názvem python-app. V novém adresáři vytvořte soubor s názvem script.py:
mkdir python-app cd python-app touch script.py cd ..
Adresář by teď měl vypadat takto:
-| webapp/ ---| app.js ---| index.html -| python-app/ ---| script.py -| Backup.ps1
V prostředí PowerShell spusťte skript znovu, ale tentokrát změňte
-Path
hodnotu tak, aby odkazovala na./python-app
:./Backup.ps1 -PathIsWebApp -Path './python-app'
Váš skript by teď měl vytisknout tento text:
No backup created due to: Not a web app
Výstup označuje, že kontrola selhala. Měl by mít, protože v adresáři nejsou žádné soubory, které mají příponu .html, .js nebo .css. Váš kód vyvolal výjimku, kterou zachytil váš
Catch
blok, a skript se zastavil brzy.Gratulujeme! Implementovali jste obchodní požadavek.