إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على: ✔️ أجهزة Windows الظاهرية
في هذه المقالة، ستتعلم كيفية استخدام Azure VM Image Builder وAzure PowerShell لإنشاء إصدار صورة في معرض حوسبة Azure (معرض الصور المشترك سابقا) ثم توزيع الصورة عالميا. يمكنك أيضا القيام بذلك باستخدام Azure CLI.
لتكوين الصورة، تستخدم هذه المقالة قالب JSON، والذي يمكنك العثور عليه في armTemplateWinSIG.json. ستقوم بتنزيل وتحرير إصدار محلي من القالب، لذلك ستستخدم أيضا جلسة PowerShell محلية.
لتوزيع الصورة على معرض حوسبة Azure، يستخدم القالب sharedImage كقيمة distribute لقسم القالب.
يتم تشغيل Sysprep VM Image Builder تلقائيا لتعميم الصورة. الأمر هو أمر عام Sysprep ، ويمكنك تجاوزه إذا كنت بحاجة إلى ذلك.
كن على دراية بعدد المرات التي تقوم فيها بتخصيصات الطبقة. يمكنك تشغيل Sysprep الأمر لعدد محدود من المرات على صورة Windows واحدة. بعد الوصول إلى Sysprep الحد الأقصى، يجب إعادة إنشاء صورة Windows. لمزيد من المعلومات، راجع حدود عدد المرات التي يمكنك فيها تشغيل Sysprep.
تسجيل الموفرين
لاستخدام VM Image Builder، تحتاج إلى تسجيل الموفرين.
تحقق من تسجيلات مقدم الخدمة. تأكد من أن كل واحد يرجع Registered.
Get-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Storage | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Compute | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Network | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance | Format-table -Property ResourceTypes,RegistrationStateإذا لم يقوموا بإرجاع Registered، فسجل الموفرين عن طريق تشغيل الأوامر التالية:
Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages Register-AzResourceProvider -ProviderNamespace Microsoft.Storage Register-AzResourceProvider -ProviderNamespace Microsoft.Compute Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault Register-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstanceتثبيت وحدات PowerShell:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
إنشاء المتغيرات
نظرا لأنك ستستخدم بعض أجزاء المعلومات بشكل متكرر، قم بإنشاء بعض المتغيرات لتخزين هذه المعلومات.
استبدل قيم المتغيرات، مثل username و vmpassword، بمعلوماتك الخاصة.
# Get existing context
$currentAzContext = Get-AzContext
# Get your current subscription ID.
$subscriptionID=$currentAzContext.Subscription.Id
# Destination image resource group
$imageResourceGroup="aibwinsig"
# Location
$location="westus"
# Image distribution metadata reference name
$runOutputName="aibCustWinManImg02ro"
# Image template name
$imageTemplateName="helloImageTemplateWin02ps"
# Distribution properties object name (runOutput).
# This gives you the properties of the managed image on completion.
$runOutputName="winclientR01"
# Create a resource group for the VM Image Builder template and Azure Compute Gallery
New-AzResourceGroup `
-Name $imageResourceGroup `
-Location $location
إنشاء هوية معينة من قبل المستخدم وتعيين أذونات على مجموعة الموارد
يستخدم VM Image Builder هوية المستخدم المتوفرة لإدخال الصورة في معرض حوسبة Azure. في هذا المثال، يمكنك إنشاء تعريف دور Azure مع إجراءات محددة لتوزيع الصورة. ثم يتم تعيين تعريف الدور لهوية المستخدم.
# setup role def names, these need to be unique
$timeInt=$(get-date -UFormat "%s")
$imageRoleDefName="Azure Image Builder Image Def"+$timeInt
$identityName="aibIdentity"+$timeInt
## Add an Azure PowerShell module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity
# Create an identity
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName
$identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
$identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
تعيين أذونات للهوية لتوزيع الصور
استخدم هذا الأمر لتنزيل قالب تعريف دور Azure، ثم قم بتحديثه بالمعلمات المحددة مسبقا.
$aibRoleImageCreationUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json"
$aibRoleImageCreationPath = "aibRoleImageCreation.json"
# Download the configuration
Invoke-WebRequest -Uri $aibRoleImageCreationUrl -OutFile $aibRoleImageCreationPath -UseBasicParsing
((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<subscriptionID>',$subscriptionID) | Set-Content -Path $aibRoleImageCreationPath
((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<rgName>', $imageResourceGroup) | Set-Content -Path $aibRoleImageCreationPath
((Get-Content -path $aibRoleImageCreationPath -Raw) -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName) | Set-Content -Path $aibRoleImageCreationPath
# Create a role definition
New-AzRoleDefinition -InputFile ./aibRoleImageCreation.json
# Grant the role definition to the VM Image Builder service principal
New-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
إشعار
إذا تلقيت الخطأ "New-AzRoleDefinition: تم تجاوز حد تعريف الدور. لا يمكن إنشاء المزيد من تعريفات الأدوار، "راجع استكشاف أخطاء Azure RBAC (التحكم في الوصول المستند إلى الدور) وإصلاحها.
إنشاء معرض الحساب في Azure
لاستخدام VM Image Builder مع معرض حوسبة Azure، تحتاج إلى وجود معرض وتعريف صورة. لا تقوم VM Image Builder بإنشاء المعرض وتعريف الصورة لك.
إذا لم يكن لديك بالفعل معرض وتعريف صورة لاستخدامها، فابدأ بإنشائها.
# Gallery name
$sigGalleryName= "myIBSIG"
# Image definition name
$imageDefName ="winSvrimage"
# Additional replication region
$replRegion2="eastus"
# Create the gallery
New-AzGallery `
-GalleryName $sigGalleryName `
-ResourceGroupName $imageResourceGroup `
-Location $location
# Create the image definition
New-AzGalleryImageDefinition `
-GalleryName $sigGalleryName `
-ResourceGroupName $imageResourceGroup `
-Location $location `
-Name $imageDefName `
-OsState generalized `
-OsType Windows `
-Publisher 'myCompany' `
-Offer 'WindowsServer' `
-Sku 'WinSrv2019'
تنزيل القالب وتكوينه
قم بتنزيل قالب JSON وتكوينه مع المتغيرات الخاصة بك.
$templateFilePath = "armTemplateWinSIG.json"
Invoke-WebRequest `
-Uri "https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Win_Shared_Image_Gallery_Image/armTemplateWinSIG.json" `
-OutFile $templateFilePath `
-UseBasicParsing
(Get-Content -path $templateFilePath -Raw ) `
-replace '<subscriptionID>',$subscriptionID | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<rgName>',$imageResourceGroup | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<runOutputName>',$runOutputName | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<imageDefName>',$imageDefName | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<sharedImageGalName>',$sigGalleryName | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<region1>',$location | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<region2>',$replRegion2 | Set-Content -Path $templateFilePath
((Get-Content -path $templateFilePath -Raw) -replace '<imgBuilderId>',$identityNameResourceId) | Set-Content -Path $templateFilePath
أنشئ إصدار الصورة
يجب إرسال القالب إلى الخدمة. ستقوم الأوامر التالية بتنزيل أي بيانات اصطناعية تابعة، مثل البرامج النصية، وتخزينها في مجموعة الموارد المرحلية، مسبوقة IT_.
New-AzResourceGroupDeployment `
-ResourceGroupName $imageResourceGroup `
-TemplateFile $templateFilePath `
-ApiVersion "2022-02-14" `
-imageTemplateName $imageTemplateName `
-svclocation $location
لإنشاء الصورة، قم باستدعاء "تشغيل" على القالب.
Invoke-AzResourceAction `
-ResourceName $imageTemplateName `
-ResourceGroupName $imageResourceGroup `
-ResourceType Microsoft.VirtualMachineImages/imageTemplates `
-ApiVersion "2022-02-14" `
-Action Run
قد يستغرق إنشاء الصورة ونسخها نسخا متماثلا إلى كلتا المنطقتين بضع لحظات. قبل البدء في إنشاء جهاز ظاهري، انتظر حتى ينتهي هذا الجزء.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
إنشاء الجهاز الظاهري
إنشاء جهاز ظاهري من إصدار الصورة الذي قمت بإنشائه باستخدام VM Image Builder.
احصل على إصدار الصورة الذي قمت بإنشائه:
$imageVersion = Get-AzGalleryImageVersion ` -ResourceGroupName $imageResourceGroup ` -GalleryName $sigGalleryName ` -GalleryImageDefinitionName $imageDefName $imageVersionId = $imageVersion.Idإنشاء الجهاز الظاهري في المنطقة الثانية، حيث تم نسخ الصورة نسخا متماثلا:
$vmResourceGroup = "myResourceGroup" $vmName = "myVMfromImage" # Create user object $cred = Get-Credential -Message "Enter a username and password for the virtual machine." # Create a resource group New-AzResourceGroup -Name $vmResourceGroup -Location $replRegion2 # Network pieces $subnetConfig = New-AzVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24 $vnet = New-AzVirtualNetwork -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -Name MYvNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig $pip = New-AzPublicIpAddress -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4 $nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP -Protocol Tcp ` -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * ` -DestinationPortRange 3389 -Access Deny $nsg = New-AzNetworkSecurityGroup -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP $nic = New-AzNetworkInterface -Name myNic -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id # Create a virtual machine configuration using $imageVersion.Id to specify the image $vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | ` Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | ` Set-AzVMSourceImage -Id $imageVersion.Id | ` Add-AzVMNetworkInterface -Id $nic.Id # Create a virtual machine New-AzVM -ResourceGroupName $vmResourceGroup -Location $replRegion2 -VM $vmConfig
تحقق من التخصيص
قم بإنشاء اتصال سطح المكتب البعيد بالجهاز الظاهري باستخدام اسم المستخدم وكلمة المرور اللذين قمت بتعيينهما عند إنشاء الجهاز الظاهري. في الجهاز الظاهري، افتح نافذة موجه الأوامر وقم بتشغيل الأمر التالي:
dir c:\
يجب أن تشاهد دليلا باسم buildActions تم إنشاؤه أثناء تخصيص الصورة.
تفريغ مواردك
إشعار
إذا كنت تريد الآن محاولة إعادة تخصيص إصدار الصورة لإنشاء إصدار جديد من نفس الصورة، فتخط الخطوة الموضحة هنا وانتقل إلى استخدام VM Image Builder لإنشاء إصدار صورة آخر.
إذا لم تعد بحاجة إلى الموارد التي قمت بإنشائها أثناء اتباع العملية في هذه المقالة، يمكنك حذفها.
تحذف العملية التالية كل من الصورة التي قمت بإنشائها وجميع ملفات الموارد الأخرى. تأكد من الانتهاء من هذا النشر قبل حذف الموارد.
احذف قالب مجموعة الموارد أولا. وإلا، فلن يتم تنظيف مجموعة الموارد المرحلية (IT_) التي يستخدمها VM Image Builder.
احصل على ResourceID لقالب الصورة.
$resTemplateId = Get-AzResource -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2022-02-14"حذف قالب الصورة.
Remove-AzResource -ResourceId $resTemplateId.ResourceId -Forceحذف تعيين الدور.
Remove-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"إزالة التعريفات.
Remove-AzRoleDefinition -Name "$identityNamePrincipalId" -Force -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"حذف الهوية.
Remove-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Forceحذف مجموعة الموارد.
Remove-AzResourceGroup $imageResourceGroup -Force
الخطوات التالية
لتحديث إصدار الصورة الذي قمت بإنشائه في هذه المقالة، راجع استخدام VM Image Builder لإنشاء إصدار صورة آخر.