إدارة البرامج النصية المسبقة ونصوص ما بعد

البرامج النصية المسبقة والنصوص اللاحقة هي كتيبات تشغيل يتم تشغيلها في حساب Azure Automation الخاص بك قبل (قبل المهمة) وبعد (ما بعد المهمة) نشر التحديث. تشغيل البرامج النصية السابقة والبرامج النصية اللاحقة في سياق Azure، وليس محليًا. تشغيل البرامج النصية المسبقة في بداية نشر التحديث. تشغيل البرامج النصية بعد في نهاية النشر وبعد أي تمهيد التي تم تكوينها على Windows. بالنسبة إلى Linux، يتم تشغيل البرامج النصية بعد انتهاء النشر، وليس بعد إعادة تمهيد الجهاز.

متطلبات ما قبل النص النصي وما بعده

لكي يتم استخدام دفتر التشغيل كجهاز نصي مسبق أو برنامج نصي آخر، ينبغي استيراده إلى حساب التنفيذ التلقائي ونشر دفتر التشغيل.

حاليا، يتم دعم دفاتر تشغيل PowerShell 5.1 وPython 2 فقط كنصوص Pre/Post. أنواع أخرى من الكتب مثل بيثون 3، رسومية، PowerShell سير العمل، سير العمل PowerShell الرسومية حاليًا غير معتمدة كما قبل / آخر البرامج النصية.

معلمات ما قبل السيناريو وما بعد النص

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

  • [حرف]
  • [بايت]
  • [int]
  • [طويل]
  • [عشري]
  • [فردي]
  • [مزدوج]
  • [التاريخ الوقت]
  • [سلسلة]

لا تدعم معلمات دفتر التشغيل ما قبل البرمجة النصية ووظيفة البرنامج النصي أنواعًا منطقية أو كائنًا أو صفيفًا. تتسبب هذه القيم في فشل دفاتر التشغيل.

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

بالإضافة إلى معلمات دفتر التشغيل القياسية الخاصة بك، يتم توفير SoftwareUpdateConfigurationRunContextالمعلمة (نوع سلسلة JSON). إذا حددت المعلمة في دفتر تشغيل ما قبل البرنامج النصي أو ما بعده، فسيتم تمريرها تلقائيًا عن طريق نشر التحديث. تحتوي المعلمة على معلومات حول نشر التحديث، وهو مجموعة فرعية من المعلومات التي تم إرجاعها بواسطة SoftwareUpdateconfigurations API. تحدد المقاطع أدناه الخصائص المقترنة.

SoftwareUpdateConfigurationRunContext properties

الخاصية نوع ‏‏الوصف
SoftwareUpdateConfigurationName السلسلة‬ اسم تكوين تحديث البرنامج.
SoftwareUpdateConfigurationRunId GUID المعرف الفريد للتشغيل.
SoftwareUpdateConfigurationSettings مجموعة من الخصائص المتعلقة بتكوين تحديث البرامج.
SoftwareUpdateConfigurationSettings.OperatingSystem Int أنظمة التشغيل المستهدفة لنشر التحديث. 1= Windows و 2 = لينكس
SoftwareUpdateConfigurationSettings.Duration الفترة الزمنية (HH:MM:SS) يتم تشغيل الحد الأقصى لمدة نشر التحديث وفقًا PT[n]H[n]M[n]Sلمعيار ISO8601 ؛ تسمى أيضًا نافذة الصيانة.
مثال: 02:00:00
SoftwareUpdateConfigurationSettings.WindowsConfiguration مجموعة من الخصائص المتعلقة بأجهزة الكمبيوتر Windows.
SoftwareUpdateConfigurationSettings.WindowsConfiguration.excludedKbNumbers السلسلة‬ قائمة مفصولة مسافة KBs التي يتم استبعادها من نشر التحديث.
SoftwareUpdateConfigurationSettings.WindowsConfiguration.includedKbNumbers السلسلة‬ قائمة مفصولة بمسافات من KBs المضمنة في نشر التحديث.
SoftwareUpdateConfigurationSettings.WindowsConfiguration.UpdateCategories Integer 1 = "حرجة"؛
2 = "الأمن"
4 = "UpdateRollUp"
8 = "FeaturePack"
16 = "ServicePack"
32 = "تعريف"
64 = "أدوات"
128 = "التحديثات"
SoftwareUpdateConfigurationSettings.WindowsConfiguration.rebootSetting السلسلة‬ إعدادات إعادة التشغيل لنشر التحديث. القيم هي IfRequiredوNever وAlways
SoftwareUpdateConfigurationSettings.LinuxConfiguration مجموعة من الخصائص المتعلقة بأجهزة كمبيوتر Linux.
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageClassifications Integer 0 = "غير مصنف"
1 = "حرج"
2 = "الأمن"
4 = "أخرى"
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageNameMasks السلسلة‬ قائمة مفصولة بمسافات بأسماء الحزم المضمنة في نشر التحديث.
SoftwareUpdateConfigurationSettings.LinuxConfiguration.ExcludedPackageNameMasks السلسلة‬ قائمة مفصولة بمسافات بأسماء الحزم المستبعدة من نشر التحديث.
SoftwareUpdateConfigurationSettings.LinuxConfiguration.RebootSetting السلسلة‬ إعدادات إعادة التشغيل لنشر التحديث. القيم هي IfRequiredوNever وAlways
SoftwareUpdateConfiguationSettings.AzureVirtualMachines صفيف سلسلة قائمة بالمصادر الخاصة بـAzure VMs في نشر التحديث.
SoftwareUpdateConfigurationSettings.NonAzureComputerNames صفيف سلسلة قائمة أجهزة الكمبيوتر غير Azure FQDNs في نشر التحديث.

المثال التالي هو سلسلة JSON تمريرها إلى خصائص SoftwareUpdateConfigurationSettings لجهاز كمبيوتر Linux:

"SoftwareUpdateConfigurationSettings": {
     "OperatingSystem": 2,
     "WindowsConfiguration": null,
     "LinuxConfiguration": {
         "IncludedPackageClassifications": 7,
         "ExcludedPackageNameMasks": "fgh xyz",
         "IncludedPackageNameMasks": "abc bin*",
         "RebootSetting": "IfRequired"
     },
     "Targets": {
         "azureQueries": null,
         "nonAzureQueries": ""
     },
     "NonAzureComputerNames": [
        "box1.contoso.com",
        "box2.contoso.com"
     ],
     "AzureVirtualMachines": [
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/vm-01"
     ],
     "Duration": "02:00:00",
     "PSComputerName": "localhost",
     "PSShowComputerName": true,
     "PSSourceJobInstanceId": "2477a37b-5262-4f4f-b636-3a70152901e9"
 }

المثال التالي هو سلسلة JSON تمريرها إلى خصائص SoftwareUpdateConfigurationSettings لجهاز كمبيوتر Windows:

"SoftwareUpdateConfigurationRunContext": {
    "SoftwareUpdateConfigurationName": "sampleConfiguration",
    "SoftwareUpdateConfigurationRunId": "00000000-0000-0000-0000-000000000000",
    "SoftwareUpdateConfigurationSettings": {
      "operatingSystem": "Windows",
      "duration": "02:00:00",
      "windows": {
        "excludedKbNumbers": [
          "168934",
          "168973"
        ],
        "includedUpdateClassifications": "Critical",
        "rebootSetting": "IfRequired"
      },
      "azureVirtualMachines": [
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-01",
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-02",
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-03"
      ],
      "nonAzureComputerNames": [
        "box1.contoso.com",
        "box2.contoso.com"
      ]
    }
  }

يمكن العثور على مثال كامل مع كافة الخصائص في: الحصول على تكوين تحديث البرامج بالاسم.

إشعار

SoftwareUpdateConfigurationRunContextيمكن أن يحتوي الكائن على إدخالات مكررة للآلات. يمكن أن يتسبب هذا في تشغيل البرامج النصية المسبقة والنصوص اللاحقة عدة مرات على نفس الجهاز. للتغلب على هذا السلوك، استخدم Sort-Object -Unique لتحديد أسماء VM فريدة فقط.

استخدام برنامج نصي مسبق أو برنامج نصي آخر في عملية نشر

لاستخدام برنامج نصي مسبق أو لاحقة في نشر تحديث، ابدأ بإنشاء نشر تحديث. حدد البرامج النصية المسبقة + البرامج النصية اللاحقة. يفتح هذا الإجراء صفحة تحديد البرامج النصية المسبقة + البرامج النصية اللاحقة.

Select scripts

حدد البرنامج النصي الذي تريد استخدامه. في هذا المثال، نستخدم دفتر تشغيل UpdateManagement-TurnOnVms. عند تحديد دفتر التشغيل، يتم فتح صفحة تكوين البرنامج النصي. حدد Pre-Script، ثم حدد موافق.

كرر هذه العملية للبرنامج النصي UpdateManagement-TurnOffVms. ولكن عند اختيار نوع البرنامج النصي، حدد Post-Script.

يعرض المقطع العناصر المحددة الآن كلا البرنامجين النصيين المحددين. واحد هو ما قبل السيناريو والآخر هو ما بعد السيناريو :

Selected items

الانتهاء من تكوين نشر التحديث الخاص بك.

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

Update results

بتحديد تشغيل نشر التحديث، يتم عرض تفاصيل إضافية عن البرامج النصية السابقة والبرامج النصية اللاحقة. يتم توفير ارتباط إلى مصدر البرنامج النصي في وقت التشغيل.

Deployment run results

إيقاف عملية نشر

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

#In this case, we want to terminate the patch job if any run fails.
#This logic might not hold for all cases - you might want to allow success as long as at least 1 run succeeds
foreach($summary in $finalStatus)
{
    if ($summary.Type -eq "Error")
    {
        #We must throw in order to fail the patch deployment.
        throw $summary.Summary
    }
}

في Python 2، تتم إدارة معالجة الاستثناء في كتلة محاولة.

التفاعل مع الآلات

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

التفاعل مع أجهزة Azure

تعمل المهام السابقة والمهام اللاحقة ككتب تشغيل ولا يتم تشغيلها في الأصل على Azure VMs في عملية النشر. للتفاعل مع VMs Azure يجب أن يكون لديك العناصر التالية:

للتفاعل مع أجهزة Azure، يجب استخدام Cmdlet Invoke-AzVMRunCommand للتفاعل مع VMs Azure. للحصول على مثال حول كيفية القيام بذلك، راجع runbook مثال إدارة التحديث - تشغيل البرنامج النصي مع الأمر تشغيل.

التفاعل مع الأجهزة غير Azure

كما يتم تشغيل المهام السابقة والمهام اللاحقة في سياق Azure ولا تتوفر لديك إمكانية الوصول إلى الأجهزة غير Azure. للتفاعل مع الأجهزة غير Azure يجب أن يكون لديك العناصر التالية:

  • هوية مدارة أو حساب تشغيل ك
  • عامل دفتر التشغيل المختلط المثبت على الجهاز
  • دفتر تشغيل تريد تشغيله محليًا
  • دفتر تشغيل أصل

للتفاعل مع الأجهزة غير Azure، يتم تشغيل دفتر تشغيل أصل في سياق Azure. هذا الكتاب runbook يدعو كتاب تشغيل تابع مع cmdlet Start-AzAutomationRunbook. يجب تحديد RunOn المعلمة وتوفير اسم عامل Runbook المختلط للبرنامج النصي لتشغيل. راجع مثال runbook إدارة التحديث - تشغيل البرنامج النصي محليًا.

إحباط نشر التصحيح

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

if (<My custom error logic>)
{
    #Throw an error to fail the patch deployment.
    throw "There was an error, abort deployment"
}

في Python 2، إذا كنت تريد رمي خطأ عند حدوث شرط معين، استخدم عبارة رفع.

If (<My custom error logic>)
   raise Exception('Something happened.')

العينات

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

Gallery list

أو يمكنك البحث عنها بواسطة اسم البرنامج النصي الخاص بهم، كما هو موضح في القائمة التالية:

  • إدارة التحديث - تشغيل VMs
  • إدارة التحديث - إيقاف تشغيل VMs
  • إدارة التحديث - تشغيل البرنامج النصي محليا
  • إدارة التحديث - نموذج للبرامج النصية السابقة/ اللاحقة
  • إدارة التحديث - تشغيل البرنامج النصي مع تشغيل الأمر

هام

بعد استيراد كتب التشغيل، يجب نشرها قبل استخدامها. للقيام بذلك، ابحث عن دفتر التشغيل في حساب التنفيذ التلقائي، وحدد تحريرثم حدد نشر.

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

<#
.SYNOPSIS
 Barebones script for Update Management Pre/Post

.DESCRIPTION
  This script is intended to be run as a part of Update Management pre/post-scripts.
  It requires the Automation account's system-assigned managed identity.

.PARAMETER SoftwareUpdateConfigurationRunContext
  This is a system variable which is automatically passed in by Update Management during a deployment.
#>

param(
    [string]$SoftwareUpdateConfigurationRunContext
)

#region BoilerplateAuthentication
# Ensures you do not inherit an AzContext in your runbook
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
#endregion BoilerplateAuthentication

#If you wish to use the run context, it must be converted from JSON
$context = ConvertFrom-Json $SoftwareUpdateConfigurationRunContext
#Access the properties of the SoftwareUpdateConfigurationRunContext
$vmIds = $context.SoftwareUpdateConfigurationSettings.AzureVirtualMachines | Sort-Object -Unique
$runId = $context.SoftwareUpdateConfigurationRunId

Write-Output $context

#Example: How to create and write to a variable using the pre-script:
<#
#Create variable named after this run so it can be retrieved
New-AzAutomationVariable -ResourceGroupName $ResourceGroup -AutomationAccountName $AutomationAccount -Name $runId -Value "" -Encrypted $false
#Set value of variable
Set-AutomationVariable -Name $runId -Value $vmIds
#>

#Example: How to retrieve information from a variable set during the pre-script
<#
$variable = Get-AutomationVariable -Name $runId
#>

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

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

إشعار

بالنسبة إلى كتب تشغيل PowerShell غير الرسومية، Add-AzAccountوAdd-AzureRMAccount اسم مستعار لـ Connect-AzAccount. يمكنك استخدام cmdlets هذه أو يمكنك تحديث الوحدات النمطية في حساب التنفيذ التلقائي الخاص بك إلى أحدث الإصدارات. قد تحتاج إلى تحديث الوحدات النمطية الخاصة بك حتى إذا قمت بإنشاء حساب تنفيذ تلقائي جديد.

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

للحصول على تفاصيل إدارة التحديث، راجع إدارة التحديثات والتصحيحات لأجهزة VMs.