الصفحة الرئيسية » howto » التعلم المهوس مدرسة تنسيق وتصفية والمقارنة في PowerShell

    التعلم المهوس مدرسة تنسيق وتصفية والمقارنة في PowerShell

    في هذه الطبعة من Geek School ، ننظر إلى تنسيق وترشيح ومقارنة الأشياء في خط الأنابيب.

    تأكد من قراءة المقالات السابقة في السلسلة:

    • تعلم كيفية أتمتة ويندوز مع PowerShell
    • تعلم استخدام Cmdlets في PowerShell
    • تعلم كيفية استخدام الكائنات في PowerShell

    وتنبقي لبقية المسلسل طوال الأسبوع.

    التنسيق الافتراضي

    عندما بدأت العمل مع PowerShell لأول مرة ، اعتقدت أن كل شيء كان سحريًا ، ولكن الحقيقة هي أن الأمر يستغرق بعض الوقت لفهم ما يحدث أسفل الغطاء. وينطبق الشيء نفسه على نظام تنسيق PowerShell. في الواقع ، إذا قمت بتشغيل الأمر cmdlet Get-Service ، فإن الناتج الذي يتم إنشاؤه يظهر لك فقط 3 خصائص: Status و Name و DisplayName.

    ولكن إذا قمت بتوجيه Get-Service إلى Get-Member ، سترى أن كائنات ServiceController تحتوي على أكثر من مجرد هذه الخصائص الثلاث ، لذا فما يحدث?

    تكمن الإجابة في ملف مخفي يحدد كيفية عرض معظم أوامر cmdlets المضمنة لإخراجها. للحصول على فهم ، اكتب ما يلي في shell واضغط على Enter.

    المفكرة C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

    إذا استخدمنا وظيفة Find المفكرة ، فيمكننا الانتقال بسرعة إلى القسم الذي يوضح تفاصيل أمر cmdlet الخاص بالحصول على الخدمة من خلال البحث عن نوع ServiceController.

    فجأة ، يمكنك أن ترى أنه تحت غطاء محرك السيارة PowerShell يقوم بتنسيق أي كائنات في Pipeline من نوع ServiceController وإنشاء جدول بثلاثة أعمدة: Status و Name و DisplayName. ولكن ماذا لو كان النوع الذي تتعامل معه لا يحتوي على إدخال في هذا الملف ، أو أي ملف تنسيق آخر لهذا الأمر؟ حسناً ، الأمر بسيط للغاية. إذا كان الكائن الخارج من خط الأنابيب يحتوي على 5 خصائص أو أكثر ، يعرض PowerShell جميع خصائص الكائن في قائمة ؛ إذا كان يحتوي على أقل من 5 خصائص ، فسيعرضها في جدول.

    تنسيق البيانات الخاصة بك

    إذا لم تكن راضيًا عن التنسيق الافتراضي لكائن أو نوع ، فيمكنك لف الصياغة الخاصة بك. هناك ثلاثة أوامر cmdlets تحتاج إلى معرفتها للقيام بذلك.

    • تنسيق قائمة
    • تنسيق الجدول
    • الشكل على نطاق واسع

    الشكل على نطاق واسع يأخذ ببساطة مجموعة من الكائنات ويعرض خاصية واحدة لكل كائن. بشكل افتراضي ، سيبحث عن خاصية اسم؛ إذا كانت الكائنات الخاصة بك لا تحتوي على خاصية اسم ، فستستخدم الخاصية الأولى للكائن بمجرد فرز الخصائص أبجديًا.

    الحصول على الخدمة | الشكل على نطاق واسع

    كما ترى ، يتم تعيينه أيضًا على عمودين افتراضيًا ، على الرغم من أنه يمكنك تحديد أي من الخصائص التي تريد استخدامها ، بالإضافة إلى عدد الأعمدة التي تريد عرضها.

    الحصول على الخدمة | تنسيق-على نطاق واسع -Property DisplayName -Column 6

    إذا تم تنسيق عنصر ما كجدول بشكل افتراضي ، فيمكنك دائمًا التبديل إلى عرض القائمة باستخدام الأمر cmdlet لـ Format-List. لنلقِ نظرة على مخرجات أمر الحصول على الأمر cmdlet.

    هذه النظرة المجدولة تناسب بالفعل هذا النوع من المعلومات بشكل جيد ، لكن دعنا نتظاهر بأننا نريد مشاهدته في شكل قائمة. كل ما يتعين علينا فعله هو توجيه الأنبوب إليه تنسيق قائمة.

    الحصول على العملية | تنسيق قائمة

    كما ترى ، لا يوجد سوى أربعة عناصر معروضة في القائمة افتراضيًا. لعرض كافة خصائص الكائن ، يمكنك استخدام حرف بدل.

    الحصول على العملية | تنسيق قائمة -Property *

    بدلا من ذلك ، يمكنك تحديد الخصائص التي تريدها فقط.

    الحصول على العملية | تنسيق قائمة ، اسم العقار ، معرف

    تنسيق الجدول, من ناحية أخرى ، يأخذ البيانات ويحولها إلى جدول. نظرًا لأن بياناتنا من Get-Process هي بالفعل في شكل جدول ، فيمكننا استخدامه لاختيار الخصائص التي نريد عرضها في الجدول بسهولة. استخدمت معلمة AutoSize لجعل كافة البيانات مناسبة على شاشة واحدة.

    الحصول على العملية | Format-Table name، id -AutoSize

    التصفية والمقارنة

    أحد أفضل الأشياء المتعلقة باستخدام خط أنابيب يستند إلى الكائن هو أنه يمكنك تصفية الكائنات خارج خط الأنابيب في أي مرحلة باستخدام أمر cmdlet لـ Where-Object.

    الحصول على الخدمة | Where-Object $ _. Status -eq "Running"

    باستخدام حيث الكائن في الواقع بسيط جدا. يمثل $ _ كائن خط الأنابيب الحالي ، والذي يمكنك من خلاله اختيار خاصية ترغب في تصفيتها. هنا ، يتم الاحتفاظ فقط بالكائنات حيث تساوي خاصية الحالة التشغيل. هناك بعض عوامل المقارنة التي يمكنك استخدامها في كتلة البرنامج النصي التصفية:

    • مكافئ (يساوي)
    • neq (لا يساوي)
    • gt (أكبر من)
    • ge (أكبر من أو يساوي)
    • أقل من (أقل من)
    • le (أقل من أو يساوي)
    • مثل (Wildcard String Match)

    يمكن الاطلاع على قائمة كاملة ومزيد من المعلومات في ملف المساعدة المفاهيمي about_comparison ، ومع ذلك يستغرق بعض الوقت التعود على بنية Where-Obeject. هذا كل هذا في هذا الوقت!