Skapa en Azure Virtual Desktop-avbildning med hjälp av VM Image Builder och PowerShell
Gäller för: ✔️ Virtuella Windows-datorer
I den här artikeln får du lära dig hur du skapar en Azure Virtual Desktop-avbildning med följande anpassningar:
- FSLogix-installation
- Azure Virtual Desktop-optimering
- Microsoft Teams-installation
- Windows Restart-anpassning
- Windows Update-anpassning
I artikeln beskrivs hur du automatiserar anpassningarna med hjälp av Azure VM Image Builder. Du kan sedan distribuera avbildningen till ett Azure Compute-galleri (tidigare delat bildgalleri), där du kan replikera den till andra regioner, styra skalan och dela avbildningen inom och utanför organisationen.
För att förenkla distributionen av en vm Image Builder-konfiguration använder vårt exempel en Azure Resource Manager-mall med mallen VM Image Builder kapslad i den. Den här metoden ger dig några fler fördelar, till exempel variabler och parameterindata. Du kan också skicka parametrar från kommandoraden.
Den här artikeln är avsedd som en övning för att kopiera och klistra in.
Kommentar
Du hittar skripten för att installera apparna på GitHub. De är endast i illustrations- och testsyfte. Använd dem inte för produktionsarbetsbelastningar.
Tips för att skapa Windows-avbildningar
VM-storlek: Använd eller större för Windows
Standard_D2_v2
. Standardstorleken ärStandard_D1_v2
, vilket inte är lämpligt för Windows.Den här artikeln använder PowerShell-anpassningsskript. Använd följande inställningar, annars slutar bygget att svara:
"runElevated": true, "runAsSystem": true,
Till exempel:
{ "type": "PowerShell", "name": "installFSLogix", "runElevated": true, "runAsSystem": true, "scriptUri": "https://raw.githubusercontent.com/azure/azvmimagebuilder/main/solutions/14_Building_Images_WVD/0_installConfFsLogix.ps1"
Kommentera koden: Build-loggen för den virtuella datorn Image Builder, customization.log, är utförlig. Om du kommenterar skripten med hjälp av "write-host" skickas de till loggarna, vilket gör felsökningen enklare.
write-host 'AIB Customization: Starting OS Optimizations script'
Slutkoder: VM Image Builder förväntar sig att alla skript returnerar en
0
slutkod. Om du använder en slutkod som inte är noll misslyckas den virtuella datorn Image Builder med anpassningen och stoppar bygget. Om du har komplexa skript lägger du till instrumentation och avger slutkoder, som visas i filen customization.log .Write-Host "Exit code: " $LASTEXITCODE
Test: Testa och testa koden igen på en fristående virtuell dator. Se till att det inte finns några användarfrågor, att du använder rätt behörigheter och så vidare.
Nätverk:
Set-NetAdapterAdvancedProperty
anges i optimeringsskriptet men misslyckas med genereringen av VM Image Builder. Eftersom nätverket kopplas från kommenteras det ut. Vi undersöker det här problemet.
Förutsättningar
Du måste ha de senaste Azure PowerShell-cmdletarna installerade. Mer information finns i Översikt över Azure PowerShell.
# Check to ensure that you're registered for the providers and RegistrationState is set to 'Registered'
Get-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages
Get-AzResourceProvider -ProviderNamespace Microsoft.Storage
Get-AzResourceProvider -ProviderNamespace Microsoft.Compute
Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault
Get-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance
# If they don't show as 'Registered', run the following commented-out code
## 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
Konfigurera miljön och variablerna
# Step 1: Import module
Import-Module Az.Accounts
# Step 2: get existing context
$currentAzContext = Get-AzContext
# Destination image resource group
$imageResourceGroup="avdImageDemoRg"
# Location (see possible locations in the main docs)
$location="westus2"
# Your subscription. This command gets your current subscription
$subscriptionID=$currentAzContext.Subscription.Id
# Image template name
$imageTemplateName="avd10ImageTemplate01"
# Distribution properties object name (runOutput). Gives you the properties of the managed image on completion
$runOutputName="sigOutput"
# Create resource group
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Behörigheter, användaridentitet och roll
Skapa en användaridentitet.
# 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 Azure PowerShell modules to support AzUserAssignedIdentity and Azure VM Image Builder 'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease} # Create the identity New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location $identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Tilldela behörigheter till identiteten för att distribuera avbildningar. Följande kommandon laddar ned och uppdaterar mallen med de tidigare angivna parametrarna.
$aibRoleImageCreationUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/main/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json" $aibRoleImageCreationPath = "aibRoleImageCreation.json" # Download the config 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"
Kommentar
Om du får felet "New-AzRoleDefinition: Rolldefinitionsgränsen har överskridits. Inga fler rolldefinitioner kan skapas", se Felsöka Azure RBAC (rollbaserad åtkomstkontroll).
Skapa ett Azure Compute-galleri
Om du inte redan har ett Azure Compute-galleri måste du skapa ett.
$sigGalleryName= "myaibsig01"
$imageDefName ="win10avd"
# Create the gallery
New-AzGallery -GalleryName $sigGalleryName -ResourceGroupName $imageResourceGroup -Location $location
# Create the gallery definition
New-AzGalleryImageDefinition -GalleryName $sigGalleryName -ResourceGroupName $imageResourceGroup -Location $location -Name $imageDefName -OsState generalized -OsType Windows -Publisher 'myCo' -Offer 'Windows' -Sku '10avd'
Konfigurera mallen för VM Image Builder
I det här exemplet har vi förberett en mall som laddar ned och uppdaterar mallen för VM Image Builder med de parametrar som angavs tidigare. Mallen installerar FSLogix, operativsystemoptimeringar och Microsoft Teams och kör Windows Update i slutet.
Om du öppnar mallen kan du i källegenskapen se den avbildning som används. I det här exemplet använder den en Windows 10-avbildning med flera sessioner.
Windows 10-avbildningar
Du bör känna till två viktiga typer av bilder: flera sessioner och en session.
Avbildningar med flera sessioner är avsedda för poolanvändning. Här är ett exempel på bildinformationen i Azure:
"publisher": "MicrosoftWindowsDesktop",
"offer": "Windows-10",
"sku": "20h2-avd",
"version": "latest"
Ensessionsbilder är avsedda för individuell användning. Här är ett exempel på bildinformationen i Azure:
"publisher": "MicrosoftWindowsDesktop",
"offer": "Windows-10",
"sku": "19h2-ent",
"version": "latest"
Du kan också ändra vilka Windows 10-avbildningar som är tillgängliga:
Get-AzVMImageSku -Location westus2 -PublisherName MicrosoftWindowsDesktop -Offer windows-10
Ladda ned och konfigurera mallen
Ladda nu ned mallen och konfigurera den för eget bruk.
$templateUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/main/solutions/14_Building_Images_WVD/armTemplateWVD.json"
$templateFilePath = "armTemplateWVD.json"
Invoke-WebRequest -Uri $templateUrl -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 '<region>',$location) | 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 '<imgBuilderId>',$identityNameResourceId) | Set-Content -Path $templateFilePath
Visa gärna mallen. All kod kan visas.
Skicka mallen
Mallen måste skickas till tjänsten. På så sätt laddas alla beroende artefakter ned, till exempel skript och validerar, kontrollerar behörigheter och lagrar dem i mellanlagringsresursgruppen, som är prefixet med IT_.
New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -TemplateParameterObject @{"api-Version" = "2020-02-14"; "imageTemplateName" = $imageTemplateName; "svclocation" = $location}
# Optional - if you have any errors running the preceding command, run:
$getStatus=$(Get-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName)
$getStatus.ProvisioningErrorCode
$getStatus.ProvisioningErrorMessage
Skapa avbildningen
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName -NoWait
Kommentar
Kommandot väntar inte på att den virtuella datorn Image Builder-tjänsten ska slutföra avbildningsversionen, så du kan fråga efter statusen som visas här.
$getStatus=$(Get-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName)
# Shows all the properties
$getStatus | Format-List -Property *
# Shows the status of the build
$getStatus.LastRunStatusRunState
$getStatus.LastRunStatusMessage
$getStatus.LastRunStatusRunSubState
Skapa en virtuell dator
Nu när avbildningen har skapats kan du skapa en virtuell dator från den. Använd exemplen från New-AzVM (Az PowerShell-modulen. Beräkning).
Rensa dina resurser
Om du inte längre behöver de resurser som skapades under den här processen kan du ta bort dem genom att göra följande:
Viktigt!
Ta först bort resursgruppsmallen. Om du bara tar bort resursgruppen rensas inte den mellanlagringsresursgrupp (IT_) som används av VM Image Builder.
Ta bort mallen för VM Image Builder.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name vd10ImageTemplate
Ta bort rolltilldelningen.
Remove-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" ## Remove the definitions Remove-AzRoleDefinition -Name "$identityNamePrincipalId" -Force -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" ## Delete the identity Remove-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Force
Ta bort resursgruppen.
Remove-AzResourceGroup $imageResourceGroup -Force
Nästa steg
Om du vill prova fler exempel på VM Image Builder går du till GitHub.