ملحق البرنامج النصي المخصص لـ Windows
يقوم ملحق البرنامج النصي المخصص بتنزيل البرامج النصية وتشغيلها على أجهزة Azure الظاهرية (VMs). استخدم هذا الملحق لتكوين ما بعد التوزيع أو تثبيت البرامج أو أي مهمة تكوين أو إدارة أخرى. يمكنك تنزيل البرامج النصية من Azure Storage أو GitHub، أو توفيرها إلى مدخل Microsoft Azure في وقت تشغيل إضافي.
يتكامل ملحق البرنامج النصي المخصص مع قوالب Azure Resource Manager. يمكنك أيضا تشغيله باستخدام Azure CLI أو Azure PowerShell أو مدخل Azure أو واجهة برمجة تطبيقات REST للأجهزة الظاهرية Azure.
توضح هذه المقالة كيفية استخدام ملحق البرنامج النصي المخصص باستخدام الوحدة النمطية Azure PowerShell وقوالب Azure Resource Manager. كما يوفر خطوات استكشاف الأخطاء وإصلاحها لأنظمة Windows.
المتطلبات الأساسية
إشعار
لا تستخدم ملحق البرنامج النصي المخصص للتشغيل Update-AzVM
بنفس الجهاز الظاهري مثل المعلمة الخاصة به. سينتظر الملحق نفسه.
أنظمة تشغيل Windows المدعومة
Windows OS | x64 |
---|---|
Windows 10 | مدعوم |
Windows 11 | مدعوم |
Windows Server 2008 SP2 | مدعوم |
Windows Server 2008 R2 | مدعوم |
Windows Server 2012 | مدعوم |
Windows Server 2012 R2 | مدعوم |
Windows Server 2016 | مدعوم |
Windows Server 2016 Core | مدعوم |
Windows Server 2019 | مدعوم |
Windows Server 2019 Core | مدعوم |
Windows Server 2022 | مدعوم |
Windows Server 2022 Core | مدعوم |
موقع البرنامج النصي
يمكنك تعيين الملحق لاستخدام بيانات اعتماد Azure Blob Storage بحيث يمكنه الوصول إلى Azure Blob Storage. يمكن أن يكون موقع البرنامج النصي في أي مكان، طالما يمكن توجيه الجهاز الظاهري إلى نقطة النهاية هذه، على سبيل المثال، GitHub أو خادم ملفات داخلي.
الاتصال بالإنترنت
لتنزيل برنامج نصي خارجيا، مثل من GitHub أو Azure Storage، تحتاج إلى فتح منافذ جدار حماية أو مجموعة أمان شبكة (NSG) أخرى. على سبيل المثال، إذا كان برنامجك النصي موجوداً في Azure Storage، فيمكنك السماح بالوصول باستخدام علامات خدمة Azure NSG للتخزين.
لا يحتوي ملحق البرنامج النصي المخصص على أي طريقة لتجاوز التحقق من صحة الشهادة. إذا كنت تقوم بالتنزيل من موقع آمن باستخدام شهادة موقعة ذاتيا، على سبيل المثال، فقد تحصل على أخطاء مثل الشهادة البعيدة غير صالحة وفقا لإجراء التحقق من الصحة. تأكد من تثبيت الشهادة بشكل صحيح في مخزن المراجع المصدقة الجذر الموثوق بها على الجهاز الظاهري.
إذا كان البرنامج النصي الخاص بك على خادم محلي، فقد لا تزال بحاجة إلى فتح جدار حماية آخر أو منافذ NSG.
تلميحات
- تقتصر المخرجات على آخر 4,096 بايت.
- سيساعد الإلغاء الصحيح للأحرف على ضمان تحليل السلاسل بشكل صحيح. على سبيل المثال، تحتاج دائما إلى خطين مائلين عكسيين للهروب من خط مائل عكسي حرفي واحد عند التعامل مع مسارات الملفات. العينة:
{"commandToExecute": "C:\\Windows\\System32\\systeminfo.exe >> D:\\test.txt"}
- يرجع أعلى معدل فشل لهذا الملحق إلى أخطاء بناء الجملة في البرنامج النصي. تحقق من تشغيل البرنامج النصي دون أخطاء. ضع المزيد من تسجيل الدخول إلى البرنامج النصي لتسهيل العثور على حالات الفشل.
- كتابة البرامج النصية غير المتكررة، بحيث لا يؤدي تشغيلها أكثر من مرة عن طريق الخطأ إلى تغييرات في النظام.
- تأكد من أن البرامج النصية لا تتطلب إدخال المستخدم عند تشغيلها.
- يُسمح للبرنامج النصي بـ 90 دقيقة للتشغيل. أي شيء أطول يؤدي إلى فشل توفير الملحق.
- لا تضع عمليات إعادة التشغيل داخل البرنامج النصي. يتسبب هذا الإجراء في حدوث مشاكل مع الملحقات الأخرى التي يتم تثبيتها، ولا يستمر الملحق بعد إعادة التشغيل.
- إذا كان لديك برنامج نصي يؤدي إلى إعادة التشغيل قبل تثبيت التطبيقات وتشغيل البرامج النصية، فقم بجدولة إعادة التشغيل باستخدام مهمة مجدولة في Windows أو باستخدام أدوات مثل ملحقات DSC أو Chef أو Puppet.
- لا تقم بتشغيل برنامج نصي يتسبب في إيقاف عامل الجهاز الظاهري أو تحديثه. قد يترك الملحق في حالة انتقال ويؤدي إلى انتهاء المهلة.
- يقوم الملحق بتشغيل برنامج نصي مرة واحدة فقط. إذا كنت تريد تشغيل برنامج نصي على كل بدء تشغيل، فاستخدم الملحق لإنشاء Windows Scheduled Task.
- إذا كنت تريد جدولة وقت تشغيل برنامج نصي، فاستخدم الملحق لإنشاء مهمة مجدولة في Windows.
- عند تشغيل البرنامج النصي، لا ترى سوى حالة ملحق انتقال من مدخل Microsoft Azure أو Azure CLI. إذا كنت تريد تحديثات حالة أكثر تكرارا لبرنامج نصي قيد التشغيل، فقم بإنشاء الحل الخاص بك.
- لا يدعم ملحق البرنامج النصي المخصص أصلاً الخوادم الوكيلة. ومع ذلك، يمكنك استخدام أداة نقل الملفات، مثل Invoke-WebRequest، التي تدعم خوادم الوكيل داخل البرنامج النصي الخاص بك.
- كن على علم بمواقع الدليل غير الافتراضية التي قد تعتمد عليها البرامج النصية أو الأوامر. لديك منطق للتعامل مع هذا الموقف.
- تأكد من عدم وجود أي إعداد مخصص في مفتاح
HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun
التسجيل (مفصل هنا). سيؤدي هذا إلى تشغيل أثناء تثبيت ملحق البرنامج النصي المخصص أو تمكين المراحل ويتسبب في خطأ مثل'XYZ is not recognized as an internal or external command, operable program or batch file'
. - يتم تشغيل ملحق البرنامج النصي المخصص ضمن
LocalSystem
الحساب. - إذا كنت تخطط لاستخدام
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
أو storageAccountKey
.
يمكن تثبيت إصدار واحد فقط من الملحق على جهاز ظاهري في كل مرة. يفشل تحديد برنامج نصي مخصص مرتين في نفس قالب Azure Resource Manager لنفس الجهاز الظاهري.
يمكنك استخدام هذا المخطط داخل مورد الجهاز الظاهري أو كمورد مستقل. إذا تم استخدام هذا الملحق كمورد مستقل في قالب Azure Resource Manager، يجب أن يكون اسم المورد بتنسيق virtualMachineName/extensionName.
قيم Property
الاسم | قيمة أو مثال | نوع البيانات |
---|---|---|
apiVersion | 2015-06-15 |
date |
publisher | Microsoft.Compute |
سلسلة |
النوع | CustomScriptExtension |
سلسلة |
typeHandlerVersion | 1.10 |
العدد الصحيح |
fileUris | https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1 |
صفيف |
الطابع الزمني | 123456789 |
عدد صحيح بحجم 32 بت |
commandToExecute | powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 |
سلسلة |
storageAccountName | examplestorageacct |
سلسلة |
storageAccountKey | TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== |
سلسلة |
الهوية المُدارة | { } أو { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } أو { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } |
كائن JSON |
إشعار
أسماء خصائص JSON حساسة في حالة الأحرف. لتجنب مشاكل النشر، استخدم الأسماء كما هو موضح هنا.
تفاصيل قيمة الخاصية
الخاصية | اختياري أم مطلوب | التفاصيل |
---|---|---|
fileUris | اختياري | عناوين URL للملفات المراد تنزيلها. إذا كانت عناوين URL حساسة، على سبيل المثال، إذا كانت تحتوي على مفاتيح، فيجب تحديد هذا الحقل في protectedSettings . |
commandToExecute | المطلوب | البرنامج النصي لنقطة الإدخال المراد تشغيله. استخدم هذه الخاصية إذا كان الأمر يحتوي على أسرار مثل كلمات المرور أو إذا كانت عناوين URI للملفات حساسة. |
الطابع الزمني | اختياري | باشر بتغيير هذه القيمة فقط لتشغيل إعادة تشغيل البرنامج النصي. أي قيمة صحيحة مقبولة، طالما أنها تختلف عن القيمة السابقة. |
storageAccountName | اختياري | اسم حساب التخزين خاصتك. إذا حددت بيانات اعتماد التخزين، فيجب أن تكون جميع القيم fileUris عناوين URL لكائنات Azure الثنائية كبيرة الحجم. |
storageAccountKey | اختياري | مفتاح الوصول لحساب التخزين. |
الهوية المُدارة | اختياري | الهوية المدارة لتنزيل الملفات. القيم الصالحة هي clientId (اختياري، سلسلة)، وهو معرف العميل للهوية المدارة، و objectId (اختياري، سلسلة)، وهو معرف الكائن للهوية المدارة. |
يتم إرسال الإعدادات العامة في نص واضح إلى الجهاز الظاهري حيث يتم تشغيل البرنامج النصي. يتم تشفير الإعدادات المحمية من خلال مفتاح معروف فقط ل Azure والجهاز الظاهري. تُحفظ الإعدادات على الجهاز الظاهري كما تم إرسالها. بمعنى أنه في حالة تشفير الإعدادات، ستُحفظ مشفرةً على الجهاز الظاهري. يتم تخزين الشهادة المستخدمة لفك تشفير القيم المشفرة على الجهاز الظاهري. يتم استخدام الشهادة أيضا لفك تشفير الإعدادات، إذا لزم الأمر، في وقت التشغيل.
قد يكون استخدام الإعدادات العامة مفيدًا لتصحيح الأخطاء، ولكننا نوصي باستخدام الإعدادات المحمية.
يمكنك تعيين القيم التالية إما في الإعدادات العامة أو المحمية. يرفض الملحق أي تكوين حيث يتم تعيين هذه القيم في كل من الإعدادات العامة والمحمية.
commandToExecute
fileUris
العقار: managedIdentity
إشعار
هذه الخاصية يجب أن تُحدَّد في الإعدادات المحمية فقط.
يدعم ملحق البرنامج النصي المخصص، الإصدار 1.10 والإصدارات الأحدث، الهويات المدارة لتنزيل الملفات من عناوين URL المتوفرة fileUris
في الإعداد. تسمح الخاصية لملحق البرنامج النصي المخصص بالوصول إلى الكائنات الثنائية كبيرة الحجم أو الحاويات الخاصة ل Azure Storage دون أن يضطر المستخدم إلى تمرير أسرار مثل رموز SAS المميزة أو مفاتيح حساب التخزين.
لاستخدام هذه الميزة، أضف هوية معينة من قبل النظام أو معينة من قبل المستخدم إلى الجهاز الظاهري أو مجموعة مقياس الجهاز الظاهري حيث يتم تشغيل ملحق البرنامج النصي المخصص. ثم امنح الوصول إلى الهوية المدارة إلى حاوية تخزين Azure أو الكائن الثنائي كبير الحجم.
لاستخدام الهوية المعينة من قبل النظام على الجهاز الظاهري الهدف أو مجموعة مقياس الجهاز الظاهري، قم بتعيين 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
أو storageAccountKey
.
توزيع قالب
يمكنك توزيع ملحقات جهاز Azure الظاهري باستخدام قوالب Azure Resource Manager. يمكن استخدام مخطط JSON المفصل في القسم السابق في قالب Azure Resource Manager لتشغيل ملحق البرنامج النصي المخصص أثناء توزيع القالب. توضح النماذج التالية كيفية استخدام ملحق البرنامج النصي المخصص:
- نشر ملحقات الجهاز الظاهري باستخدام قوالب Azure Resource Manager
- نشر تطبيق من مستويين على قاعدة بيانات 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.
مجموعات توسيع الجهاز الظاهري
إذا وزعت ملحق البرنامج النصي المخصص من مدخل Azure، فلن يكون لديك التحكم في انتهاء صلاحية رمز SAS المميز للوصول إلى البرنامج النصي في حساب التخزين لديك. يعمل التوزيع الأولي، ولكن عند انتهاء صلاحية رمز SAS المميز لحساب التخزين، تفشل أي عملية تحجيم لاحقة لأن ملحق البرنامج النصي المخصص لم يعد قادرا على الوصول إلى حساب التخزين.
نوصي باستخدام PowerShell أو Azure CLI أو قالب Azure Resource Manager عند نشر ملحق البرنامج النصي المخصص على مجموعة مقياس الجهاز الظاهري. وبهذه الطريقة، يمكنك اختيار استخدام هوية مدارة أو التحكم المباشر في انتهاء صلاحية الرمز المميز SAS للوصول إلى البرنامج النصي في حساب التخزين الخاص بك طالما احتجت إلى ذلك.
استكشاف الأخطاء وإصلاحها والدعم
يمكن استرداد البيانات حول حالة عمليات توزيع الملحقات من مدخل 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 |
موقع التنزيل النسبي | موقع التنزيل المطلق |
---|---|---|
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 |
تتغير مسارات الدليل المطلقة على مدى عمر الجهاز الظاهري، ولكن ليس ضمن تنفيذ واحد من ملحق البرنامج النصي المخصص.
نظرًا لأن مسار التنزيل المطلق قد يختلف بمرور الوقت، فمن الأفضل اختيار مسارات البرنامج النصي/الملف النسبية في commandToExecute
السلسلة، كلما أمكن ذلك. على سبيل المثال:
"commandToExecute": "powershell.exe . . . -File \"./scripts/myscript.ps1\""
يتم الاحتفاظ بمعلومات المسار بعد مقطع URI الأول للملفات التي تم تنزيلها باستخدام قائمة الخصائص fileUris
. كما هو موضح في الجدول السابق، يتم تعيين الملفات التي تم تنزيلها في الدلائل الفرعية للتنزيل لتعكس بنية القيم fileUris
.
يدعم
إذا كنت بحاجة إلى مساعدة في أي جزء من هذه المقالة، فاتصل بخبراء Azure في Azure Community Support.
لتقديم حدث دعم Azure، انتقل إلى موقع دعم Azure وحدد الحصول على الدعم.
للحصول على معلومات حول استخدام Azure Support، اقرأ الأسئلة المتداولة حول دعم Microsoft Azure.