PowerShell / الأساسي: النسخ والكائنات والأنواع والدوال / الدرس 2
حفظ الكائنات عبر خط الأنابيب
افحص أعضاء الكائن ورشح وأسقط الخصائص وأجل تنسيق العرض حتى يكتمل العمل المنظم.
في هذه الصفحة
أهداف الدرس
- تمييز الكائن من تمثيله الطرفي.
- استخدام الترشيح والاختيار والفرز بعقود خصائص.
- إبعاد سجلات التنسيق عن معالجة البيانات.
ليس نص العرض الكائن الأساسي
تنتج cmdlets كائنات بخصائص وطرق وأنواع ويختار العرض ما يخفيه وينسقه. تكشف Get-Member العقد والوصول للخاصية البيانات دون جدول. لا تستنتج الاسم من العنوان أو تستعد السجلات بالمسافات. يمثل PSCustomObject سجلاً صريحاً؛ ثبت مخطط حد الدالة ليستقر البيانات لا العرض. وقد تخفي طريقة العرض أعضاء يحتاجها المستهلك أو تغير تمثيلها، لذلك تصبح الخصائص الموثقة والنوع الفعلي مرجع الواجهة لا الشكل الذي اختارته الطرفية.
للترشيح والإسقاط أثران مختلفان
تختار Where-Object السجلات وتسقط Select-Object الخصائص أو توسعها، ويغير الفرز الترتيب والتجميع الشكل. اختر لعقد المستهلك لا الجمال، وقد تغير خاصية غائبة أو أرقام نصية المقارنة. تحقق من المخطط والنوع واختبر الفارغ والمفرد والقائمة. وتختلف إزالة سجل من المجتمع عن إزالة خاصية من سجل باق، كما أن التجميع ينشئ شكلاً جديداً؛ ولهذا يجب تحديد ما يتوقعه المستهلك بعد كل مرحلة.
استخدام سجلات مصطنعة بدل تعداد المضيف
يمكن بناء كل السجلات بدل قراءة العمليات والخدمات والملفات. يرشح المثال المفعّل ويفرز ثم يوسع الأسماء؛ يشرح الدلالة لكنه غير مختبر بالمحرك. لا تستبدل المصدر بـ Get إداري حي فقد يكشف خاصاً ويتبعه أثر. المصدر والتحويل والوجهة جميعها نطاق. ولا يجيز كون التحويل نفسه غير مؤثر استبدال مصدره بمعلومات نظام حقيقية، لأن نطاق العملية يشمل جمع البيانات وما قد تكشفه أيضاً.
$records = @(
[pscustomobject]@{ Name = 'Beta'; Enabled = $true }
[pscustomobject]@{ Name = 'Alpha'; Enabled = $true }
[pscustomobject]@{ Name = 'Archive'; Enabled = $false }
)
$records | Where-Object Enabled | Sort-Object Name | Select-Object -ExpandProperty Name
القيم المقصودة Alpha وBeta ولم ينفذ المحرك، والمثال كائنات منشأة فقط.
التنسيق حد نهائي للعرض
تنتج Format-Table تعليمات عرض لا سجلات العمل، وقد يصدّرها CSV خطأ. اختر وسلسل قبل التنسيق وافصل الفرعين عند الحاجة. تحول Out-String البنية لنص بعرضه، ولا يثبت جدول صحيح مخطط الملف أو قيمه وترتيبه وترميزه؛ افحص التسلسل مستقلاً. وقد يكون الأثر المصدر صالحاً نحوياً لكنه يحوي تعليمات تنسيق بدلاً من بيانات المجال، لذا يجب فحص الحقول والقيم لا الاكتفاء بفتح الملف بنجاح.
فحص عقد الاختيار دون ادعاء ربط المحرك
يفحص نموذج القواميس الأسماء لا تعداد PowerShell أو تحويله وربطه وعرضه. افحص النوع كي لا يقبل النص غير الفارغ علماً. قارن الناتج العام لا تركيب الداخل، وليفحص اختبار المحرك اللاحق الأنواع والخصائص لا النص وحده. هكذا لا ينسب النموذج إثباتاً لبيئة أخرى. وتحتاج حالات الصفر والنتيجة الواحدة إلى تحقق مستقل، لأن اختفاء القائمة أو تغير نوع العنصر قد لا يكون واضحاً من النص المعروض.
records = [{'Name': 'Beta', 'Enabled': True}, {'Name': 'Alpha', 'Enabled': True}, {'Name': 'Archive', 'Enabled': False}]
assert all(type(row['Enabled']) is bool for row in records)
names = sorted(row['Name'] for row in records if row['Enabled'])
print(','.join(names))
Alpha,Beta
يطبع Alpha,Beta فقط دون مضيف ويختبر Python لا cmdlets أو العرض.
الأخطاء الشائعة وإصلاحها
تحليل أعمدة العرض كواجهة الكائن
- لماذا يحدث؟
- استبدل العرض فحص الأعضاء.
- كيف تصلحه؟
- استخدم الخصائص والفحص الموثقين.
- كيف تتجنب تكراره؟
- اختبر المخطط مستقلاً.
إرسال Format-Table لتصدير بيانات
- لماذا يحدث؟
- اختلطت تعليمات العرض بالكائن.
- كيف تصلحه؟
- سلسل الخصائص قبل العرض.
- كيف تتجنب تكراره؟
- افصل البشري والآلي.
اجتياز علم نصي شرطاً غير مقصود
- لماذا يحدث؟
- لم يحدد النوع.
- كيف تصلحه؟
- تحقق أو طبع عمداً.
- كيف تتجنب تكراره؟
- اختبر الفارغ والمفرد والمشوه.
اختبر فهمك
1. لماذا يفحص CSV مستقلاً عن الجدول؟
اعرض الحل المشروح
قد يخفي العرض خصائص ويضيف تعليمات غير السجل؛ افحص الرؤوس والقيم والترتيب والترميز لا الشكل فقط.
2. ما غير المثبت بعد أسماء نموذج Python الصحيحة؟
اعرض الحل المشروح
يبقى تعداد المحرك وتحويله وربطه وأنواعه وعرضه غير مختبر؛ يثبت النموذج متطلب اختيار محدوداً.
أهم ما تعلمته
- أبق الكائن حتى يحتاج المستهلك نصاً.
- عامل العرض والتسلسل عقدين.