الأمر Select-Object في PowerShell يمكنك من انتقاء الكائنات والخصائص بسهولة من مجموعة الكائنات المدخلة. ولكن في بعض الأحيان، قد تحتاج إلى معرفة المزيد. ExpandProperty هو مفتاح تحويل في Select-Object يوسع التفاصيل حول خاصية معينة.
اكتشف قوة تحويل الخاصية في PowerShell (-ExpandProperty
) من خلال هذا الدرس الموجه بالأمثلة.
الشروط المسبقة
سيكون هذا الدرس عرضًا تفاعليًا. إذا كنت ترغب في متابعته، كل ما تحتاج إليه هو جهاز يعمل بنظام التشغيل Windows مع PowerShell 5.1 وما فوق. يستخدم هذا المقال جهازًا بنظام Windows 10 مع PowerShell 5.1.
استخراج قيم كائن الخاصية باستخدام تحويل الخاصية في PowerShell
قم بتسجيل الدخول إلى جهاز الكمبيوتر الخاص بك بنظام Windows وافتح نافذة PowerShell. في هذا القسم، ستتعرف على أمر Select-Object
ومفتاح ExpandProperty
الخاص به.
1. قم بتشغيل أمر Get-Service للحصول على قائمة بجميع الخدمات في النظام الخاص بك. قم بتوجيه الإخراج إلى أمر Select-Object لتحديد وعرض فقط خاصية الاسم لكل كائن خدمة، كما هو موضح أدناه.
الآن يجب أن ترى عمودًا واحدًا من الكائنات يمثل قائمة بأسماء الخدمات في النظام الخاص بك، كما هو موضح في اللقطة المقصوصة أدناه.

2. قم بتشغيل أمر Get-Member في نهاية الأنبوب السابق pipeline لتأكيد نوع الكائنات التي يقوم أمر select-object بإرجاعها كما هو موضح أدناه. معرفة نوع الكائن يساعد في كتابة وظائف أو cmdlets لتوسيع أنابيب الأوامر الخاصة بك.
ارجع إلى اللقطة أدناه، وستلاحظ أن على الرغم من أن مفتاح التبديل -Property يخرج بما يبدو كقائمة من السلاسل، إلا أن هذه هي القائمة المحددة لكائنات System.ServiceProcess.ServiceController.

3. استبدل أمر Get-Members بأمر mkdir لإنشاء مجلد تلقائيًا لكل خدمة. يحدد مفتاح التبديل -first 5 عدد الكائنات التي سيتم إرجاعها. بدوره، ستقوم وظيفة mkdir بإنشاء خمسة مجلدات فقط استنادًا إلى الكائنات في الأنبوب.
سيظهر لك إخراج مشابه لللقطة أدناه، مشيرًا إلى محاولة ناجحة.

4. قم بإزالة المجلدات عن طريق استبدال mkdir بـ rmdir كما في المقتطف أدناه. قم بتشغيل مفتاح التبديل -Verbose لعرض إخراج مفصل في وحدة التحكم الخاصة بك.
يتوقع cmdlet rmdir سلاسل ولا يمكنه التعامل مع التمثيل hashtable لكائنات ServiceController. يجب أن يفشل محاولتك بعدة أخطاء، كما هو موضح في الصورة أدناه.

5. غيّر التبديل -Property إلى التبديل -ExpandProperty كما في الشريحة التالية. من خلال ذلك، يمكنك الحصول على قيمة خاصية كسلسلة عندما تحتاج فقط إلى سلسلة.
مع rmdir، يجب أن ترى محاولتك لإزالة المجلدات تنجح تلقائيًا دون أخطاء، كما هو موضح في الصورة أدناه.

إنشاء مجموعة من الكائنات المحددة مع خصائص معينة
لتقصير مقتطفات الكود في الأقسام، قم بإنشاء متغير لأول 20 خدمة على جهازك على النحو التالي.
قم بتشغيل الأمر Get-Service
، حدد أول 20
كائنًا عبر cmdlet Select-Object
، وقم بتخزين الكائنات في متغير يُسمى $testServices
. حدد فقط الخصائص Name
، Status
، و DependentServices
على النحو التالي.
يمكن لمفتاح التبديل PowerShell Expand Property فقط توسيع خاصية واحدة في كل مرة، على عكس مفتاح التبديل Property الذي يمكنه اختيار أكثر من خاصية في نفس الوقت.
تنفيذ اسم المتغير، $testServices
، لعرض هيكل محتوياته.
يجب أن ترى جدولًا يعرض خصائص الخدمات التي قمت باختصارها، مشابهة للصورة أدناه.

توسيع خاصية المجموعة باستخدام PowerShell Expand Property
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
قم بتنفيذ cmdlet Select-Object
على المتغير $testServices
ووسع خاصية DependentServices
لكل خدمة.
نظرًا لأن DependentServices
هي خاصية مجموعة، فإن الإخراج هو قائمة بالخدمات في جميع المجموعات الممتلئة، كما هو موضح أدناه. لاحظ التكرارات في القائمة بسبب دمج النتائج من خاصية DependentServices
الموسعة.

الجمع بين الخاصية بواسطة PowerShell Expand Property للإخراج المصنف
الآن لديك قائمة بالخدمات التابعة، ولكن كيف تعرف أي خدمة تعتمد على أي خدمة؟ في هذا القسم، ستتعلم استخدام التبديل -Property
لتصنيف خاصية موسعة.
قم بتشغيل الأمر أدناه لتصنيف خصائص DependentServices
حسب Name
.
نظرًا لأن للخدمات التابعة بالفعل Name
خاصية، يفشل خطوة التصنيف، كما هو موضح أدناه.
يخبرك الخطأ أدناه بأن القائمة الأولية للخدمات (في $testServices) لديها بالفعل خاصية Name تتعارض مع خاصية Name في خاصية DependentServices الموسعة.

واحدة من الحلول هي إنشاء \\الخصائص المحسوبة لإعادة تسمية خاصية المعرف كما يلي.
احفظ مخرجات الأمر السابق المعدلة لتحديد خاصية محسوبة تسمى “تعتمد على” كخاصية المعرف في متغير يسمى $depServ. تحتوي “تعتمد على” على قيمة الاسم لكل خدمة في $testService.
تم اختيار اسم الخاصية ، تعتمد على
، بشكل تعسفي في هذا البرنامج التعليمي ويمكن أن يكون أي تعبير اختياري من اختيارك.
قم بتمرير الكائن في $depServ
من خلال Select-Object
لتحديد خاصيات الخدمة التابعة الاسم
، الحالة
، و تعتمد على
.
يمكنك الآن معرفة الخدمات التي تعتمد على الخدمات في $testServices
، كما هو موضح أدناه.

الجمع بين Format-List مع PowerShell Expand Property for Verbosity
قد تقيد PowerShell بالخصائص التي تعرضها ، خاصة في الإخراج الجدولي، ويمكن أن يواجه الإخراج مفتاح -ExpandProperty
نفس المشكلة. يمكنك عرض الخصائص الموسعة في قائمة بدلاً من ذلك كحل بديل.
قم بتشغيل الأمر Get-Process
أدناه لاسترداد جميع الوحدات
التي يستخدمها عملية المستكشف
. قم بتشغيل مفتاح -ExpandProperty
لعرض خصائص الوحدات.
يجب أن يتشابه الإخراج على شاشتك مع لقطة الشاشة التالية ، حيث يتم قصه تلقائيًا لعرض ثلاث خصائص فقط.

قم بتوجيه الكائنات إلى cmdlet Format-List
لعرض جميع القيم لكائنات الوحدة النمطية في قائمة أكثر إدارة.
كما هو موضح أدناه، تقوم النتيجة بعرض جميع الخصائص وقيمها. يمكنك مزيد من حفظ البيانات في ملف أو تمريرها إلى cmdlet آخر لمعالجتها بشكل أعمق.

الاستنتاج
من خلال الوصول الناجح إلى هذا الحد، لقد رأيت كيف يمكنك الاستفادة من مفتاح الخاصية الفرعية في PowerShell (-ExpandProperty) لـ cmdlet Select-Object. توفر PowerShell مجموعة من cmdlets المفيدة للعديد من المهام الشائعة. يمكنك تعزيز معرفتك الجديدة من خلال تعلم كيفية عرض الملفات بسرعة باستخدام PowerShell Cat.
Source:
https://adamtheautomator.com/powershell-expand-property/