الصفحة الرئيسية » howto » Geek School Working with Collections in PowerShell

    Geek School Working with Collections in PowerShell

    نظرًا لأن PowerShell يستند إلى إطار .Net ويتضمن تقنيات أخرى مختلفة مثل WMI و CIM ، فهناك دائمًا أكثر من طريقة لإنجاز الشيء نفسه. انضم إلينا للمشاركة في هذا المقال القصير حيث نتعلم كيفية اختيار أفضل طريقة لإنجاز مهامنا.

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

    • تعلم كيفية أتمتة ويندوز مع PowerShell
    • تعلم استخدام Cmdlets في PowerShell
    • تعلم كيفية استخدام الكائنات في PowerShell
    • تعلم تنسيق وتصفية ومقارنة في PowerShell
    • تعلم كيفية استخدام الاتصال عن بعد في PowerShell
    • استخدام PowerShell للحصول على معلومات الكمبيوتر

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

    باستخدام Cmdlets دفعة

    في وقت سابق من السلسلة ، عندما قدمنا ​​لك خط الأنابيب ، أظهرنا لك كيف يمكنك أن تأخذ الأشياء التي تخرجها واحدة cmdlet وتمريرها كإدخال إلى cmdlet آخر باستخدام شيء من هذا القبيل:

    الحصول على عملية - اسم المفكرة | توقف عملية

    هذا من شأنه أن يقتل أي عملية باسم "notepad". ولكنك ربما تتساءل كيف تستطيع PowerShell قتل كل مثيل المفكرة بأمر واحد. تكمن الإجابة في مساعدة الأمر Stop-Process cmdlet.

    مساعدة وقف العملية - كاملة

    إذا نظرت إلى السطر الأخير من التعليمة البرمجية في قسم البنية ، يمكنك أن ترى أن معامل InputObject يقبل كائنًا من نوع Process [] ، وعندما ترى نوعًا متبوعًا بقوسين مربعين مثل ذلك يعني أن المعلمة تقبل واحد أو أكثر من النوع السابق. في هذه الحالة ، فإنه يقبل كائن عملية واحد أو أكثر. من الناحية الفنية ، يمكن أن نقول أن InputObject cmdlet يقبل عملية مجموعة مصفوفة. عندما يكون لديك أمر cmdlet يدعم عمليات الدفعات بهذه الطريقة ، استخدمها. هذا هو الاختيار رقم واحد.

    باستخدام WMI

    على الرغم من أن WMI ليست أفضل تكنولوجيا للشحن من مقر Microsoft ، إلا أنها تأتي في المرتبة الثانية في قائمة كيفية العمل مع مجموعات الكائنات. يمكننا بسهولة الحصول على قائمة العمليات قيد التشغيل من فئة Win32_Process مثل:

    Get-WmiObject -Class Win32_Process

    نظرًا لأن استعلام WMI يقوم بإرجاع نوع الكائن الخاص به ، فستحتاج إلى البحث عن طريقة يمكنها إيقاف العملية ، لذلك يتيح توجيه الإخراج إلى Get-Member.

    Get-WmiObject -Class Win32_Process | الحصول على لعضو

    يبدو أن أقرب طريقة هي طريقة الإنهاء ، لذا يجب أن تكون هي الطريقة. لاستدعاء طريقة على كائن WMI ، يمكنك ببساطة توجيهها إلى Invoke-WmiMethod وتحديد اسم الطريقة.

    Get-WmiObject -Class Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Name إنهاء

    عظيم ، لقد فعلت هذه الحيلة. عندما تحصل على ReturnValue من 0 في WMI ، فقط تذكر أن الأمر تم تنفيذه بنجاح.

    تعداد

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

    الحصول على العملية | Get-Member -MemberType Method

    مثالي ، يبدو أننا يمكن أن نستخدم طريقة القتل ثم نوصل الأنبوب إلى كائن ForEach-Object لقتلهم جميعًا.

    الحصول على عملية - اسم المفكرة | ForEach-Object -Process $ _. Kill ()

    هنا أخذنا جميع الكائنات العملية التي عاد إليها Get-Process ومررتها إلى الأمر cmdlet لـ ForEach-Object. مثل الكثير من أوامر cmdlet الخاصة بالأماكن ، قمنا بتمثيل كل كائن في خط الأنابيب باستخدام $ _ الذي تمكنا من الاتصال به بطريقة Kill (). مع كل ما يقال ويفعل ، تعد تعداد مجموعة أبطأ بكثير من الطرق المذكورة أعلاه ويجب استخدامها فقط كآخر نتيجة.

    ملخص

    اختيار واحد

    الحصول على عملية - اسم المفكرة | توقف عملية

    الاختيار الثاني

    Get-WmiObject -Class Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Name إنهاء

    الاختيار الثالث

    الحصول على عملية - اسم المفكرة | ForEach-Object -Process $ _. Kill ()

    هذا كل شيء لهذا الوقت الناس ، أراك الأسبوع المقبل لمزيد من المرح PowerShell.