إدارة البرامج النصية المسبقة ونصوص ما بعد
البرامج النصية المسبقة والنصوص اللاحقة هي كتيبات تشغيل يتم تشغيلها في حساب 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 فريدة فقط.
استخدام برنامج نصي مسبق أو برنامج نصي آخر في عملية نشر
لاستخدام برنامج نصي مسبق أو لاحقة في نشر تحديث، ابدأ بإنشاء نشر تحديث. حدد البرامج النصية المسبقة + البرامج النصية اللاحقة. يفتح هذا الإجراء صفحة تحديد البرامج النصية المسبقة + البرامج النصية اللاحقة.
حدد البرنامج النصي الذي تريد استخدامه. في هذا المثال، نستخدم دفتر تشغيل UpdateManagement-TurnOnVms. عند تحديد دفتر التشغيل، يتم فتح صفحة تكوين البرنامج النصي. حدد Pre-Script، ثم حدد موافق.
كرر هذه العملية للبرنامج النصي UpdateManagement-TurnOffVms. ولكن عند اختيار نوع البرنامج النصي، حدد Post-Script.
يعرض المقطع العناصر المحددة الآن كلا البرنامجين النصيين المحددين. واحد هو ما قبل السيناريو والآخر هو ما بعد السيناريو :
الانتهاء من تكوين نشر التحديث الخاص بك.
عند اكتمال نشر التحديث الخاص بك، يمكنك الانتقال إلى تحديث عمليات النشر لعرض النتائج. كما ترون، يتم توفير الحالة لمرحلة ما قبل البرنامج النصي وما بعد السيناريو:
بتحديد تشغيل نشر التحديث، يتم عرض تفاصيل إضافية عن البرامج النصية السابقة والبرامج النصية اللاحقة. يتم توفير ارتباط إلى مصدر البرنامج النصي في وقت التشغيل.
إيقاف عملية نشر
إذا كنت تريد إيقاف نشر استنادا إلى برنامج نصي مسبق، يجب طرح استثناء. إذا لم تقم بذلك، سيتم تشغيل النشر ووظيفة البرنامج النصي. يوضح مقتطف التعليمات البرمجية التالي كيفية طرح استثناء باستخدام 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. من صفحة حساب التنفيذ التلقائي المفتوحة، ضمن التنفيذ التلقائي للعمليات، حدد دفاتر التشغيل استخدم إدارة التحديث للمصفي.
أو يمكنك البحث عنها بواسطة اسم البرنامج النصي الخاص بهم، كما هو موضح في القائمة التالية:
- إدارة التحديث - تشغيل 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
#>
إذا كنت تريد تشغيل دفتر التشغيل للتنفيذ مع هوية مدارة معينة من قِبل النظام، اترك التعليمات البرمجية كما هي. إذا كنت تفضل استخدام الهوية المدارة المعينة من قِبل المستخدم، بعد ذلك:
- من الخط رقم 22، احذف
$AzureContext = (Connect-AzAccount -Identity).context
، - استبدله بـ
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
، و - أدرج معرّف العميل.
إشعار
بالنسبة إلى كتب تشغيل PowerShell غير الرسومية، Add-AzAccount
وAdd-AzureRMAccount
اسم مستعار لـ Connect-AzAccount. يمكنك استخدام cmdlets هذه أو يمكنك تحديث الوحدات النمطية في حساب التنفيذ التلقائي الخاص بك إلى أحدث الإصدارات. قد تحتاج إلى تحديث الوحدات النمطية الخاصة بك حتى إذا قمت بإنشاء حساب تنفيذ تلقائي جديد.
الخطوات التالية
للحصول على تفاصيل إدارة التحديث، راجع إدارة التحديثات والتصحيحات لأجهزة VMs.