Exercițiul - Gestionarea erorilor
Î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.
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.
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.
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
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.
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
,.js
sau.css
?" Rezultatul instrucțiunii este salvat în variabila$ContainsApplicationFiles
.Apoi, blocul
If
verifică dacă variabila$ContainsApplicationFiles
esteTrue
sauFalse
. Î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.
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
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
Î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.