Exercițiul - Gestionarea erorilor

Finalizat

În această unitate, veți utiliza Azure Cloud Shell în partea dreaptă a ecranului ca terminal Linux. Azure Cloud Shell este un shell pe care îl puteți accesa prin portalul Azure sau la https://shell.azure.com. Nu trebuie să instalați nimic pe computer pentru a-l utiliza.

În acest exercițiu, veți utiliza un bloc de Try/Catch pentru a vă asigura că scriptul nu mai răspunde mai devreme dacă nu este îndeplinită o anumită condiție. Veți lucra din nou cu scriptul de backup.

Să presupunem că ați observat că, uneori, specificați o cale eronată, ceea ce determină copierea de backup a fișierelor care nu ar trebui copiate de rezervă. Decideți să adăugați o parte din gestionarea erorilor.

Notă

Rulați următoarele comenzi doar dacă nu ați finalizat niciunul dintre exercițiile anterioare din acest modul. Presupunem că ați finalizat exercițiile anterioare. Dacă nu ați făcut acest lucru, aveți nevoie de câteva fișiere.

  1. Dacă nu ați finalizat exercițiile anterioare din acest modul, rulați următoarele comenzi bash într-un terminal:

    mkdir webapp
    cd webapp
    touch index.html app.js
    cd ..
    

    Aceste comenzi vor crea un director care conține fișiere asociate de obicei cu dezvoltarea web.

  2. De asemenea, aveți nevoie de un fișier numit Backup.ps1. Rulați aceste comenzi:

    touch Backup.ps1
    code Backup.ps1
    

    Acum că rulați un editor, adăugați codul necesar. Lipiți acest cod în editor și salvați fișierul:

    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"
    }
    

Implementați o cerință de afaceri utilizând Try/Catch

Să presupunem că firma dvs. construiește în mare parte aplicații web. Aceste aplicații constau în fișiere HTML, CSS și JavaScript. Decideți să optimizați scriptul pentru a recunoaște aplicațiile web.

  1. Utilizați un shell PowerShell existent, dacă aveți unul care rulează. În caz contrar, începeți una tastând pwsh într-un terminal:

    pwsh
    
  2. Deschideți Backup.ps1. În secțiunea Param, adăugați o virgulă după ultimul parametru, apoi adăugați următorul parametru:

    [switch]$PathIsWebApp
    

    Ați adăugat un parametru de comutare . Dacă acest parametru este prezent atunci când este invocat scriptul, efectuați verificarea conținutului. După aceea, puteți determina dacă ar trebui creat un fișier de backup.

  3. Sub secțiunea Param, adăugați acest cod, apoi salvați fișierul:

    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)"
       }
    }
    

    Codul precedent verifică mai întâi dacă parametrul $PathIsWebApp este furnizat la momentul rulării. Dacă este, codul continuă să obțină o listă de extensii de fișier din directorul specificat de $Path. În cazul nostru, dacă rulați acea parte a codului în directorul webapp, următorul cod va imprima o listă de elemente:

    (Get-ChildItem $Path).Extension | Sort-Object -Unique
    

    Iată rezultatul:

    .html
    .js
    

    În declarația completă, utilizăm operatorul -match. Operatorul -match așteaptă un model de expresie obișnuit. În acest caz, expresia menționează "oricare dintre extensiile de fișier se potrivesc .html, .jssau .css?" Rezultatul instrucțiunii este salvat în variabila $ContainsApplicationFiles.

    Apoi, blocul If verifică dacă variabila $ContainsApplicationFiles este True sau False. În acest moment, codul poate urma două căi:

    • Dacă directorul sursă este pentru o aplicație web, scriptul scrie "Fișierele sursă arată bine, în continuare".
    • Dacă directorul sursă nu este pentru o aplicație web, scriptul generează o eroare care spune "Nu este o aplicație web". Eroarea este prinsă într-un bloc Catch. Scriptul se oprește și reintroduceți eroarea cu un mesaj de eroare îmbunătățit.
  4. Testați scriptul furnizând comutatorul $PathIsWebApp:

    Notă

    Înainte de a rula scriptul, asigurați-vă că nu există fișiere .zip prezente. Acestea pot fi create atunci când ați terminat exercițiile anterioare în acest modul. Utilizați Remove-Item *zip pentru a le elimina.

    ./Backup.ps1 -PathIsWebApp -Path './webapp'
    

    Scriptul ar trebui să imprime rezultatul care arată asemănător cu acest text:

    Source files looks good, continuing
    Created backup at ./backup-2021-12-30.zip
    
  5. Utilizând terminalul, creați un director denumit aplicație python. În noul director, creați un fișier numit script.py:

    mkdir python-app
    cd python-app
    touch script.py
    cd ..
    

    Directorul dvs. ar trebui să arate acum astfel:

    -| webapp/
    ---| app.js
    ---| index.html
    -| python-app/
    ---| script.py
    -| Backup.ps1
    
  6. În componenta shell PowerShell, rulați scriptul din nou, dar de această dată modificați valoarea -Path pentru a indica spre ./python-app:

    ./Backup.ps1 -PathIsWebApp -Path './python-app'
    

    Scriptul dvs. ar trebui să imprime acum acest text:

    No backup created due to: Not a web app
    

    Rezultatul indică faptul că verificarea nu a reușit. Ar trebui să aibă, deoarece nu există fișiere în director care au o extensie de .html, .jssau .css. Codul dvs. a ridicat o excepție care a fost prinsă de blocul dvs. Catch, iar scriptul s-a oprit mai devreme.

    Felicitări! Ați implementat o cerință de afaceri.