كيفية استخدام سمة PowerShell Expand Property لأمر Select-Object

الأمر 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 لتحديد وعرض فقط خاصية الاسم لكل كائن خدمة، كما هو موضح أدناه.

Get-Service | Select-Object -Property Name

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

Selecting the names of the existing system services

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

Get-Service | Select-Object -Property Name | Get-Member

ارجع إلى اللقطة أدناه، وستلاحظ أن على الرغم من أن مفتاح التبديل -Property يخرج بما يبدو كقائمة من السلاسل، إلا أن هذه هي القائمة المحددة لكائنات System.ServiceProcess.ServiceController.

Viewing the type of a ServiceController object with Get-Member

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

Get-Service | Select-Object -Property Name -First 5 | mkdir

سيظهر لك إخراج مشابه لللقطة أدناه، مشيرًا إلى محاولة ناجحة.

Creating a folder for the services on your system

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

Get-Service | Select-Object -Property Name -First 5 | rmdir -Verbose

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

Demonstrating that some cmdlets expect string values instead of hashtables

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

Get-Service | Select-Object -ExpandProperty Name -First 5 | rmdir -Verbose

مع rmdir، يجب أن ترى محاولتك لإزالة المجلدات تنجح تلقائيًا دون أخطاء، كما هو موضح في الصورة أدناه.

Deleting folders named after the services expanded

إنشاء مجموعة من الكائنات المحددة مع خصائص معينة

لتقصير مقتطفات الكود في الأقسام، قم بإنشاء متغير لأول 20 خدمة على جهازك على النحو التالي.

قم بتشغيل الأمر Get-Service، حدد أول 20 كائنًا عبر cmdlet Select-Object، وقم بتخزين الكائنات في متغير يُسمى $testServices. حدد فقط الخصائص Name، Status، و DependentServices على النحو التالي.

$testServices = Get-Service | Select-Object -Property Name,Status,DependentServices -First 20

يمكن لمفتاح التبديل PowerShell Expand Property فقط توسيع خاصية واحدة في كل مرة، على عكس مفتاح التبديل Property الذي يمكنه اختيار أكثر من خاصية في نفس الوقت.

تنفيذ اسم المتغير، $testServices، لعرض هيكل محتوياته.

$testServices

يجب أن ترى جدولًا يعرض خصائص الخدمات التي قمت باختصارها، مشابهة للصورة أدناه.

Displaying the contents of $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 لكل خدمة.

$testServices | Select-Object -ExpandProperty DependentServices

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

Expanding the DependentServices property

الجمع بين الخاصية بواسطة PowerShell Expand Property للإخراج المصنف

الآن لديك قائمة بالخدمات التابعة، ولكن كيف تعرف أي خدمة تعتمد على أي خدمة؟ في هذا القسم، ستتعلم استخدام التبديل -Property لتصنيف خاصية موسعة.

قم بتشغيل الأمر أدناه لتصنيف خصائص DependentServices حسب Name.

$testServices | Select-Object -ExpandProperty DependentServices -Property Name

نظرًا لأن للخدمات التابعة بالفعل Name خاصية، يفشل خطوة التصنيف، كما هو موضح أدناه.

يخبرك الخطأ أدناه بأن القائمة الأولية للخدمات (في $testServices) لديها بالفعل خاصية Name تتعارض مع خاصية Name في خاصية DependentServices الموسعة.

Attempting to group an expanded property by the parent object name

واحدة من الحلول هي إنشاء \\الخصائص المحسوبة لإعادة تسمية خاصية المعرف كما يلي.

احفظ مخرجات الأمر السابق المعدلة لتحديد خاصية محسوبة تسمى “تعتمد على” كخاصية المعرف في متغير يسمى $depServ. تحتوي “تعتمد على” على قيمة الاسم لكل خدمة في $testService.

تم اختيار اسم الخاصية ، تعتمد على، بشكل تعسفي في هذا البرنامج التعليمي ويمكن أن يكون أي تعبير اختياري من اختيارك.

$depServ = $testServices | Select-Object -ExpandProperty DependentServices -Property @{name="Depends On"; expr={$_.Name}}

قم بتمرير الكائن في $depServ من خلال Select-Object لتحديد خاصيات الخدمة التابعة الاسم، الحالة، و تعتمد على.

$depServ | Select-Object -Property Name,Status,"Depends On"

يمكنك الآن معرفة الخدمات التي تعتمد على الخدمات في $testServices، كما هو موضح أدناه.

Grouping an expanded property using a calculated property

الجمع بين Format-List مع PowerShell Expand Property for Verbosity

قد تقيد PowerShell بالخصائص التي تعرضها ، خاصة في الإخراج الجدولي، ويمكن أن يواجه الإخراج مفتاح -ExpandProperty نفس المشكلة. يمكنك عرض الخصائص الموسعة في قائمة بدلاً من ذلك كحل بديل.

قم بتشغيل الأمر Get-Process أدناه لاسترداد جميع الوحدات التي يستخدمها عملية المستكشف. قم بتشغيل مفتاح -ExpandProperty لعرض خصائص الوحدات.

Get-Process explorer | select-object -ExpandProperty Modules

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

Viewing the truncated output of an expanded property

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

Get-Process explorer | select-object -ExpandProperty Modules | Format-List

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

Converting the output of an expanded property to a list with Format-List

الاستنتاج

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

Source:
https://adamtheautomator.com/powershell-expand-property/