إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على: ✔️ أجهزة Windows الظاهرية
توضح هذه المقالة كيفية إنشاء صورة Windows VM مخصصة باستخدام الوحدة النمطية Azure VM Image Builder PowerShell.
المتطلبات الأساسية
في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
إذا اخترت استخدام PowerShell محلياً، فستتطلب هذه المقالة تثبيت وحدة Azure PowerShell والاتصال بحساب Azure الخاص بك باستخدام الأمر cmdlet Connect-AzAccount. لمزيد من المعلومات، راجع تثبيت Azure PowerShell.
تتطلب بعض الخطوات أوامر cmdlets من الوحدة النمطية Az.ImageBuilder . تثبيت بشكل منفصل باستخدام الأمر التالي.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Azure يستضيف Azure Cloud Shell، بيئة تفاعلية يمكن استخدامها من خلال المستعرض. يمكنك استخدام Bash أو PowerShell مع Cloud Shell للعمل مع خدمات Azure. يمكنك استخدام أوامر Cloud Shell المثبتة مسبقًا لتشغيل التعليمات البرمجية في هذه المقالة دون الحاجة إلى تثبيت أي شيء على البيئة المحلية.
لبدء Azure Cloud Shell:
| Option | مثال/ رابط |
|---|---|
| انقر فوق جربه في الزاوية العلوية اليسرى من التعليمة البرمجية أو كتلة الأمر. تحديد جربه لا يقوم بنسخ التعليمة البرمجية أو الأمر تلقائيًا إلى Cloud Shell. |
|
| انتقل إلى https://shell.azure.com، أو حدد زر تشغيل Cloud Shell لفتح Cloud Shell في المتصفح لديك. |
|
| حدد زر Cloud Shell على شريط القوائم في أعلى اليمين في مدخل Microsoft Azure. |
|
لاستخدام Azure Cloud Shell:
ابدأ تشغيل Cloud Shell.
حدد الزر نسخ على كتلة التعليمات البرمجية (أو كتلة الأوامر) لنسخ التعليمات البرمجية أو الأمر.
ألصق التعليمة البرمجية أو الأمر في جلسة Cloud Shell بتحديد Ctrl+Shift+Vعلى Windows وLunix، أو بتحديد Cmd+Shift+Vعلى macOS.
حدد Enter لتشغيل التعليمات البرمجية أو الأمر.
إذا كان لديك العديد من اشتراكات «Microsoft Azure»، فاختر الاشتراك المناسب الذي يجب فوترة الموارد من خلاله. حدد اشتراكاً محدداً باستخدام الأمر cmdlet Set-AzContext.
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
تسجيل الموفرين
إذا لم تكن قد قمت بذلك بالفعل، فقم بتسجيل موفري الموارد التالين لاستخدامهم مع اشتراك Azure الخاص بك:
- Microsoft.Compute
- Microsoft.KeyVault
- Microsoft.Storage
- Microsoft.Network
- Microsoft.VirtualMachineImages
- Microsoft.ManagedIdentity
- Microsoft.ContainerInstance
Get-AzResourceProvider -ProviderNamespace Microsoft.Compute, Microsoft.KeyVault, Microsoft.Storage, Microsoft.VirtualMachineImages, Microsoft.Network, Microsoft.ManagedIdentity |
Where-Object RegistrationState -ne Registered |
Register-AzResourceProvider
تحديد المتغيرات
نظراً لأنك ستستخدم بعض المعلومات بشكل متكرر، قم بإنشاء بعض المتغيرات لتخزين تلك المعلومات:
# Destination image resource group name
$imageResourceGroup = 'myWinImgBuilderRG'
# Azure region
$location = 'WestUS2'
# Name of the image to be created
$imageTemplateName = 'myWinImage'
# Distribution properties of the managed image upon completion
$runOutputName = 'myDistResults'
قم بإنشاء متغير لمعرف اشتراك Azure الخاص بك. للتأكد من أن المتغير subscriptionID يحتوي على معرف الاشتراك الخاص بك، يمكنك تشغيل السطر الثاني في المثال التالي:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
إنشاء مجموعة موارد
إنشاء مجموعة موارد Azure باستخدام New-AzResourceGroup cmdlet. مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد «Microsoft Azure» وإدارتها كمجموعة.
يُنشئ المثال التالي مجموعة موارد تستند إلى الاسم الموجود في المتغير $imageResourceGroup في المنطقة التي حددتها في المتغير $location. تُستخدم مجموعة الموارد هذه لتخزين عنصر قالب تكوين الصورة والصورة.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
قم بإنشاء هوية مستخدم وتعيين أذونات الدور
امنح أذونات منشئ الصور في Azure لإنشاء صور في مجموعة الموارد المحددة باستخدام المثال التالي. بدون هذا الإذن، لن تنتهي عملية إنشاء الصورة بنجاح.
إنشاء متغيرات لتعريف الدور وأسماء الهوية. يجب أن تكون هذه القيم فريدة من نوعها.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"إنشاء هوية مستخدم.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $locationتخزين مورد الهوية والمعرفات الرئيسية في المتغيرات.
$identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
تعيين أذونات للهوية لتوزيع الصور
قم بتنزيل ملف تكوين JSON، ثم قم بتعديله بناءً على الإعدادات المحددة في هذه المقالة.
$myRoleImageCreationUrl = 'https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json' $myRoleImageCreationPath = "myRoleImageCreation.json" Invoke-WebRequest -Uri $myRoleImageCreationUrl -OutFile $myRoleImageCreationPath -UseBasicParsing $Content = Get-Content -Path $myRoleImageCreationPath -Raw $Content = $Content -replace '<subscriptionID>', $subscriptionID $Content = $Content -replace '<rgName>', $imageResourceGroup $Content = $Content -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName $Content | Out-File -FilePath $myRoleImageCreationPath -Forceإنشاء تعريف الدور.
New-AzRoleDefinition -InputFile $myRoleImageCreationPathقم بمنح تعريف الدور لمدير خدمة VM Image Builder.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
إشعار
إذا تلقيت الخطأ "New-AzRoleDefinition: تم تجاوز حد تعريف الدور. لا يمكن إنشاء المزيد من تعريفات الأدوار، "راجع استكشاف أخطاء Azure RBAC (التحكم في الوصول المستند إلى الدور) وإصلاحها.
إنشاء معرض حوسبة Azure
إنشاء المعرض.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $locationإنشاء تعريف معرض.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' HyperVGeneration = 'v1' } New-AzGalleryImageDefinition @GalleryParams
إنشاء صورة
قم بإنشاء عنصر مصدر VM Image Builder. للحصول على قيم المعلمات الصالحة، راجع البحث عن صور Windows VM في Azure Marketplace باستخدام Azure PowerShell.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParamsقم بإنشاء عنصر موزع VM Image Builder.
$disObjParams = @{ SharedImageDistributor = $true ArtifactTag = @{tag='dis-share'} GalleryImageId = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup/providers/Microsoft.Compute/galleries/$myGalleryName/images/$imageDefName" ReplicationRegion = $location RunOutputName = $runOutputName ExcludeFromLatest = $false } $disSharedImg = New-AzImageBuilderTemplateDistributorObject @disObjParamsقم بإنشاء عنصر تخصيص VM Image Builder.
$ImgCustomParams01 = @{ PowerShellCustomizer = $true Name = 'settingUpMgmtAgtPath' RunElevated = $false Inline = @("mkdir c:\\buildActions", "mkdir c:\\buildArtifacts", "echo Azure-Image-Builder-Was-Here > c:\\buildActions\\buildActionsOutput.txt") } $Customizer01 = New-AzImageBuilderTemplateCustomizerObject @ImgCustomParams01قم بإنشاء عنصر تخصيص VM Image Builder ثانياً.
$ImgCustomParams02 = @{ FileCustomizer = $true Name = 'downloadBuildArtifacts' Destination = 'c:\\buildArtifacts\\index.html' SourceUri = 'https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/exampleArtifacts/buildArtifacts/index.html' } $Customizer02 = New-AzImageBuilderTemplateCustomizerObject @ImgCustomParams02قم بإنشاء قالب VM Image Builder.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
عندما يتم إنشاء القالب، يتم إرجاع رسالة ويتم إنشاء قالب تكوين VM Image Builder في $imageResourceGroup.
لتحديد ما إذا كانت عملية إنشاء القالب ناجحة، استخدم المثال التالي:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
في الخلفية، يقوم VM Image Builder أيضاً بإنشاء مجموعة موارد مرحلية في اشتراكك. تُستخدم مجموعة الموارد لبناء الصورة. إنه بتنسيق IT_<DestinationResourceGroup>_<TemplateName>.
تحذير
لا تحذف مجموعة الموارد المرحلية مباشرة. للتسبب في حذف مجموعة الموارد المرحلية، احذف عنصر قالب الصورة.
إذا أبلغت الخدمة عن فشل عند إرسال قالب تكوين الصورة، فقم بما يلي:
قبل إعادة محاولة إرسال القالب، احذفه باتباع هذا المثال:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
البدء في بناء الصورة
قم بإرسال تكوين الصورة إلى خدمة VM Image Builder عن طريق تشغيل الأمر التالي:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
انتظر حتى تنتهي عملية بناء الصورة، والتي قد تستغرق ما يصل إلى ساعة.
إذا واجهت أخطاء، فراجع استكشاف أخطاء Azure VM Image Builder وإصلاحها.
إنشاء جهاز ظاهري
قم بتخزين بيانات اعتماد تسجيل الدخول إلى VM في متغير. ينبغي أن تكون كلمة المرور معقدة.
$Cred = Get-Credentialقم بإنشاء الجهاز الظاهري باستخدام الصورة التي قمت بإنشائها.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
التحقق من التخصيصات
قم بإنشاء اتصال سطح المكتب البعيد بالجهاز الظاهري باستخدام اسم المستخدم وكلمة المرور اللذين قمت بتعيينهما عند إنشاء الجهاز الظاهري.
داخل الجهاز الظاهري، افتح PowerShell وقم بتشغيل
Get-Content، كما هو موضح في المثال التالي:Get-Content -Path C:\buildActions\buildActionsOutput.txtيعتمد الإخراج على محتويات الملف الذي قمت بإنشائه أثناء عملية تخصيص الصورة.
Azure-Image-Builder-Was-Hereمن جلسة PowerShell نفسها، تحقق من انتهاء التخصيص الثاني بنجاح عن طريق التحقق من وجود
c:\buildArtifacts\index.html، كما هو موضح في المثال التالي:Get-ChildItem c:\buildArtifacts\يجب أن تكون النتيجة قائمة دليل توضح أنه تم تنزيل الملف أثناء عملية تخصيص الصورة.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
تفريغ مواردك
إذا لم تعد بحاجة إلى الموارد التي تم إنشاؤها أثناء هذه العملية، فيمكنك حذفها عن طريق القيام بما يلي:
احذف قالب VM Image Builder.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateNameاحذف مجموعة موارد الصور.
أنذر
يحذف المثال التالي مجموعة الموارد المحددة وجميع الموارد التي تحتوي عليها. في حالة وجود أي موارد خارج نطاق هذه المقالة في مجموعة الموارد، فسيتم حذفها أيضاً.
Remove-AzResourceGroup -Name $imageResourceGroup
الخطوات التالية
لمعرفة المزيد حول مكونات ملف JSON الذي تستخدمه هذه المقالة، راجع مرجع قالب VM Image Builder.