إنشاء دفاتر تشغيل نمطية في عملية التنفيذ التلقائي

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

هناك طريقتان لطلب دفتر تشغيل فرعي: مضمن أو من خلال cmdlet. يلخّص الجدول أدناه الاختلافات لمساعدتك في تحديد الطريقة الأفضل للسيناريوهات.

مضمن Cmdlet
الوظيفة تشغيل دفاتر التشغيل الفرعية في نفس المهمة كالدفاتر الأصلية. يتم إنشاء مهمة منفصلة لدفتر التشغيل الفرعي.
تنفيذ ينتظر دفتر التشغيل الأصلي دفتر التشغيل الفرعي حتى الإنهاء قبل الاستمرار. يستمر دفتر التشغيل الأصلي مباشرة بعد بدء تشغيل دفتر التشغيل الفرعي أو ينتظر دفتر التشغيل الأصلي دفتر التشغيل الفرعي حتى ينهي العملية.
الاخراج يمكن لدفتر التشغيل الأصلي الحصول على مخرجات مباشرة من دفتر التشغيل الفرعي. يجب أن يسترد دفتر التشغيل الأصلي المخرجات من مهمة دفتر التشغيل الفرعي، أو يحصل دفتر التشغيل الأصلي على المخرجات بشكل مباشر من دفتر التشغيل الفرعي.
معلمات تُحدد قيم معلمات دفتر التشغيل الفرعي بشكل منفصل ويمكن استخدام أي نوع من البيانات. تُدمج قيم معلمات دفتر التشغيل الفرعي في جدول تجزئة واحد. يمكن أن يتضمن جدول التجزئة هذا فقط على بيانات موضوعية بسيطة وصفيفة وأنواع بيانات العنصر التي تستخدم تسلسل JSON.
حساب التنفيذ التلقائي يمكن استخدام دفتر التشغيل الأصلي فقط لدفتر التشغيل الفرعي في نفس حساب التنفيذ التلقائي. يمكن لدفاتر التشغيل الأصلية استخدام دفتر تشغيل فرعي من أي حساب تنفيذ تلقائي، ومن نفس اشتراك Microsoft Azure، وحتى من اشتراك آخر لديك اتصال به.
النشر يجب نشر دفتر التشغيل الفرعي قبل نشر دفتر التشغيل الأصلي. يُنشَر دفتر التشغيل الفرعي في أي وقت قبل بدء تشغيل دفتر التشغيل الأصلي.

طلب دفتر تشغيل فرعي باستخدام التنفيذ المضمن

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

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

عند نشر دفتر تشغيل، يجب نشر أية دفاتر تشغيل فرعية تتطلبها مسبقًا. والسبب هو أن Microsoft Azure Automation ينشئ اقترانًا مع أية دفاتر تشغيل فرعية عندما يقوم بتجميع دفتر تشغيل. في حال لم تكن دفاتر التشغيل الفرعية قد نُشرت بالفعل، يظهر دفتر التشغيل الأصلي للنشر بشكل صحيح ولكنه ينشئ استثناء عند بدء تشغيله.

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

يمكن أن تكون معلمات دفتر التشغيل الفرعي المُضمن من أي نوع بيانات، بما في ذلك العناصر المعقدة. لا يوجد تسلسل JSON، كما هو الحال عند بدء تشغيل دفتر التشغيل باستخدام مدخل Microsoft Azure أو باستخدام cmdlet Start-AzAutomationRunbook.

أنواع دفاتر التشغيل

حاليا، يتم دعم PowerShell 5.1 ويمكن فقط لبعض أنواع كتب التشغيل استدعاء بعضها البعض:

  • يمكن لدفتر تشغيل PowerShellودفتر التشغيل الرسومي استدعاء بعضهما البعض ضمنًا؛ لأن كليهما يستند إلى PowerShell.
  • يمكن لدفتر تشغيل PowerShell Workflowودفتر تشغيل مخطط سير العمل الرسومي طلب بعضهما البعض ضمنيًّا لأنهما كليهما قائمان على PowerShell Workflow.
  • لا يمكن لأنواع PowerShell وأنواع PowerShell Workflow الاتصال ببعضها البعض ضمنيًّا. يتعيّن أن يستخدما Start-AzAutomationRunbook.

هام

تنفيذ البرامج النصية التابعة باستخدام .\child-runbook.ps1 غير مدعوم في PowerShell 7.1 وPowerShell 7.2 الحل البديل: استخدم Start-AutomationRunbook (cmdlet الداخلي) أو Start-AzAutomationRunbook (من الوحدة النمطية Az.Automation ) لبدء تشغيل دفتر تشغيل آخر من دفتر التشغيل الأصل.

ترتيب نشر مسائل دفاتر التشغيل فقط لكل من دفاتر تشغيل PowerShell Workflow و PowerShell Workflow الرسومي.

عندما يطلب دفتر التشغيل الخاص بك دفتر تشغيل فرعي رسومي أو PowerShell Workflow باستخدام التنفيذ المضمن، فإنه يستخدم اسم دفتر التشغيل. يتعيّن أن يبدأ الاسم بـ .\\ لتحديد أن البرنامج النصي موجود في الدليل المحلي.

مثال

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

$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = PSWF-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true

إليك نفس المثال ولكن باستخدام دفتر تشغيل PowerShell كدفتر تشغيل فرعي.

$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = .\PS-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true

بدء التشغيل لدفتر تشغيل فرعي باستخدام cmdlet

هام

في حال طلب دفتر التشغيل الخاص بك دفتر تشغيل فرعي باستخدام Start-AzAutomationRunbook cmdlet Wait بالمعلمة وينتج عن دفتر التشغيل التابع نتيجة عنصر، فقد تواجه العملية خطأ. للتغلب على الخطأ، راجع دفاتر التشغيل الفرعية بمخرجات عنصر. توضّح هذه المقالة كيفية تطبيق منطق الاستقصاء للنتائج باستخدام cmdlet Get-AzAutomationJobOutputRecord.

يمكنك استخدام Start-AzAutomationRunbookبدء دفتر تشغيل، على النحو الموضّح في بدء تشغيل لدفتر تشغيل باستخدام Windows PowerShell . هناك طريقتان لاستخدام cmdlet هذا:

  • يعيد cmdlet معرّف الوظيفة عند إنشاء المهمة لدفتر التشغيل الفرعي.
  • ينتظر cmdlet حتى انتهاء المهمة الفرعية وإرجاع المخرجات من دفتر التشغيل الفرعي. يُمكّن هذا الوضع البرنامج النصي الخاص بك عن طريق تحديد Wait المعلمة.

تعمل الوظيفة التي بدأت من دفتر تشغيل فرعي باستخدام cmdlet بشكل منفصل عن مهمة دفتر التشغيل الأصلي. يؤدي هذا السلوك في مهام أكثر من بدء تشغيل دفتر التشغيل المُضمن، ويجعل المهام أكثر صعوبة لغرض التعقّب. ويمكن تشغيل دفتر التشغيل الأصلي أكثر من دفتر تشغيل فرعي واحد بشكل غير متزامن دون انتظار أي منها حتى الاكتمال. لهذا التنفيذ المتوازي لطلب دفاتر التشغيل المُضمنة، يجب أن يستخدم دفتر التشغيل الأصلي الكلمة الأساسية المتوازية.

لا يعيد إخراج دفتر التشغيل الفرعي إلى دفتر التشغيل الأصلي بشكل موثوق بسبب التوقيت. أيضًا، $VerbosePreference، $WarningPreference، متغيرات أخرى قد لا تُنشر إلى دفاتر التشغيل الفرعية. لتجنب هذه المشاكل، يمكنك بدء تشغيل دفاتر التشغيل الفرعية كمهام منفصلة للتنفيذ التلقائي باستخدام Start-AzAutomationRunbookWait المعلمة. تمنع هذه التقنية دفتر التشغيل الأصلي حتى يكمل دفتر التشغيل الفرعي العملية.

في حال كنت لا تريد أن يتم منع دفتر التشغيل الأصلي عند الانتظار، يمكنك بدء تشغيل دفتر التشغيل الفرعي باستخدام الخيار Start-AzAutomationRunbookبدون Wait المعلمة. في هذه الحالة، يجب أن يستخدم دفتر التشغيل الخاص بك Get-AzAutomationJob حتى ينتظر إكمال المهمة. كما يجب استخدام Get-AzAutomationJobOutputوالحصول على AzAutomationJobOutputRecord لاسترداد النتائج.

يتم توفير معلمات دفتر تشغيل فرعي بدأ تشغيله باستخدام cmdlet كجدول تجزئة كما هو موضح في معلمات دفتر التشغيل. يمكنك أن تستخدم أنواع بيانات بسيطة فقط. إذا كان دفتر التشغيل يحتوي على معلمة بنوع بيانات معقدة، يجب أن تُسمى مضمنة.

قد يتم فقدان سياق الاشتراك عند بدء تشغيل دفاتر تشغيل فرعية كمهام منفصلة. لكي ينفّذ دفتر التشغيل الفرعي Az module cmdlets مقابل اشتراك Microsoft Azure الخاص، يجب أن تتم مصادقة دفتر التشغيل الفرعي لهذا الاشتراك بشكل مستقل عن دفتر التشغيل الأصلي.

إذا كانت المهام داخل نفس حساب التنفيذ التلقائي تعمل مع أكثر من اشتراك واحد، قد يؤدي تحديد اشتراك في مهمة واحدة إلى تغيير سياق الاشتراك المحدد حاليًّا للمهام الأخرى. لتجنب هذا الموقف، استخدمDisable-AzContextAutosave -Scope Process في بداية كل دفتر تشغيل. يحفظ هذا الإجراء السياق إلى تنفيذ دفتر التشغيل هذا فقط.

مثال

يبدأ المثال التالي دفتر تشغيل فرعي باستخدام معلمات ثم ينتظر حتى ينتهي منها باستخدام Start-AzAutomationRunbook cmdletWait بمعلمات. بعد انتهاء دفتر التشغيل الفرعي المثال، يجمع المثال مخرجات cmdlet من دفتر التشغيل الفرعي. لاستخدام Start-AzAutomationRunbook، يتعيّن أن يصادق البرنامج النصي على اشتراك Microsoft Azure.

# Ensure that the runbook does not inherit an AzContext
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

$params = @{"VMName"="MyVM";"RepeatCount"=2;"Restart"=$true}

Start-AzAutomationRunbook `
    -AutomationAccountName 'MyAutomationAccount' `
    -Name 'Test-ChildRunbook' `
    -ResourceGroupName 'LabRG' `
    -DefaultProfile $AzureContext `
    -Parameters $params -Wait

إذا كنت تريد تشغيل دفتر التشغيل للتنفيذ مع هوية مدارة معينة من قِبل النظام، اترك التعليمات البرمجية كما هي. إذا كنت تفضل استخدام الهوية المدارة المعينة من قِبل المستخدم، بعد ذلك:

  1. من الخط 5، قم بإزالة$AzureContext = (Connect-AzAccount -Identity).context،
  2. استبدله بـ $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context، و
  3. أدرج معرّف العميل.

الخطوات التالية