تمرين - معالجة الأخطاء
في هذا التمرين، ستستخدم الكتلة Try/Catch لضمان توقف البرنامج النصي عن الاستجابة مبكرًا في حالة عدم استيفاء شرط معين. ستعمل مرةً أخرى مع النسخة الاحتياطية من برنامجك النصي.
لنفترض أنك لاحظت أنك في بعض الأحيان تحدد مسارًا خاطئًا، مما يؤدي إلى إنشاء نسخ احتياطي للملفات التي لا ينبغي نسخها احتياطيًا. قررت إضافة شيئًا ما من إدارة الأخطاء.
إشعار
هذا التمرين اختياري. إذا كنت ترغب في إكمال هذا التمرين، فستحتاج إلى إنشاء اشتراك Azure قبل البدء. إذا لم يكن لديك حساب Azure أو كنت لا ترغب في إنشاء حساب في الوقت الحالي، فيمكنك قراءة الإرشادات حتى تفهم المعلومات التي يتم تقديمها.
إشعار
في هذه الوحدة، يمكنك استخدام Azure Cloud Shell كمحطة طرفية. يمكنك الوصول إلى Cloud Shell من خلال مدخل Microsoft Azure أو تسجيل الدخول إلى Cloud Shell. لست مضطرا لتثبيت أي شيء على جهاز الكمبيوتر أو الكمبيوتر المحمول لاستخدامه.
إشعار
شغَّل الأوامر التالية فقط إذا لم تكن قد أكملت أياً من التمارين السابقة في هذه الوحدة. نفترض أنك أكملت التمارين السابقة. إذا لم تكن قد أكملتها، فقد تحتاج إلى عدد قليل من الملفات.
إذا لم تكن قد أكملت التمارين السابقة في هذه الوحدة، فشغَّل الأوامر التالية في نافذة طرفية:
mkdir webapp cd webapp touch index.html app.js cd ..ستنشئ هذه الأوامر دليلًا يحتوي على ملفات عادةً ما تكون مقترنة بتطوير الويب.
تحتاج أيضًا إلى ملف باسم Backup.ps1. شغَّل هذه الأوامر:
touch Backup.ps1 code Backup.ps1الآن بعد أن أصبح لديك محرر قيد التشغيل، أضف التعليمة البرمجية المطلوبة. الصق هذه التعليمات البرمجية في المحرر واحفظ الملف:
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" }
نفِّذ متطلبات العمل باستخدام Try/Catch
افترض أن شركتك تبني تطبيقات الويب في الغالب. تتكون هذه التطبيقات من ملفات HTML وCSS وJavaScript. تقرر تحسين البرنامج النصي للتعرف إلى تطبيقات الويب.
استخدم واجهة PowerShell موجودة، إذا كان لديك واحدة قيد التشغيل. وإلا، فابدأ تشغيل واحدة بكتابة
pwshفي محطة طرفية:pwshافتح Backup.ps1. في القسم
Param، أضِف فاصلة بعد المعلمة الأخيرة ثم أضف المعلمة التالية:[switch]$PathIsWebAppلقد أضفت معلمة تبديل. إذا كانت هذه المعلمة موجودة عند استدعاء البرنامج النصي، يمكنك إجراء فحصًا للمحتوى. بعد ذلك، يمكنك تحديد ما إذا كان يجب إنشاء نسخة احتياطية من الملف أم لا.
ضمن قسم
Param، أضف التعليمات البرمجية هذه، ثم احفظ الملف: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)" } }تتحقق التعليمات البرمجية السابقة أولًا ما إذا كانت المعلمة
$PathIsWebAppقد جرى تزويدها في وقت التشغيل. إذا كان الأمر كذلك، ستستمر التعليمات البرمجية في الحصول على قائمة بملحقات أسماء الملفات من الدليل المحدد بواسطة$Path. في الحالة الموجودة لدينا،إذا شغلت هذا الجزء من التعليمات البرمجية على دليل webapp، فإن التعليمات البرمجية التالية ستطبع قائمة من العناصر:(Get-ChildItem $Path).Extension | Sort-Object -Uniqueوهذه هي المخرجات:
.html .jsفي العبارة الكاملة، نستخدم عامل التشغيل
-match. يتوقع عامل التشغيل-matchنمط تعبير عادي. في هذه الحالة، التعبير ينص على "هل تتطابق أي من ملحقات الملفات مع.htmlأو.jsأو.css؟" يتم حفظ نتيجة العبارة في المتغير$ContainsApplicationFiles.ثم تتحقق الكتلة
Ifمما إذا كان المتغير$ContainsApplicationFilesTrueأمFalse. عند هذه النقطة، يمكن أن تأخذ التعليمات البرمجية مسارين:- إذا كان الدليل المصدر لتطبيق ويب، يكتب البرنامج النصي "Source files look good, continuing".
-
إذا لم يكن الدليل المصدر لتطبيق ويب، يطرح البرنامج النصي خطأ ينص على "Not a web app." تم تسجيل الخطأ في الكتلة
Catch. يتوقف البرنامج النصي، وتعيد طرح الخطأ برسالة خطأ مُحسّنة.
اختبر البرنامج النصي عن طريق تزويد مفتاح التبديل
$PathIsWebApp:إشعار
قبل تشغيل البرنامج النصي، تأكد من عدم وجود ملفات .zip. ربما جرى إنشاؤها عندما أكملت التدريبات السابقة في هذه الوحدة. استخدم
Remove-Item *zipلإزالتها../Backup.ps1 -PathIsWebApp -Path './webapp'يجب أن يطبع البرنامج النصي الإخراج الذي يشبه هذا النص:
Source files looks good, continuing Created backup at ./backup-2021-12-30.zipباستخدام النافذة الطرفية، أنشئ دليلاً باسم python-app. في الدليل الجديد، أنشئ ملفًا يُسمى script.py:
mkdir python-app cd python-app touch script.py cd ..يجب أن يبدو دليلك الآن كما يلي:
-| webapp/ ---| app.js ---| index.html -| python-app/ ---| script.py -| Backup.ps1في PowerShell shell، شغَّل البرنامج النصي مرةً أخرى، ولكن هذه المرة، قم بتغيير القيمة
-Pathللإشارة إلى./python-app:./Backup.ps1 -PathIsWebApp -Path './python-app'يجب أن يطبع برنامجك النصي الآن هذا النص:
No backup created due to: Not a web appيشير الإخراج إلى فشل الفحص. يجب أن يكون قد فعل، لأنه لا توجد ملفات في الدليل الذي يحتوي على ملحق اسم ملف .html أو .js أو .css. أثارت تعليماتك البرمجية استثناء اكتشفته الكتلة
Catchخاصتك، وتوقف البرنامج النصي في وقت مبكر.تهانينا! لقد نفذت أحد متطلبات العمل.