ملحق البرنامج النصي المخصص لـ Windows
يقوم ملحق البرنامج النصي المخصص بتنزيل البرامج النصية وتشغيلها على أجهزة Azure الظاهرية (VMs). ويعتبر هذا الملحق مفيداً لتكوين النشر أو تثبيت البرامج أو أي مهمة تكوين/إدارة أخرى. يمكنك تنزيل البرامج النصية من Azure Storage أو GitHub، أو توفيرها إلى مدخل Microsoft Azure في وقت تشغيل إضافي.
يتكامل ملحق البرنامج النصي المخصص مع قوالب Azure Resource Manager. يمكنك أيضًا تشغيله باستخدام Azure CLI أو PowerShell أو مدخل Microsoft Azure أو واجهة برمجة تطبيقات Azure Virtual Machines REST.
توضح هذه المقالة كيفية استخدام ملحق البرنامج النصي المخصص باستخدام الوحدة النمطية Azure PowerShell وقوالب Azure Resource Manager. كما يوفر خطوات استكشاف الأخطاء وإصلاحها لأنظمة Windows.
المتطلبات الأساسية
ملاحظة
لا تستخدم ملحق البرنامج النصي المخصص للتشغيل Update-AzVM بنفس الجهاز الظاهري مثل المعلمة الخاصة به، لأنه سينتظر نفسه.
نظام التشغيل
سيتم تشغيل ملحق البرنامج النصي المخصص لـWindows على أنظمة التشغيل المدعومة التالية:
- Windows Server 2008 R2
- Windows Server 2012
- Windows Server 2012 R2
- Windows 10
- Windows Server 2016
- Windows Server 2016 Core
- Windows Server 2019
- Windows Server 2019 Core
موقع البرنامج النصي
يمكنك تعيين الامتداد لاستخدام بيانات اعتماد Azure Blob Storage بحيث يمكنه الوصول إلى Azure Blob Storage. يمكن أن يكون موقع البرنامج النصي في أي مكان، طالما أن الجهاز الظاهري يمكنه التوجيه إلى نقطة النهاية هذه (على سبيل المثال، GitHub أو خادم ملفات داخلي).
الاتصال بالإنترنت
إذا كنت بحاجة إلى تنزيل برنامج نصي خارجيًا، مثل من GitHub أو Azure Storage، فأنت بحاجة إلى فتح منافذ إضافية لجدار الحماية أو مجموعة أمان الشبكة (NSG). على سبيل المثال، إذا كان البرنامج النصي الخاص بك موجودًا في Azure Storage، فيمكنك السماح بالوصول باستخدام علامات خدمة Azure NSG للتخزين.
لا يحتوي ملحق البرنامج النصي المخصص على أي طريقة لتجاوز التحقق من صحة الشهادة. لذلك إذا كنت تقوم بالتنزيل من موقع آمن باستخدام شهادة موقعة ذاتيًا على سبيل المثال، فقد تحصل على أخطاء مثل "الشهادة البعيدة غير صالحة وفقًا لإجراء التحقق من الصحة". تأكد من تثبيت الشهادة بشكل صحيح في مخزن Trusted Root Certification Authorities على الجهاز الظاهري.
إذا كان البرنامج النصي الخاص بك موجودًا على خادم محلي، فقد لا تزال بحاجة إلى فتح جدار حماية إضافي أو منافذ NSG.
النصائح والحيل
- يرجع أعلى معدل فشل لهذا الملحق إلى أخطاء بناء الجملة في البرنامج النصي. اختبر تشغيل البرنامج النصي بدون أخطاء. ضع تسجيل دخول إضافي إلى البرنامج النصي لتسهيل العثور على حالات الفشل.
- اكتب البرامج النصية التي تكون متماثلة، لذا فإن تشغيلها أكثر من مرة عن طريق الخطأ لن يؤدي إلى تغييرات في النظام.
- تأكد من أن البرامج النصية لا تتطلب إدخال المستخدم عند تشغيلها.
- يُسمح للبرنامج النصي بـ 90 دقيقة للتشغيل. أي شيء أطول سيؤدي إلى فشل توفير الامتداد.
- لا تضع عمليات إعادة التشغيل داخل البرنامج النصي. سيؤدي هذا الإجراء إلى حدوث مشكلات في الإضافات الأخرى التي يتم تثبيتها، ولن تستمر الإضافة بعد إعادة التشغيل.
- إذا كان لديك برنامج نصي سيؤدي إلى إعادة التشغيل قبل تثبيت التطبيقات وتشغيل البرامج النصية، فقم بجدولة إعادة التشغيل باستخدام مهمة مجدولة في Windows أو باستخدام أدوات مثل ملحقات DSC أو Chef أو Puppet.
- لا تقم بتشغيل برنامج نصي من شأنه أن يتسبب في إيقاف أو تحديث عامل الجهاز الظاهري. قد يترك التمديد في حالة انتقالية ويؤدي إلى مهلة.
- سيتم تشغيل الإضافة لبرنامج نصي مرة واحدة فقط. إذا كنت تريد تشغيل برنامج نصي على كل بدء تشغيل، فاستخدم الملحق لإنشاء Windows Scheduled Task.
- إذا كنت تريد جدولة وقت تشغيل برنامج نصي، فاستخدم الإضافة لإنشاء Windows Scheduled Task.
- عند تشغيل البرنامج النصي، سترى فقط حالة ملحق "انتقال" من مدخل Microsoft Azure أو CLI. إذا كنت تريد تحديثات حالة أكثر تكرارًا لبرنامج نصي قيد التشغيل، فستحتاج إلى إنشاء الحل الخاص بك.
- لا يدعم ملحق البرنامج النصي المخصص أصلًا الخوادم الوكيلة. ومع ذلك، يمكنك استخدام أداة نقل الملفات التي تدعم الخوادم الوكيلة داخل البرنامج النصي، مثل Invoke-WebRequest.
- كن على دراية بمواقع الدليل غير الافتراضية التي قد تعتمد عليها البرامج النصية أو الأوامر. لديك منطق للتعامل مع هذا الموقف.
- يتم تشغيل ملحق البرنامج النصي المخصص ضمن حساب النظام المحلي.
- إذا كنت تخطط لاستخدام
storageAccountNameوstorageAccountKeyالخصائص، فيجب أن تكون هذه الخصائص متطابقة فيprotectedSettings.
مخطط الملحق
يحدد تكوين ملحق البرنامج النصي المخصص أشياء مثل موقع البرنامج النصي والأمر المراد تشغيله. يمكنك تخزين هذا التكوين في ملفات التكوين، أو تحديده في سطر الأوامر، أو تحديده في قالب Azure Resource Manager.
يمكنك تخزين البيانات الحساسة في تكوين محمي، يتم تشفيره وفك تشفيره فقط داخل الجهاز الظاهري. يكون التكوين المحمي مفيدًا عندما يتضمن أمر التنفيذ أسرارًا مثل كلمة مرور أو مرجع ملف توقيع وصول مشترك (SAS). وفيما يلي مثال على ذلك:
{
"apiVersion": "2018-06-01",
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "virtualMachineName/config-app",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
"[variables('musicstoresqlName')]"
],
"tags": {
"displayName": "config-app"
},
"properties": {
"publisher": "Microsoft.Compute",
"type": "CustomScriptExtension",
"typeHandlerVersion": "1.10",
"autoUpgradeMinorVersion": true,
"settings": {
"timestamp":123456789
},
"protectedSettings": {
"commandToExecute": "myExecutionCommand",
"storageAccountName": "myStorageAccountName",
"storageAccountKey": "myStorageAccountKey",
"managedIdentity" : {},
"fileUris": [
"script location"
]
}
}
}
ملاحظة
managedIdentityيجب عدم استخدام الخاصية بالاقتران مع الخاصية storageAccountName or storageAccountKey.
يمكن تثبيت إصدار واحد فقط من الإضافة على جهاز ظاهري في وقت واحد. سيفشل تحديد برنامج نصي مخصص مرتين في نفس قالب Azure Resource Manager لنفس الجهاز الظاهري.
يمكنك استخدام هذا المخطط داخل مورد الجهاز الظاهري أو كمورد مستقل. يجب أن يكون اسم المورد بالتنسيق virtualMachineName/extensionName، إذا تم استخدام هذا الملحق كمورد مستقل في قالب Azure Resource Manager.
قيم Property
| الاسم | قيمة أو مثال | نوع البيانات |
|---|---|---|
apiVersion |
2015-06-15 |
التاريخ |
publisher |
Microsoft.Compute |
سلسلة |
type |
CustomScriptExtension |
سلسلة |
typeHandlerVersion |
1.10 |
int |
fileUris |
https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1 |
صفيف |
timestamp |
123456789 |
عدد صحيح بحجم 32 بت |
commandToExecute |
powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 |
سلسلة |
storageAccountName |
examplestorageacct |
سلسلة |
storageAccountKey |
TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== |
سلسلة |
managedIdentity |
{ } أو { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } أو { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } |
عنصر JSON |
ملاحظة
أسماء خصائص JSON حساسة في حالة الأحرف. لتجنب مشاكل النشر، استخدم الأسماء كما هو موضح هنا.
تفاصيل قيمة الخاصية
| الخاصية | اختياري أو مطلوب | التفاصيل |
|---|---|---|
fileUris |
اختياري | عناوين URL للملفات المراد تنزيلها. إذا كانت عناوين URL حساسة (على سبيل المثال، تحتوي على مفاتيح)، فيجب تحديد هذا الحقل في protectedSettings. |
commandToExecute |
مطلوب | البرنامج النصي لنقطة الإدخال لتشغيل. استخدم هذه الخاصية إذا كان الأمر يحتوي على أسرار مثل كلمات المرور أو إذا كانت عناوين URI للملفات حساسة. |
timestamp |
اختياري | قم بتغيير هذه القيمة فقط لتشغيل إعادة تشغيل البرنامج النصي. أي قيمة صحيحة مقبولة، طالما أنها تختلف عن القيمة السابقة. |
storageAccountName |
اختياري | اسم حساب التخزين خاصتك. إذا قمت بتحديد بيانات اعتماد التخزين، فيجب أن تكون جميع fileUris القيم عناوين URL لنقاط Azure. |
storageAccountKey |
اختياري | مفتاح الوصول لحساب التخزين. |
managedIdentity |
اختياري | الهوية المدارة لتنزيل الملفات:clientId (اختياري، سلسلة): معرف العميل للهوية المدارة.objectId (اختياري، سلسلة): معرف العميل للهوية المدارة. |
يمكنك تعيين القيم التالية إما في الإعدادات العامة أو المحمية. سترفض الإضافة أي تكوين يتم فيه تعيين هذه القيم في كل من الإعدادات العامة والمحمية.
commandToExecutefileUris
قد يكون استخدام الإعدادات العامة مفيدًا لتصحيح الأخطاء، ولكننا نوصي باستخدام الإعدادات المحمية.
يتم إرسال الإعدادات العامة بنص واضح إلى الجهاز الظاهري حيث سيتم تشغيل البرنامج النصي. يتم تشفير الإعدادات المحمية من خلال مفتاح معروف فقط لـ Azure والجهاز الظاهري. يتم حفظ الإعدادات على الجهاز الظاهري كما تم إرسالها. بمعنى، إذا تم تشفير الإعدادات، فسيتم حفظها مشفرة على الجهاز الظاهري. يتم تخزين الشهادة المستخدمة لفك تشفير القيم المشفرة على الجهاز الظاهري. تستخدم الشهادة أيضًا لفك تشفير الإعدادات (إذا لزم الأمر) في وقت التشغيل.
العقار: managedIdentity
ملاحظة
يجب تحديد هذه الخاصية في الإعدادات المحمية فقط.
يدعم ملحق البرنامج النصي المخصص (الإصدار 1.10 والإصدارات الأحدث) الهويات المدارة لتنزيل الملفات من عناوين URL المتوفرة في الإعداد fileUris. يسمح لملحق البرنامج النصي المخصص بالوصول إلى النقط أو الحاويات الخاصة بـ Azure Storage دون الحاجة إلى تمرير المستخدم لأسرار مثل الرموز المميزة لـ SAS أو مفاتيح حساب التخزين.
لاستخدام هذه الميزة، يجب على المستخدم إضافة هوية معينة من قبل النظام أو معينة من قبل المستخدم إلى مجموعة مقياس الجهاز الظاهري أو الجهاز الظاهري حيث من المتوقع تشغيل ملحق البرنامج النصي المخصص. يجب على المستخدم بعد ذلك منح وصول الهوية المدارة إلى حاوية تخزين Azure أو blob.
لاستخدام الهوية المعينة من قبل النظام على الجهاز الظاهري الهدف أو مجموعة مقياس الجهاز الظاهري، قم بتعيينه managedidentity إلى كائن JSON فارغ.
مثال:
{ "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.ps1"], "commandToExecute": "powershell.exe script1.ps1", "managedIdentity" : {} }
لاستخدام الهوية المعينة من قبل المستخدم على الجهاز الظاهري الهدف أو مجموعة مقياس الجهاز الظاهري، قم بالتكوين managedidentity باستخدام معرف العميل أو معرف الكائن الخاص بالهوية المدارة.
أمثلة:
{ "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.ps1"], "commandToExecute": "powershell.exe script1.ps1", "managedIdentity" : { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } }{ "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.ps1"], "commandToExecute": "powershell.exe script1.ps1", "managedIdentity" : { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } }
ملاحظة
managedIdentityيجب عدم استخدام الخاصية بالاقتران مع الخاصية storageAccountName or storageAccountKey.
توزيع القالب
يمكنك توزيع ملحقات جهاز Azure الظاهري باستخدام قوالب Azure Resource Manager. يمكن استخدام مخطط JSON المفصل في القسم السابق في قالب Azure Resource Manager لتشغيل ملحق البرنامج النصي المخصص أثناء نشر القالب. توضح النماذج التالية كيفية استخدام ملحق البرنامج النصي المخصص:
- البرنامج التعليمي: نشر ملحقات الجهاز الظاهري مع قوالب إدارة الموارد Azure
- نشر تطبيق من مستويين على قاعدة بيانات Windows SQL Azure
توزيع PowerShell
يمكنك استخدام Set-AzVMCustomScriptExtension الأمر لإضافة ملحق البرنامج النصي المخصص إلى جهاز ظاهري موجود. لمزيد من المعلومات، راجع Set-AzVMCustomScriptExtension.
Set-AzVMCustomScriptExtension -ResourceGroupName <resourceGroupName> `
-VMName <vmName> `
-Location myLocation `
-FileUri <fileUrl> `
-Run 'myScript.ps1' `
-Name DemoScriptExtension
أمثلة إضافية
استخدام برامج نصية متعددة
في هذا المثال، أنت تستخدم ثلاثة برامج نصية لإنشاء الخادم الخاص بك. تستدعي commandToExecute الخاصية البرنامج النصي الأول. لديك بعد ذلك خيارات حول كيفية استدعاء الآخرين. على سبيل المثال، يمكنك الحصول على برنامج نصي رئيسي يتحكم في التنفيذ، مع معالجة الأخطاء الصحيحة وتسجيل الدخول وإدارة الحالة. يتم تنزيل البرامج النصية إلى الجهاز المحلي للتنفيذ.
على سبيل المثال، في 1_Add_Tools.ps1، يمكنك استدعاء 2_Add_Features.ps1 عن طريق الإضافة .\2_Add_Features.ps1 إلى البرنامج النصي. يمكنك تكرار هذه العملية للبرامج النصية الأخرى التي تحددها في $settings.
$fileUri = @("https://xxxxxxx.blob.core.windows.net/buildServer1/1_Add_Tools.ps1",
"https://xxxxxxx.blob.core.windows.net/buildServer1/2_Add_Features.ps1",
"https://xxxxxxx.blob.core.windows.net/buildServer1/3_CompleteInstall.ps1")
$settings = @{"fileUris" = $fileUri};
$storageAcctName = "xxxxxxx"
$storageKey = "1234ABCD"
$protectedSettings = @{"storageAccountName" = $storageAcctName; "storageAccountKey" = $storageKey; "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File 1_Add_Tools.ps1"};
#run command
Set-AzVMExtension -ResourceGroupName <resourceGroupName> `
-Location <locationName> `
-VMName <vmName> `
-Name "buildserver1" `
-Publisher "Microsoft.Compute" `
-ExtensionType "CustomScriptExtension" `
-TypeHandlerVersion "1.10" `
-Settings $settings `
-ProtectedSettings $protectedSettings;
تشغيل البرامج النصية من مشاركة محلية
في هذا المثال، قد ترغب في استخدام خادم Server Message Block (SMB) محلي لموقع البرنامج النصي الخاص بك. لا تحتاج بعد ذلك إلى توفير أي إعدادات أخرى، باستثناء commandToExecute.
$protectedSettings = @{"commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File \\filesvr\build\serverUpdate1.ps1"};
Set-AzVMExtension -ResourceGroupName <resourceGroupName> `
-Location <locationName> `
-VMName <vmName> `
-Name "serverUpdate"
-Publisher "Microsoft.Compute" `
-ExtensionType "CustomScriptExtension" `
-TypeHandlerVersion "1.10" `
-ProtectedSettings $protectedSettings
تشغيل برنامج نصي مخصص أكثر من مرة باستخدام CLI
سيمنع معالج ملحق البرنامج النصي المخصص إعادة تشغيل برنامج نصي إذا تم تمرير نفس الإعدادات بالضبط. يمنع هذا السلوك إعادة التشغيل العرضي، مما قد يتسبب في سلوكيات غير متوقعة إذا لم يكن البرنامج النصي idempotent. يمكنك التأكد مما إذا كان المعالج قد حظر إعادة التشغيل من خلال النظر إلى C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension<HandlerVersion>\CustomScriptHandler.log والبحث عن تحذير مثل هذا:
Current sequence number, <SequenceNumber>, is not greater than the sequence number of the most recently executed configuration. Exiting...
إذا كنت ترغب في تشغيل ملحق البرنامج النصي المخصص أكثر من مرة، يمكنك القيام بذلك فقط في ظل هذه الشروط:
- معلمة الإضافة
Nameهي نفسها النشر السابق للإضافة. - لقد قمت بتحديث التكوين. يمكنك إضافة خاصية ديناميكية إلى الأمر، مثل طابع زمني. إذا اكتشف المعالج تغييرًا في إعدادات التكوين، فسيعتبر هذا التغيير رغبة صريحة في إعادة تشغيل البرنامج النصي.
بدلًا من ذلك، يمكنك تعيين الخاصية ForceUpdateTag إلى true.
استخدام Invoke-WebRequest
إذا كنت تستخدم Invoke-WebRequest في البرنامج النصي، فيجب عليك تحديد المعلمة -UseBasicParsing. إذا لم تحدد المعلمة، فستجد الخطأ التالي عند التحقق من الحالة التفصيلية:
The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again.
مجموعات قياس الآلات الافتراضية
إذا قمت بنشر ملحق البرنامج النصي المخصص من مدخل Microsoft Azure، فلن يكون لديك التحكم في انتهاء صلاحية الرمز المميز SAS للوصول إلى البرنامج النصي في حساب التخزين الخاص بك. والنتيجة هي أن النشر الأولي يعمل، ولكن عند انتهاء صلاحية الرمز المميز SAS لحساب التخزين، تفشل أي عملية تحجيم لاحقة لأن ملحق البرنامج النصي المخصص لم يعد بإمكانه الوصول إلى حساب التخزين.
نوصي باستخدام PowerShell أو Azure CLI أو قالب Azure Resource Manager عند نشر ملحق البرنامج النصي المخصص على مجموعة مقياس جهاز ظاهري. وبهذه الطريقة، يمكنك اختيار استخدام هوية مدارة أو التحكم المباشر في انتهاء صلاحية الرمز المميز SAS للوصول إلى البرنامج النصي في حساب التخزين الخاص بك طالما احتجت إلى ذلك.
الأجهزة الظاهرية الكلاسيكية
هام
سيتم إيقاف الأجهزة الظاهرية التي تم إنشاؤها من خلال نموذج التوزيع التقليدي في 1 مارس 2023.
إذا كنت تستخدم موارد IaaS من Azure Service Management، يرجى إكمال عملية الترحيل بحلول 1 مارس 2023. ونشجعك على إجراء التبديل في وقت أقرب للاستفادة من العديد من تحسينات الميزات في Azure Resource Manager.
لمزيد من المعلومات، راجع ترحيل موارد IaaS إلى Azure Resource Manager بحلول 1 مارس 2023.
لنشر ملحق البرنامج النصي المخصص على الأجهزة الظاهرية الكلاسيكية، يمكنك استخدام مدخل Microsoft Azure أو cmdlets Azure PowerShell الكلاسيكي.
مدخل Azure
- انتقل إلى مورد VM الكلاسيكي. حدد "الملحقات" ضمن "الإعدادات" .
- حدد + Add. في قائمة الموارد، حدد Custom Script Extension.
- في الصفحة Install extension، حدد ملف PowerShell المحلي. املأ أية وسيطات، ثم حدد Ok.
PowerShell
يمكنك استخدام Set-AzureVMCustomScriptExtension cmdlet لإضافة ملحق البرنامج النصي المخصص إلى جهاز ظاهري موجود:
# define your file URI
$fileUri = 'https://xxxxxxx.blob.core.windows.net/scripts/Create-File.ps1'
# create vm object
$vm = Get-AzureVM -Name <vmName> -ServiceName <cloudServiceName>
# set extension
Set-AzureVMCustomScriptExtension -VM $vm -FileUri $fileUri -Run 'Create-File.ps1'
# update vm
$vm | Update-AzureVM
استكشاف الأخطاء وإصلاحها والدعم
يمكن استرداد البيانات حول حالة عمليات توزيع الملحقات من مدخل Microsoft Azure وباستخدام وحدة Azure PowerShell النمطية. للاطلاع على حالة توزيع ملحقات جهاز ظاهري معين، قم بتشغيل الأمر التالي:
Get-AzVMExtension -ResourceGroupName <resourceGroupName> -VMName <vmName> -Name myExtensionName
يتم تسجيل إخراج الملحق إلى الملفات الموجودة ضمن المجلد التالي على الجهاز الظاهري الهدف:
C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension
يتم تنزيل الملفات المحددة في المجلد التالي على الجهاز الظاهري الهدف:
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.*\Downloads\<n>
في المسار السابق، <n> هو عدد صحيح عشري قد يتغير بين عمليات تنفيذ الامتداد. تتطابق 1.* القيمة مع القيمة الفعلية الحالية typeHandlerVersion للإضافة. على سبيل المثال، قد يكون الدليل الفعلي C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.8\Downloads\2.
عند تشغيل commandToExecute الأمر، يقوم الملحق بتعيين هذا الدليل (على سبيل المثال، ...\Downloads\2) كدليل العمل الحالي. تمكن هذه العملية من استخدام المسارات النسبية لتحديد موقع الملفات التي تم تنزيلها عبر fileURIs الخاصية. فيما يلي أمثلة على الملفات التي تم تنزيلها:
URI في fileUris |
موقع التنزيل النسبي | موقع التنزيل المطلق 1 |
|---|---|---|
https://someAcct.blob.core.windows.net/aContainer/scripts/myscript.ps1 |
./scripts/myscript.ps1 |
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.8\Downloads\2\scripts\myscript.ps1 |
https://someAcct.blob.core.windows.net/aContainer/topLevel.ps1 |
./topLevel.ps1 |
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.8\Downloads\2\topLevel.ps1 |
1 تتغير مسارات الدليل المطلق على مدى عمر الجهاز الظاهري، ولكن ليس ضمن تنفيذ واحد لملحق البرنامج النصي المخصص.
نظرًا لأن مسار التنزيل المطلق قد يختلف بمرور الوقت، فمن الأفضل اختيار مسارات البرنامج النصي/الملف النسبية في commandToExecute السلسلة، كلما أمكن ذلك. على سبيل المثال:
"commandToExecute": "powershell.exe . . . -File \"./scripts/myscript.ps1\""
يتم الاحتفاظ بمعلومات المسار بعد الاحتفاظ بمقطع URI الأول للملفات التي تم تنزيلها عبر قائمة الخصائص fileUris. كما هو موضح في الجدول السابق، يتم تعيين الملفات التي تم تنزيلها في الدلائل الفرعية للتنزيل لتعكس بنية القيم fileUris.
الدعم
إذا كنت بحاجة إلى مساعدة بشأن أي جزء من هذه المقالة، فيمكنك الاتصال بخبراء Azure في Azure Community Support.
أو يمكنك الإبلاغ عن حادث دعم Azure. انتقل إلى موقع دعم Azure، وحدد الحصول على الدعم. للحصول على معلومات حول استخدام Azure Support، اقرأ الأسئلة المتداولة حول دعم Microsoft Azure.