PowerShell / الأساسي: النسخ والكائنات والأنواع والدوال / الدرس 6
فصل المزود والمسار والبايت والبيانات المسلسلة
اشرح عمليات المزود والمسار الحرفي وأنماط المحتوى وفروق الترميز وعقود JSON وCSV دون ملفات المضيف.
في هذه الصفحة
أهداف الدرس
- تمييز مسار المزود من النص.
- اختيار عقد السطر والنص والبايت عمداً.
- التحقق من المخطط والترميز مستقلين من العرض.
يغير المزود معنى عملية المسار
تعرض المزودات فضاءات بأوامر متشابهة لا دلالة متطابقة للملف والسجل، وقد يغيب مزود خارج ويندوز. يؤثر الموقع والمحرك، فراجع المرجع لا افتراض كل Item ملفاً. قد يعبر المسار حداً مؤثراً أو حساساً؛ نبني الذاكرة ولا نقرأ مهيأ أو سجلاً أو خدمة. ولهذا يجب تسمية المزود الفعلي عند مراجعة أمر عام، لأن صيغة المسار وحدها لا تكفي لتحديد ما إذا كان المورد ملفاً أو حالة نظام مختلفة.
يتجنب المسار الحرفي النمط لا يمنح السلطة
تختلف Path وLiteralPath بالنمط، ويفيد Join-Path دون ضمان الإذن. افحص الجذر والعبور والوجود والاستبدال، ولا يضمن Test-Path اللاحق. يحتاج المؤقت المصرح ملكية وتنظيفاً ولا تستخدم المنزل أو المشروع أو الخدمة للواقعية؛ فحوصنا دون ملفات. كما أن فحص الوجود قبل العملية لا يمنع تغير المورد بينها وبين الفتح، لذا يجب أن يعالج الكود فشل العملية الحقيقية أيضاً.
الأسطر والنص الخام والبايت واجهات مختلفة
تختلف قراءة السطر والخام والبايت وتؤثر النهايات وفك الترميز. تستخدم7 غالباً UTF8 بلاBOM بينما لـ5.1 افتراضيات خاصة منها UTF16LE بمسارات مهمة. لا يكفي اسم Unicode؛ حدد الترميز وافحص البايت ولا تثبت الرسمة الطرفية الملف أو التالي. ويجب أن يفحص التوافق ما إذا كانت علامة BOM ونهايات الأسطر جزءاً من صيغة المستهلك، لا مجرد قدرة الطرفية على إظهار الحروف بطريقة مقروءة.
يحتاج التسلسل مخططاً وعمقاً كافياً
تختلف الأنواع والعمق والخيارات في JSON فحدد العمق للمتداخل، ولـ CSV تسطيح بقواعد ترميز وفاصل وفراغ ونوع. لا يقيم التنسيق بيانات كشيفرة. أسقط قبل العرض وافحص الرجوع بالمخطط؛ قد يفقد النوع أو الخاصية فصرح الخسارة لا مساواة نجاح التحليل بالتكافؤ. وقد ينجح فك JSON مع غياب عضو مهم أو تغير نوعه، لذلك يحتاج الرجوع الناجح مقارنة بالمخطط والقيم التي وعدت بها الواجهة.
$record = [pscustomobject]@{
Name = 'review'
Settings = @{ Workers = 2; Enabled = $true }
}
$record | ConvertTo-Json -Depth 4 -Compress
المقصود حفظ المتداخل ولم ينفذ المصير فلا ندعي ترتيب خصائص أو خرج محرك.
فحص البيانات والبايت المعلنة دون ملف
يفحص نموذج JSON وUTF8 المصطنع لا افتراض PowerShell أو عمقه أو CSV. ليختبر لاحقاً الإصدار ببايت مؤقت خاص وغيرASCII وفارغ ومتداخل ومشوه. افصل المحلل والقبول واحفظ المصدر ولا نقرأ مزوداً أو نغير ترميز المضيف. وتبقى خيارات قراءة السطر والنص الخام والبايت مختلفة عن اختيار UTF8 في النموذج، فلا يجوز نسب ذلك إلى افتراضيات إصدار لم ينفذ هنا.
import json
record = {'Name': 'review', 'Settings': {'Workers': 2, 'Enabled': True}}
payload = json.dumps(record, ensure_ascii=False, sort_keys=True).encode('utf-8')
restored = json.loads(payload.decode('utf-8'))
print('roundtrip=' + str(restored == record))
print('workers=' + str(restored['Settings']['Workers']))
roundtrip=True
workers=2
ترمز الذاكرة وتحلل في Python فقط لا افتراض المحرك أو ملف أو مزود.
الأخطاء الشائعة وإصلاحها
اعتبار LiteralPath تخويلاً للمسار
- لماذا يحدث؟
- اختلط النمط بالسياسة.
- كيف تصلحه؟
- افحص الوجهة والأثر مستقلين.
- كيف تتجنب تكراره؟
- وثق المزود والاستبدال.
افتراض تطابق ملف5.1 مع7 بايتياً
- لماذا يحدث؟
- أُهمل فرق الترميز.
- كيف تصلحه؟
- حدد واختبر الترميز.
- كيف تتجنب تكراره؟
- اختبر رجوع غيرASCII.
فقد بنية JSON المتداخلة
- لماذا يحدث؟
- لم يحدد العمق والمخطط.
- كيف تصلحه؟
- اختر الخيارات وافحص المفكوك.
- كيف تتجنب تكراره؟
- افصل التسلسل من العرض.
اختبر فهمك
1. لماذا لا يثبت تحليل JSON الرجوع دون فقد؟
اعرض الحل المشروح
قد تحذف الخيارات أو تغير النوع والعمق؛ قارن الموعود وصرح التحويل لا النحو فقط.
2. ماذا يفحص اختبار النص بين النسخ؟
اعرض الحل المشروح
افحص البايت وBOM والنهاية والترميز والمستهلك بكل نسخة، لا الرسم؛ واستخدم المثبت الخاص لا الملف المهيأ.
أهم ما تعلمته
- افصل المزود والسياسة ونمط النص وترميز البايت.
- اختبر المخطط والتمثيل عند الحد الصحيح.