PowerShell / المتوسط: الربط والأخطاء والوحدات والبيانات والاختبارات / الدرس 9
تصميم القنوات والخرج الآلي النظيف
افصل كائن النجاح والخطأ والتحذير والتفصيل والتصحيح والمعلومات والتقدم وتوجيه الأصلي.
في هذه الصفحة
أهداف الدرس
- شرح القنوات الست والتقدم المنفصل.
- إبعاد كائن التشخيص عن الناتج الآلي.
- إدراك اختلاف البايت والتوجيه بين النسخ.
قناة الرسالة جزء من معناها
تميز القنوات الست وتفصل التقدم غير الموجه عادياً. تنتج Write-Output البيانات وتختلف الأخرى، وترتبط Write-Host بالمعلومات حديثاً لا بديل نتيجة منظمة. قد تختلف المرئية من مستهلك الأنبوب فحدد الآلي مستقلاً عن المشغل. وتفيد هذه التفرقة عندما يرى المشغل رسالة لا يستقبلها التالي كبيانات، أو عندما يوجه قناة أخرى إلى النجاح فيغير الواجهة عمداً.
يغير دمج القنوات مجتمع البيانات
يفيد الدمج سجل البشر لكنه يخلط أنواعاً كـ ErrorRecord بدل المخطط. لا تجمع للتسهيل دون عقد الخليط. قد يغير debug الظهور لا المقصود، واحم الحساس بكل قناة فلا يخفي تعطيل واحدة قيمة يكشفها مستهلك لاحق. وقد ينجح المصير في تحويل الخليط إلى ملف، مع بقاء محتواه غير مطابق لمخطط المجال، لذلك لا يعد نجاح التصدير وحده دليلاً على صحة البيانات.
إعلان بيانات النجاح والتفصيل منفصلين
ينتج المثال سجلاً وتفصيلاً دون مضيف وليثبت المخطط مع ظهور التفصيل أو غيابه. يخلق توجيه التفصيل للنجاح مجتمعاً آخر يحتاج اختباراً. يبقى غير منفذ ويظهر الملكية قبل التسجيل كي لا تصير رسالة سجلاً آخر. ويجب أن تحمي اختبارات الدالة مجتمع النجاح عند تشغيل التفصيل أو إخفائه، لأن احتياج المشغل معلومات إضافية لا يغير البيانات الموعودة للمستدعي.
function Get-LabSummary {
[CmdletBinding()]
param()
Write-Verbose 'Building synthetic summary'
[pscustomobject]@{ Name = 'review'; Count = 2 }
}
Get-LabSummary -Verbose
المقصود سجل واحد ولم يختبر التفصيل أو العرض فلا ندعي نصاً مجمعاً.
للعرض النصي وبايت الأصلي قواعد مختلفة
يرتبط توجيه أوامر اللغة بالعرض وغيرت7.4 stdout الأصلي لحفظ البايت بحالات موثقة لا كل مسار5.1. يعيد الدمج والتحويل تغيير العقد؛ حدد البايت أو النص أو الكائن ولا تستنتج الثنائي من المعاينة. لا نشغل أداة أو ملفاً بل نحدد اختبار الحد. كما أن تمرير stdout الأصلي عبر تحويل نصي أو دمجه مع stderr قد يغير خاصية حفظ البايت، فلا يكفي الاستناد إلى رقم الإصدار وحده.
اختبار اختيار القناة دون ادعاء محركها
يبين سجل مصطنع سياسة النجاح فقط لا دمج المحرك أو العرض أو القواعد أو الترميز. افحص المخطط بعد الاختيار وافصل التشخيص، ثم اختبر لاحقاً القنوات والدمج والتسلسل والبايت. ارفض الكائن الزائد لا عد الأسطر لأن السجل يخفي تلوث النوع. ويشمل التحقق الفعلي اللاحق نوع كل كائن وصل إلى المستهلك، لا عدد الأسطر فقط، لأن العرض يمكن أن يخفي الفرق بين السجل والخطأ.
events = [{'stream': 'verbose', 'value': 'building'}, {'stream': 'success', 'value': {'Name': 'review', 'Count': 2}}]
data = [event['value'] for event in events if event['stream'] == 'success']
assert len(data) == 1 and set(data[0]) == {'Name', 'Count'}
print('machine_records=' + str(len(data)))
machine_records=1
يفحص المرشح سياسته لا قنوات PowerShell أو التوجيه أو الطرفية.
الأخطاء الشائعة وإصلاحها
استخدام Write-Output لتقدم عرضي
- لماذا يحدث؟
- اختلطت البيانات والتشخيص.
- كيف تصلحه؟
- اختر قناة التشخيص.
- كيف تتجنب تكراره؟
- افحص المخطط مع الأوضاع.
إفساد خطأ مدمج مستهلك CSV أوJSON
- لماذا يحدث؟
- دخلت أنواع مختلطة.
- كيف تصلحه؟
- افصل السجل أو عرف مخططاً موسوماً.
- كيف تتجنب تكراره؟
- اختبر الخطأ لا السليم فقط.
افتراض تطابق البايت الأصلي بين النسخ
- لماذا يحدث؟
- أُهملت النسخة والتحويل.
- كيف تصلحه؟
- افحص حد البايت الموثق.
- كيف تتجنب تكراره؟
- صرح اختبار الترميز بين النسخ.
اختبر فهمك
1. لماذا لا يناسب السجل المدمج واجهة بيانات؟
اعرض الحل المشروح
قد يضم مخططات مختلفة؛ ليتلق المستهلك صيغة أحداث موسومة أو نجاحاً نظيفاً لا خليطاً عرضياً.
2. ماذا يتغير بتفعيل verbose لدالة بيانات جيدة؟
اعرض الحل المشروح
يرى المشغل أكثر ويبقى مخطط النجاح وعدده إلا بتوجيه موثق؛ اختبر الوضعين بالمحرك لاحقاً.
أهم ما تعلمته
- عيّن لكل خرج قناته.
- افصل العرض والسجل والبيانات وبايت الأصلي.