PowerShell / المتوسط: الربط والأخطاء والوحدات والبيانات والاختبارات / الدرس 8
معالجة الأخطاء وحالة الأصلي عمداً
افصل الاستثناء المنهي والخطأ غير المنهي والتفضيلات وcatch ونتائج الأصلي دون اعتبار صمت الطرفية نجاحاً.
في هذه الصفحة
أهداف الدرس
- شرح متى تعالج try/catch الخطأ.
- استخدام ErrorAction والتفضيلات بنطاق مراجع.
- حفظ رموز الأصلي ودليل الفشل الأول.
لـ PowerShell أكثر من سلوك فشل
تنهي أخطاء عبارة أو تفك التنفيذ، وتبلغ أخرى وتكمل. تمسك catch المنهي لا كل رسالة خطأ. قد ينتج الأمر جزئياً ثم يفشل؛ فصنف الأثر والمقبول ولا تسكت الكل لتجميل التقرير. حدد الجزئي والمرفوض بالعقد. وقد تكون البيانات التي خرجت قبل الفشل جزئية تماماً رغم صحة مخططها؛ لذلك يحتاج المستدعي سياسة تحدد قبولها أو رفضها عند غياب الإكمال.
ErrorAction سياسة لا رجوع
قد يحول Stop خطأ مناسباً لمسار منهي وتؤثر التفضيلات أوسع فحدها أو أعدها. تختلف Ignore وSilentlyContinue ولا تصححان الفعل. تكشف الصرامة أخطاء لا مخططاً أو أماناً. احفظ ErrorRecord ولا تستبدله بنجاح عام؛ للتعافي لاحق وملكية آثار. ولا تحول تفضيلات الإبلاغ العملية نفسها إلى آمنة أو تكرارية، كما لا تثبت إزالة الرسالة من الشاشة أن الحالة المطلوبة تحققت.
التقاط الاستثناء المقصود وفصل التنظيف
تميز catch النوعية الأنواع وتحد العامة الواجهة، وتفيد finally تنظيفاً لا عكس الملتزم أو كل فشل جهاز. لا تعد فارغاً لكل فشل إذا احتاجه المستدعي. يرمي المثال استثناءه ويعالجه دون ملف أو مضيف ويبقى غير مختبر. ويجب ألا يخفي catch عام نوع الفشل الذي يحتاجه المستدعي لاتخاذ قرار، وألا يعيد مجموعة فارغة تجعل العطل شبيهاً بنتيجة صحيحة بلا عناصر.
try {
throw [System.ArgumentException]::new('synthetic input')
}
catch [System.ArgumentException] {
'handled argument contract'
}
finally {
$cleanupState = 'complete'
}
المقصود الرسالة المعلنة والمثال غير قابل للتشغيل ولا يثبت ErrorRecord أو التنظيف بنسخة مثبتة.
رموز خروج الأصلي واجهة مستقلة
للأصلي رمزه وقناتاه وتجيب LASTEXITCODE و$? سؤالين فاحفظهما عند الحد. للحديث تفضيلات لا يشاركها5.1 فلا تفترض catch لكل غير صفري. قد يكون متوقعاً وفق الأداة؛ فسر ومرر الصادق. لا نشغل عملية أصلية أو إدارية. وقد يحدد برنامج أصلي رمزاً غير صفري لغياب متوقع، فلا ينبغي تطبيق قاعدة شاملة من دون قراءة توثيقه ثم حفظ الرمز قبل أوامر لاحقة.
اختبار سياسة النتيجة دون العملية الفاشلة
يميز المثبت المطلوب والغياب لا ترقية خطأ المحرك أو أنواعه. احفظ الأصل والفئة واستخرج القرار بسياسة. اختبر لاحقاً الجزئي والنوعين والتنظيف والأصلي الآمن؛ لا تكفي catch إذا بقيت حالة مرفوضة أو أعلن عملاً لم يحدث. ويبقى التعافي بحاجة إلى تحقق من الحالة الفعلية، لأن معالجة الاستثناء بنجاح لا تعكس رسماً مالياً أو تعديلاً بعيداً التزم قبل فقد الاستجابة.
outcomes = [{'name': 'required', 'code': 7, 'allowed': {0}}, {'name': 'optional-search', 'code': 1, 'allowed': {0, 1}}]
for outcome in outcomes:
print(outcome['name'] + '=' + ('accepted' if outcome['code'] in outcome['allowed'] else 'failed'))
required=failed
optional-search=accepted
تخص الأرقام السياسة المصطنعة دون ملف تنفيذي أو PowerShell أو مضيف.
الأخطاء الشائعة وإصلاحها
توقع catch لكل رسالة خطأ
- لماذا يحدث؟
- اختلط الخرج والاستثناء.
- كيف تصلحه؟
- راجع الفئة والدعم.
- كيف تتجنب تكراره؟
- اختبر المسارين.
إعادة فارغ من catch لإخفاء الفشل
- لماذا يحدث؟
- خالف التعافي عقد الإكمال.
- كيف تصلحه؟
- أعد نتيجة صادقة موثقة.
- كيف تتجنب تكراره؟
- افحص الفشل مع البيانات.
افتراض التقاط كل غير صفري أصلي
- لماذا يحدث؟
- أُهملت النسخة والسياسة.
- كيف تصلحه؟
- احفظ وفسر العقد صراحة.
- كيف تتجنب تكراره؟
- أعلن المختبر لكل نسخة.
اختبر فهمك
1. لماذا يجتمع خرج جزئي وفشل؟
اعرض الحل المشروح
قد تنتج سجلات قبل الخطأ؛ حدد قبولها أو رفضها واختبر الإكمال والحالة لا الامتلاء.
2. ما المستقل من نجاح معالجة الاستثناء؟
اعرض الحل المشروح
يبقى التعافي واللاحق؛ لا تعكس catch معاملة أو تثبت الصحة أو أمان الإعادة فافحصها.
أهم ما تعلمته
- صنف الأخطاء واحفظ النتيجة الأصلية.
- افصل الأصلي والاستثناء وتعافي الأثر.