مدرسة المهوس: تعلم كيفية استخدام وظائف في PowerShell

جدول المحتويات:

فيديو: مدرسة المهوس: تعلم كيفية استخدام وظائف في PowerShell

فيديو: مدرسة المهوس: تعلم كيفية استخدام وظائف في PowerShell
فيديو: تعرف على كيفية إنشاء تطبيق المحاسبة الخاص بك في Excel اليوم - دروس متقدمة كاملة 2024, مارس
مدرسة المهوس: تعلم كيفية استخدام وظائف في PowerShell
مدرسة المهوس: تعلم كيفية استخدام وظائف في PowerShell
Anonim
يحتوي PowerShell على أربعة أنواع من الوظائف - وظائف في الخلفية ، وظائف عن بعد ، وظائف WMI والوظائف المجدولة. انضم إلينا لمعرفة ما هي وكيف يمكننا استخدامها.
يحتوي PowerShell على أربعة أنواع من الوظائف - وظائف في الخلفية ، وظائف عن بعد ، وظائف WMI والوظائف المجدولة. انضم إلينا لمعرفة ما هي وكيف يمكننا استخدامها.

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

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

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

وظائف الخلفية

حتى الآن ، كان كل ما عرضته في PowerShell متزامناً ، مما يعني أننا نكتب شيئًا ما في الغلاف ولا يمكننا فعل الكثير حتى ينتهي هذا الأمر من التنفيذ. هذا هو المكان الذي تأتي فيه وظائف الخلفية. للبدء في خلفية ، ببساطة تمرير مهمة كتلة البرنامج النصي إلى الأمر cmdlet Start-Job.

Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}

الآن نحن أحرار في أن نفعل ما نريد داخل shell بينما يتم تنفيذ كتلة البرنامج النصي هذه في الخلفية.
الآن نحن أحرار في أن نفعل ما نريد داخل shell بينما يتم تنفيذ كتلة البرنامج النصي هذه في الخلفية.
عند بدء تشغيل مهمة جديدة ، يقوم PowerShell بإنشاء كائن مهمة جديد يمثل تلك المهمة. يمكنك الحصول على قائمة بجميع المهام في أي وقت عن طريق تشغيل الأمر cmdlet لـ Get-Job.
عند بدء تشغيل مهمة جديدة ، يقوم PowerShell بإنشاء كائن مهمة جديد يمثل تلك المهمة. يمكنك الحصول على قائمة بجميع المهام في أي وقت عن طريق تشغيل الأمر cmdlet لـ Get-Job.
تخبرك الأجسام المهمة عن حالة الوظائف. على سبيل المثال ، في لقطة الشاشة أعلاه ، يمكننا أن نرى أن لدينا BackgroundJob يُسمى GetFileList والذي لا يزال قيد التشغيل ، ولكنه بدأ بالفعل في عرض البيانات. إذا قررت في أي وقت أن العمل قد استمر لفترة طويلة ، يمكنك إيقافه بسهولة عن طريق توصيله إلى Stop-Job.
تخبرك الأجسام المهمة عن حالة الوظائف. على سبيل المثال ، في لقطة الشاشة أعلاه ، يمكننا أن نرى أن لدينا BackgroundJob يُسمى GetFileList والذي لا يزال قيد التشغيل ، ولكنه بدأ بالفعل في عرض البيانات. إذا قررت في أي وقت أن العمل قد استمر لفترة طويلة ، يمكنك إيقافه بسهولة عن طريق توصيله إلى Stop-Job.

Get-Job –Name GetFileList | Stop-Job

ومع ذلك ، فبمجرد توقفك عن العمل ، أيا كانت البيانات التي تتلقاها حتى النقطة التي توقفتها ، فلا تزال متاحة. هناك مسكتك ، على الرغم من. في PowerShell ، بمجرد الحصول على نتائج مهمة ، يتم حذفها. لكي تبقى ، يجب عليك تحديد معلمة keep keep من Receive – Job.
ومع ذلك ، فبمجرد توقفك عن العمل ، أيا كانت البيانات التي تتلقاها حتى النقطة التي توقفتها ، فلا تزال متاحة. هناك مسكتك ، على الرغم من. في PowerShell ، بمجرد الحصول على نتائج مهمة ، يتم حذفها. لكي تبقى ، يجب عليك تحديد معلمة keep keep من Receive – Job.

Get-Job –Name GetFileList | Receive-Job –Keep

بمجرد الانتهاء من العمل ، فمن الأفضل إزالته. لإزالة المهمة ، ما عليك سوى توجيهها إلى أمر Remove-Job cmdlet.
بمجرد الانتهاء من العمل ، فمن الأفضل إزالته. لإزالة المهمة ، ما عليك سوى توجيهها إلى أمر Remove-Job cmdlet.

Get-Job –Name GetFileList | Remove-Job

سيؤدي ذلك إلى إزالته من قائمة المهام التي يتم إرجاعها بواسطة Get-Job.

Image
Image

وظائف عن بعد

منذ بضع دروس ، نظرنا في كيفية استخدامنا للتواصل عن بعد لتنفيذ أوامر PowerShell على جهاز بعيد باستخدام Invoke-Command ، لكن هل تعلم أنه يمكنك أيضًا استخدام Invoke-Command لبدء مهمة الاتصال عن بُعد في الخلفية؟ للقيام بذلك ، ما عليك سوى إضافة المعلمة -AsJob إلى نهاية الأمر:

Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob

كان ذلك أمرًا بسيطًا وكان يجب أن ينتهي من التنفيذ الآن ، لذا دعنا نلقي نظرة على حالة مهامنا.
كان ذلك أمرًا بسيطًا وكان يجب أن ينتهي من التنفيذ الآن ، لذا دعنا نلقي نظرة على حالة مهامنا.
حسنًا ، يبدو أنه فشل. هذا ينقلني إلى مساعدي الأول مع وظائف. عندما تقوم بإنشاء مهمة جديدة من أي نوع في PowerShell ، فإنها تقوم بإنشاء مهمة رئيسية واحدة بالإضافة إلى مهمة فرعية واحدة لكل كمبيوتر تقوم بتشغيل المهمة عليه. عند استخدام الأمر cmdlet لـ Get-Job ، فإنه يعرض فقط المهام الأصل ، وقيمة الحالة هي أسوأ سيناريو ، مما يعني أنه حتى إذا فشل الأمر في تشغيل واحد فقط من بين 100 جهاز كمبيوتر ، فستظهر حالة المهام الرئيسية فشل. لمشاهدة قائمة بالمهام الفرعية ، تحتاج إلى استخدام المعلمة IncludeChildJob.
حسنًا ، يبدو أنه فشل. هذا ينقلني إلى مساعدي الأول مع وظائف. عندما تقوم بإنشاء مهمة جديدة من أي نوع في PowerShell ، فإنها تقوم بإنشاء مهمة رئيسية واحدة بالإضافة إلى مهمة فرعية واحدة لكل كمبيوتر تقوم بتشغيل المهمة عليه. عند استخدام الأمر cmdlet لـ Get-Job ، فإنه يعرض فقط المهام الأصل ، وقيمة الحالة هي أسوأ سيناريو ، مما يعني أنه حتى إذا فشل الأمر في تشغيل واحد فقط من بين 100 جهاز كمبيوتر ، فستظهر حالة المهام الرئيسية فشل. لمشاهدة قائمة بالمهام الفرعية ، تحتاج إلى استخدام المعلمة IncludeChildJob.
إذا نظرت عن قرب ، سترى أن المهمة قد فشلت بالفعل على كمبيوتر واحد فقط ، وهو ما يقودنا إلى مسكتك التالي. عندما تحاول الحصول على النتائج الخاصة بالمهمة ، إذا حددت اسم الوظيفة أو المعرف الخاص بالأبوين ، فستعرض PowerShell البيانات من جميع مهام الطفل. المشكلة هي أنه إذا كان هناك خطأ في إحدى مهام الطفل ، فسيتم تركه مع بعض النص الأحمر.
إذا نظرت عن قرب ، سترى أن المهمة قد فشلت بالفعل على كمبيوتر واحد فقط ، وهو ما يقودنا إلى مسكتك التالي. عندما تحاول الحصول على النتائج الخاصة بالمهمة ، إذا حددت اسم الوظيفة أو المعرف الخاص بالأبوين ، فستعرض PowerShell البيانات من جميع مهام الطفل. المشكلة هي أنه إذا كان هناك خطأ في إحدى مهام الطفل ، فسيتم تركه مع بعض النص الأحمر.
هناك طريقتان للتغلب على هذا. أولاً ، إذا كنت تعرف ما هي أجهزة الكمبيوتر التي تريد الحصول عليها ، فيمكنك ببساطة استخدام المعلمة ComputerName الخاصة بـ Recieve –Job cmdlet.
هناك طريقتان للتغلب على هذا. أولاً ، إذا كنت تعرف ما هي أجهزة الكمبيوتر التي تريد الحصول عليها ، فيمكنك ببساطة استخدام المعلمة ComputerName الخاصة بـ Recieve –Job cmdlet.

Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper

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

Get-Job -Id 3 –IncludeChildJob

Image
Image

Get-Job -Id 5 | Receive-Job –Keep

Image
Image

وظائف WMI

تكون وظائف WMI مماثلة إلى حد كبير لـ Remote Jobs ، مما يتطلب إضافة المعامل -AsJob إلى أمر Get-WmiObject cmdlet.

Image
Image
Image
Image

لسوء الحظ ، وهذا يعني أنهم يخضعون أيضا لنفس المشاعر التي ذكرتها في قسم الوظائف عن بعد.

وظائف مجدولة

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

Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)

هناك الكثير مما يجري في هذا الأمر ، لذا دعونا نكسره.

  • أولاً ، نعطي الوظيفة المجدولة لدينا اسم GetEventLogs.
  • ثم نخبره أنه عندما يتم تشغيله ، فإننا نرغب في تشغيل محتويات كتلة البرنامج النصي المحددة ، والتي تحصل بشكل أساسي على أحدث 100 إدخال من سجل أحداث الأمان.
  • بعد ذلك ، نحدد المشغل. نظرًا لأن معلمة الزناد تأخذ عنصرًا مستقبلاً كمدخل ، فقد استخدمنا أمرًا بينيًا لتوليد مشغل ينطلق كل يوم في الساعة الخامسة مساءً.
  • نظرًا لأننا نتعامل مع سجل الأحداث ، فنحن بحاجة إلى العمل كمسؤول ، يمكننا تحديده عن طريق إنشاء كائن ScheduledJobOption جديد ونقله إلى معلمة ScheduledJobOption.
نظرًا لأن هذا نوعًا مختلفًا من العمل ، فستحتاج أيضًا إلى استخدام أمر مختلف لاسترداد قائمة بجميع المهام المجدولة على جهاز ما.
نظرًا لأن هذا نوعًا مختلفًا من العمل ، فستحتاج أيضًا إلى استخدام أمر مختلف لاسترداد قائمة بجميع المهام المجدولة على جهاز ما.

Get-ScheduledJob

موصى به: