بوويرشيل هو لغة البرمجة وسطر الأوامر بيئة قوية لإدارة وأتمتة المهام في نظام التشغيل ويندوز. يوفر العديد من الأوامر والوظائف المضمنة لأداء عمليات مختلفة. ومع ذلك ، في بعض الأحيان يصبح من الضروري تشغيل العديد من الإجراءات بشكل غير متزامن من أجل تحسين كفاءة تنفيذ المهمة.
في هذه المقالة ، سوف ننظر إلى طريقة فعالة لتشغيل الإجراءات بشكل غير متزامن في بوويرشيل باستخدام وحدة بسجوب والمهام الخلفية. توفر وحدة بسجوب آلية لإنشاء مهام الخلفية التي يمكن تنفيذها بشكل غير متزامن دون عرقلة عملية بويرشيل الرئيسية.
لاستخدام وحدة بسجوب ، يجب عليك أولا استيراده باستخدام الأمر استيراد وحدة بسجوب. ثم يمكنك إنشاء مهمة خلفية باستخدام الأمر بدء العمل وتمريرها التعليمات البرمجية أو البرنامج النصي الذي تريد تنفيذه بشكل غير متزامن.
مثال:
job الوظيفة = بدء العمل-سكريبتبلوك {
# هنا يمكنك تنفيذ التعليمات البرمجية أو البرنامج النصي
}
بعد إنشاء مهمة خلفية ، يمكنك التحقق من حالتها باستخدام أمر الحصول على الوظيفة والحصول على نتيجة التنفيذ باستخدام أمر تلقي الوظيفة.
يمكن أن يؤدي استخدام مهام الخلفية والتنفيذ غير المتزامن للإجراءات إلى تحسين أداء بوويرشيل بشكل كبير وتسريع تنفيذ المهام. بفضل القدرة على تنفيذ الأوامر بالتوازي ، يمكنك تقليل وقت تنفيذ المهمة وزيادة كفاءة البرنامج النصي الخاص بك.
- لماذا استخدام تنفيذ الإجراء غير المتزامن في بوويرشيل?
- مزايا بدء تشغيل الإجراء غير المتزامن
- كيفية استخدام بدء التشغيل غير المتزامن في بوويرشيل?
- 1. باستخدام وحدة سير العمل بوويرشيل
- 2. باستخدام البداية-ثريدجوب كمدليت
- 3. باستخدام وحدة بويرشلباكغروندجوبس
- 4. باستخدام الوحدة المتوازية
- خطوات تشغيل الإجراء بشكل غير متزامن
- أمثلة واقعية لبدء التشغيل غير المتزامن في بوويرشيل
- مثال 1: تنفيذ البرنامج النصي غير المتزامن
- مثال 2: بداية غير متزامنة من كمدليتس
- سؤال وجواب
- ما هي مزايا تشغيل الإجراءات بشكل غير متزامن في بوويرشيل?
- ما هي الطريقة المستخدمة لتشغيل الإجراءات بشكل غير متزامن في بوويرشيل?
- هل من الممكن الحصول على نتيجة مهمة غير متزامنة في بوويرشيل?
- كيف يمكنني معرفة ما اذا كان اكتمال مهمة غير متزامن في بوويرشيل?
- كيف يمكنني إلغاء مهمة غير متزامنة في بوويرشيل?
- هل من الممكن الحصول على معلومات حول وقت تنفيذ مهمة غير متزامنة في بوويرشيل?
لماذا استخدام تنفيذ الإجراء غير المتزامن في بوويرشيل?
بوويرشيل هي لغة البرمجة قوية وبيئة سطر الأوامر ، ومريحة لأتمتة المهام وتنفيذ البرامج النصية الإجرائية. في الوضع الكلاسيكي ، عادة ما يتم تنفيذ الأوامر والبرامج النصية في بوويرشيل بشكل متزامن — يتم تنفيذ كل أمر أو إجراء بالتتابع ، مما قد يؤدي إلى إبطاء التنفيذ ويكون غير فعال عند العمل بكميات كبيرة من البيانات أو عند معالجة مهام متعددة بالتوازي.
ومع ذلك ، في بوويرشيل ، من الممكن إجراء تنفيذ غير متزامن للإجراءات ، والتي يمكن أن تزيد بشكل كبير من الأداء وتبسيط العمل مع معالجة البيانات متعددة مؤشرات الترابط.
فيما يلي بعض الأسباب التي تجعل استخدام تنفيذ الإجراء غير المتزامن في بوويرشيل مفيدا:
- تقليل وقت تنفيذ المهمة: يسمح لك التنفيذ غير المتزامن بتشغيل إجراءات متعددة بالتوازي ، مما قد يؤدي إلى تسريع تنفيذ المهمة وتقليل وقت تنفيذ البرنامج الإجمالي. على سبيل المثال ، إذا كان لديك العديد من العمليات طويلة المدى التي لا تعتمد على بعضها البعض ، فيمكنك تشغيلها في وقت واحد بدلا من التسلسل.
- تحسين استجابة واجهة المستخدم: يسمح لك التنفيذ غير المتزامن بمعالجة إدخال البيانات وإخراجها بالتوازي مع المهام الأخرى. هذا مفيد بشكل خاص لإنشاء تطبيقات تفاعلية حيث يمكن للمستخدم الاستمرار في كتابة الأوامر أو القيام بإجراءات أخرى ، حتى إذا كانت عملية تنفيذ الأوامر تستغرق وقتا.
- معالجة البيانات المتوازية: يسمح لك التنفيذ غير المتزامن بمعالجة كميات كبيرة من البيانات بالتوازي ، مما يؤدي إلى تسريع سرعة المعالجة الإجمالية ويسمح لك باستخدام موارد الكمبيوتر بشكل أكثر كفاءة.
- تبسيط السيناريوهات المعقدة: يجعل التنفيذ غير المتزامن من السهل التبديل بين المهام المختلفة ومعالجتها بالتوازي ، مما يبسط إلى حد كبير العمل مع معالجة البيانات متعددة مؤشرات الترابط وتنفيذ السيناريوهات المعقدة.
وبالتالي ، يمكن أن يؤدي استخدام تنفيذ الإجراء غير المتزامن في بوويرشيل إلى تسريع تنفيذ المهام بشكل كبير ، وزيادة استجابة واجهة المستخدم وتبسيط العمل باستخدام معالجة البيانات متعددة مؤشرات الترابط. هذا مفيد بشكل خاص عند العمل مع كميات كبيرة من البيانات أو عند إنشاء تطبيقات تفاعلية.
مزايا بدء تشغيل الإجراء غير المتزامن
يسمح لك التنفيذ غير المتزامن للإجراءات في بوويرشيل باستخدام موارد الكمبيوتر بكفاءة وتقليل وقت تنفيذ المهمة. فيما يلي بعض مزايا تنفيذ الإجراء غير المتزامن:
تنفيذ المهام المتوازية: يسمح لك تنفيذ الإجراء غير المتزامن بتشغيل مهام متعددة في نفس الوقت ، على عكس التنفيذ المتزامن ، حيث يتم تنفيذ المهام بدورها. يتيح لك ذلك تسريع تنفيذ العمليات بشكل كبير وزيادة الإنتاجية.
تحسين الموارد: يسمح تنفيذ الإجراء غير المتزامن بالاستخدام الفعال لموارد الكمبيوتر مثل وقت المعالج والذاكرة وموارد الشبكة. بدلا من انتظار اكتمال كل مهمة ، يتيح لك بدء التشغيل غير المتزامن التبديل بين المهام وتنفيذها بشكل مستقل عن بعضها البعض.
معالجة الأخطاء: يوفر تنفيذ الإجراء غير المتزامن معالجة أكثر مرونة للأخطاء. في حالة حدوث خطأ في مهمة واحدة ، يمكن أن تستمر المهام الأخرى في العمل دون تعليق البرنامج بأكمله. يتيح لك ذلك اكتشاف الأخطاء وتصحيحها في الوقت الفعلي ، وكذلك الاستمرار في أداء المهام التي لا تعتمد على الخطأ.
تحسين استخدام موارد النظام: يسمح تنفيذ الإجراء غير المتزامن باستخدام أكثر كفاءة لموارد النظام مثل مساحة القرص وعرض النطاق الترددي للشبكة. يمكن تنفيذ المهام بالتوازي ، مما يسمح لك بتوزيع الحمل على النحو الأمثل وتقليل وقت التنفيذ.
بشكل عام ، يعد تنفيذ الإجراء غير المتزامن طريقة فعالة لتحسين الأداء وتحسين استخدام موارد الكمبيوتر. إنه مفيد بشكل خاص عند تنفيذ المهام التي تتطلب الكثير من الوقت أو الموارد ، مثل معالجة كميات كبيرة من البيانات أو إجراء عمليات شبكة طويلة.
كيف يمكنني استخدام بدء التشغيل غير المتزامن في بوويرشيل?
تنفيذ الإجراء غير المتزامن في بوويرشيل يسمح لك لأداء العمليات بالتوازي ويزيد من كفاءة تنفيذ المهمة. في هذه المقالة ، سنلقي نظرة على عدة طرق لاستخدام بدء التشغيل غير المتزامن في بوويرشيل.
1. باستخدام وحدة سير العمل بوويرشيل
تحتاج إلى التحقق من توفره وتنزيله إذا لم يتم تنزيله بعد:
إذا (- لا (الحصول على وحدة اسم بسوركفلو-ليستافابل)) {
استيراد - وحدة بسوركفلو
}
بعد ذلك ، يمكنك إنشاء سير عمل وتشغيله باستخدام الأمر التالي:
بدء العمل-اسم " وظيفتي "- بسجوبتيبينام" ميجوبتيبي " - سكريبتبلوك {
# الرمز الخاص بك
}
يمكنك تحديد عدة إجراءات ليتم تشغيلها بالتوازي باستخدام الأمر بدء العمل ومنحهم أسماء فريدة من نوعها.
2. باستخدام كمدليت
تحتاج إلى التحقق من توفره وتنزيله إذا لم يتم تنزيله بعد:
إذا (- لا (الحصول على وحدة اسم ثريادجوب-ليستافابل)) {
استيراد وحدة ثريادجوب
}
ثم يمكنك إنشاء وتشغيل مهمة تدفق باستخدام الأمر ستارت-ثريادجوب:
بدء-ثريادجوب-اسم "مايجوب" - سكريبتبلوك {
# الرمز الخاص بك
}
يمكنك تحديد العديد من الإجراءات ليتم تشغيلها بالتوازي باستخدام الأمر ستارت-ثريادجوب ومنحهم أسماء فريدة من نوعها.
3. باستخدام الوحدة
يجب التحقق من توافرها وتنزيلها إذا لم يتم تنزيلها بعد:
إذا (- لا (الحصول على وحدة اسم باورشيلباكغروندجوبس-ليستافابل)) {
استيراد - وحدة بوورشيلباكغروندجوبس
}
ثم يمكنك إنشاء وتشغيل المهمة باستخدام الأمر ابدأ-باكغروندجوب:
ابدأ-باكجروندجوب-اسم "مايجوب" - سكريبتبلوك {
# الرمز الخاص بك
}
يمكنك تحديد العديد من الإجراءات ليتم تشغيلها بالتوازي باستخدام الأمر ستارت باكغروندجوب ومنحهم أسماء فريدة من نوعها.
4. باستخدام الوحدة
يجب التحقق من توافرها وتنزيلها إذا لم يتم تنزيلها بعد:
إذا (- لا (الحصول على وحدة-اسم متوازي-ليستافابل)) {
تثبيت وحدة اسم القوة المتوازية
}
ثم يمكنك إنشاء وتشغيل المهام المتوازية باستخدام الأمر استدعاء موازية:
استدعاء-متوازي-سكريبتبلوك {
# الرمز الخاص بك
}
يمكنك تحديد العديد من الإجراءات ليتم تشغيلها بالتوازي باستخدام الأمر استدعاء موازية.
يمكن الحصول على إخراج نتائج المهام غير المتزامنة باستخدام أمر تلقي المهمة.
الآن لديك عدة طرق لاستخدام بدء التشغيل غير المتزامن في بوويرشيل. اختيار واحد الحق لتلبية الاحتياجات الخاصة بك وتحسين أداء المهمة الخاصة بك!
خطوات تشغيل الإجراء بشكل غير متزامن
بدء-مواز-الأوامر-الأوامر
انتظر حتى تنتهي الأوامر من التنفيذ
أمثلة واقعية لبدء التشغيل غير المتزامن في بوويرشيل
تنفيذ الإجراء غير المتزامن في بوويرشيل هو أداة حقيقية وقوية يمكن أن تحسن بشكل كبير من كفاءة التعليمات البرمجية الخاصة بك. دعونا نلقي نظرة على بعض الأمثلة على تطبيقه:
التنفيذ الموازي للأوامر. لنفترض أن لديك قائمة بالخوادم التي تحتاج إلى التحقق من توفرها. بدلا من تنفيذ الأمر بالتتابع
اختبار اتصال
لكل خادم ، يمكنك تشغيل فحص غير متزامن لجميع الخوادم في نفس الوقت. سيؤدي ذلك إلى توفير الوقت وتسريع عملية التحقق.
تحميل البيانات من مصادر مختلفة. على سبيل المثال ، يمكنك تحميل البيانات من قاعدة بيانات وواجهة برمجة تطبيقات ونظام ملفات بالتوازي. هذا مفيد بشكل خاص إذا كان لكل مصدر بيانات معدل استجابة مختلف. سيسمح لك بدء التشغيل غير المتزامن بتحميل البيانات بالتوازي وتقليل إجمالي وقت تنفيذ العملية.
تحديث البيانات في الخلفية. إذا كنت بحاجة إلى تحديث البيانات بشكل دوري ، فيمكنك استخدام إجراء غير متزامن لبدء تحديث البيانات في الخلفية ، دون حظر واجهة المستخدم. سيؤدي ذلك إلى زيادة استجابة التطبيق الخاص بك والسماح للمستخدم بمواصلة العمل دون تأخير.
- لتحقيق تنفيذ الإجراء غير المتزامن في بوويرشيل ، يمكنك استخدام أساليب وأدوات مختلفة ، مثل الكتل المتوازية أو وحدات سير العمل أو مكتبات الجهات الخارجية. من المهم اختيار النهج الذي يناسب مهمتك المحددة على أفضل وجه ويأخذ في الاعتبار خصوصيات بيئة وقت التشغيل الخاصة بك.
- مثال 1: تنفيذ البرنامج النصي غير المتزامن
- واحدة من الطرق لتشغيل البرامج النصية بشكل غير متزامن في بوويرشيل هو استخدام كمدليت بدء العمل. هذا كمدليت يسمح لك لتنفيذ الأوامر في الخلفية دون عرقلة موضوع التنفيذ الرئيسي.
- في ما يلي مثال على التعليمات البرمجية التي توضح التحميل غير المتزامن وتنفيذ البرامج النصية:
- إنشاء قائمة من البرامج النصية التي تحتاج إلى تشغيل بشكل غير متزامن.
لكل برنامج نصي ، نقوم بإنشاء مهمة منفصلة باستخدام كمدليت بدء العمل.
لكل مهمة ، نقوم بتعيين معلمات البرنامج النصي والمسار إلى البرنامج النصي ليتم تنفيذه.
نقوم بتشغيل كل مهمة بشكل غير متزامن.
ننتظر أن تكتمل جميع المهام باستخدام كمدليت الانتظار وظيفة.
Приведенный ниже код демонстрирует асинхронную загрузку и выполнение двух скриптов:
$scripts = @(
@{ Name = "Script1"; Path = "C:\Scripts\Script1.ps1" },
@{ Name = "Script2"; Path = "C:\Scripts\Script2.ps1" }
)
foreach ($script in $scripts) {
$job = Start-Job -ScriptBlock {
param($scriptPath)
# Загрузка и выполнение скрипта
& $scriptPath
} -ArgumentList $script.Path
Write-Host "Запущен скрипт $($script.Name)"
}
# Дожидаемся завершения всех задач
انتظر-وظيفة *
# الحصول على نتائج إنجاز المهام
- النتائج = الحصول على وظيفة / تلقي وظيفة
فوريش (result النتيجة في results النتائج) {
كتابة المضيف "نتيجة التنفيذ: result النتيجة"
}
نتيجة لتنفيذ هذا الرمز ، سيتم تشغيل اثنين من البرامج النصية بشكل غير متزامن ، لن يؤدي تنفيذها إلى حظر مؤشر ترابط التنفيذ الرئيسي. عند الانتهاء من كل مهمة ، سيتم عرض نتيجة تنفيذ البرنامج النصي.
مثال 2: بداية غير متزامنة من كمدليتس
في بوويرشيل ، يمكنك تشغيل بشكل غير متزامن ليس فقط البرامج النصية ، ولكن أيضا كمدليتس الفردية. للقيام بذلك ، يمكنك استخدام تصميم متعدد مؤشرات الترابط بسيط.
وفيما يلي مثال على التعليمات البرمجية التي يتم تنفيذ عدة كمدليتس بشكل غير متزامن:
# وضع مجموعة مع كمدليتس
- أوامر = @('الحصول على عملية' ، 'الحصول على الخدمة' ، 'الحصول على سجل الأحداث-نظام لوغنام')
# إنشاء تجمع موضوع
تجمع = [النظام.مجموعات.عام.قائمة [بوويرشيل]]:: جديد()
# لكل كمدليت ، إنشاء كائن فئة بوويرشيل جديد وإضافته إلى تجمع مؤشر الترابط
فوريش (command الأوامر في commands الأوامر) {
ps ملاحظة = [بوويرشيل]:: إنشاء()
ps ملاحظة.أدسكريبت (command الأمر)
بركة.إضافة (ps ملاحظة)
}
# تشغيل جميع المواضيع بالتوازي
- تجمع / لكل كائن { $ _ .بيجينفوك ()}
# في انتظار اكتمال جميع المواضيع
- تجمع / لكل كائن { $ _ .إندنفوك (_ _ .بيجينفوك ())}
في هذا المثال ، نعلن أولا صفيف مع عدة كمدليتس التي نريد تنفيذها بشكل غير متزامن. ثم نقوم بإنشاء تجمع الصفحات التي سيتم تشغيل كمدليتس.
لكل كمدليت ، ونحن إنشاء كائن فئة بوويرشيل جديد وإضافته إلى تجمع الموضوع. ثم نقوم بتشغيل جميع المواضيع بالتوازي باستخدام طريقة بيجينفوك ().
للتأكد من إنهاء جميع مؤشرات الترابط ، استخدمنا طريقة إندينفوك () ، التي تمنع مؤشر الترابط الحالي حتى تنتهي الطريقة غير المتزامنة.
مع هذا النهج ، سيتم تنفيذ كل كمدليت بالتوازي ، مما سيسرع بشكل كبير تنفيذ البرنامج النصي في الحالات التي تحتاج فيها إلى معالجة كمية كبيرة من البيانات أو إجراء حسابات ثقيلة.
سؤال وجواب
ما هي مزايا تشغيل الإجراءات بشكل غير متزامن في بوويرشيل?
تنفيذ الإجراء غير المتزامن في بوويرشيل يسمح لك لأداء مهام متعددة في وقت واحد ، مما يزيد من كفاءة العمل ويقلل من وقت التنفيذ. كما يسمح لك بالتخلص من الأقفال وزيادة استجابة البرنامج.
ما هي الطريقة المستخدمة لتشغيل الإجراءات بشكل غير متزامن في بوويرشيل?
لتشغيل الإجراءات بشكل غير متزامن في بوويرشيل ، يمكنك استخدام طريقة بدء العمل. يقوم بإنشاء عملية جديدة وتشغيل المهمة في الخلفية دون حظر مؤشر ترابط التنفيذ الرئيسي.
هل من الممكن الحصول على نتيجة مهمة غير متزامنة في بوويرشيل?
نعم ، يمكنك الحصول على نتيجة مهمة غير متزامنة في بوويرشيل. للقيام بذلك ، يمكنك استخدام أمر تلقي المهمة ، الذي يتلقى نتيجة المهمة من عملية الخلفية.
كيف يمكنني معرفة ما اذا كان اكتمال مهمة غير متزامن في بوويرشيل?
للتحقق من الانتهاء من مهمة غير متزامنة في بوويرشيل ، يمكنك استخدام الأمر الحصول على وظيفة. يسمح لك بالحصول على معلومات حول تشغيل مهام الخلفية ، بما في ذلك حالتها. يمكنك أيضا استخدام معلمة الحالة المكتملة للحصول على قائمة بالمهام المكتملة.