Cvičení – zpracování chyb

Dokončeno

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ů.

  1. 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.

  2. 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í.

  1. 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
    
  2. 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.

  3. 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, .jsnebo .css?" Výsledek příkazu se uloží do proměnné $ContainsApplicationFiles.

    If Blok pak zkontroluje, jestli $ContainsApplicationFiles je True proměnná nebo False. 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.
  4. 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
    
  5. 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
    
  6. 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.