Skapa en virtuell Windows-dator med VM Image Builder med hjälp av PowerShell
Gäller för: ✔️ Virtuella Windows-datorer
Den här artikeln visar hur du skapar en anpassad Windows VM-avbildning med hjälp av PowerShell-modulen Azure VM Image Builder.
Förutsättningar
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Om du väljer att använda PowerShell lokalt kräver den här artikeln att du installerar Azure PowerShell-modulen och ansluter till ditt Azure-konto med hjälp av cmdleten Connect-AzAccount . Mer information finns i Installera Azure PowerShell.
Vissa av stegen kräver cmdletar från modulen Az.ImageBuilder . Installera separat med hjälp av följande kommando.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Azure är värd för Azure Cloud Shell, en interaktiv gränssnittsmiljö som du kan använda via webbläsaren. Du kan använda antingen Bash eller PowerShell med Cloud Shell för att arbeta med Azure-tjänster. Du kan använda förinstallerade Cloud Shell-kommandon för att köra koden i den här artikeln, utan att behöva installera något i din lokala miljö.
Så här startar du Azure Cloud Shell:
Alternativ | Exempel/länk |
---|---|
Välj Prova i det övre högra hörnet i en kod eller ett kommandoblock. Om du väljer Prova kopieras inte koden eller kommandot automatiskt till Cloud Shell. | |
Gå till https://shell.azure.com eller Välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren. | |
Välj knappen Cloud Shell på menyn längst upp till höger i Azure-portalen. |
Så här använder du Azure Cloud Shell:
Starta Cloud Shell.
Välj knappen Kopiera i ett kodblock (eller kommandoblock) för att kopiera koden eller kommandot.
Klistra in koden eller kommandot i Cloud Shell-sessionen genom att välja Ctrl+Skift+V i Windows och Linux, eller genom att välja Cmd+Shift+V på macOS.
Välj Retur för att köra koden eller kommandot.
Om du har flera Azure-prenumerationer väljer du den prenumeration där resurserna ska faktureras. Välj en specifik prenumeration med hjälp av cmdleten Set-AzContext .
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
Registrera providrar
Om du inte redan har gjort det registrerar du följande resursprovidrar som ska användas med din Azure-prenumeration:
- 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
Definiera variabler
Eftersom du kommer att använda viss information upprepade gånger skapar du några variabler för att lagra den informationen:
# 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'
Skapa en variabel för ditt Azure-prenumerations-ID. För att bekräfta att variabeln subscriptionID
innehåller ditt prenumerations-ID kan du köra den andra raden i följande exempel:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
Skapa en resursgrupp
Skapa en Azure-resursgrupp med hjälp av cmdleten New-AzResourceGroup . En resursgrupp är en logisk container där Azure-resurser distribueras och hanteras som en grupp.
I följande exempel skapas en resursgrupp som baseras på namnet i variabeln $imageResourceGroup
i den region som du har angett i variabeln $location
. Den här resursgruppen används för att lagra artefakten för avbildningskonfigurationsmallen och avbildningen.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Skapa en användaridentitet och ange rollbehörigheter
Ge Azure Image Builder behörighet att skapa avbildningar i den angivna resursgruppen med hjälp av följande exempel. Utan den här behörigheten slutförs inte avbildningsprocessen.
Skapa variabler för rolldefinitionen och identitetsnamnen. Dessa värden måste vara unika.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"
Skapa en användaridentitet.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
Lagra identitetsresursen och huvudnamns-ID:t i variabler.
$identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Tilldela behörigheter för identiteten för att distribuera avbildningarna
Ladda ned JSON-konfigurationsfilen och ändra den baserat på de inställningar som definieras i den här artikeln.
$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
Skapa rolldefinitionen.
New-AzRoleDefinition -InputFile $myRoleImageCreationPath
Bevilja rolldefinitionen till tjänstens huvudnamn för den virtuella datorn Image Builder.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
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
Skapa galleriet.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
Skapa en galleridefinition.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' } New-AzGalleryImageDefinition @GalleryParams
Skapa en avbildning
Skapa ett vm Image Builder-källobjekt. Giltiga parametervärden finns i Hitta avbildningar av virtuella Windows-datorer på Azure Marketplace med Azure PowerShell.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParams
Skapa ett distributionsobjekt för image builder för virtuell dator.
$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
Skapa ett anpassningsobjekt för 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
Skapa ett andra anpassningsobjekt för 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
Skapa en mall för VM Image Builder.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
När mallen har skapats returneras ett meddelande och en konfigurationsmall för VM Image Builder skapas i $imageResourceGroup
.
Använd följande exempel för att avgöra om processen för att skapa mallen lyckades:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
I bakgrunden skapar VM Image Builder också en mellanlagringsresursgrupp i din prenumeration. Den här resursgruppen används för avbildningsversionen. Det är i formatet IT_<DestinationResourceGroup>_<TemplateName>
.
Varning
Ta inte bort mellanlagringsresursgruppen direkt. Om du vill att mellanlagringsresursgruppen ska tas bort tar du bort artefakten för avbildningsmallen.
Om tjänsten rapporterar ett fel när avbildningskonfigurationsmallen skickas gör du följande:
Se Felsöka fel i Azure VM Image Builder.
Innan du försöker skicka mallen igen tar du bort den genom att följa det här exemplet:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
Starta avbildningsversionen
Skicka avbildningskonfigurationen till tjänsten Image Builder för den virtuella datorn genom att köra följande kommando:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Vänta tills avbildningsprocessen har slutförts, vilket kan ta upp till en timme.
Om du får fel kan du läsa Felsöka fel med Azure VM Image Builder.
Skapa en virtuell dator
Lagra inloggningsuppgifterna för den virtuella datorn i en variabel. Lösenordet måste vara komplext.
$Cred = Get-Credential
Skapa den virtuella datorn med den avbildning som du skapade.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
Verifiera anpassningarna
Skapa en fjärrskrivbordsanslutning till den virtuella datorn med det användarnamn och lösenord som du angav när du skapade den virtuella datorn.
Öppna PowerShell på den virtuella datorn och kör
Get-Content
, som du ser i följande exempel:Get-Content -Path C:\buildActions\buildActionsOutput.txt
Utdata baseras på innehållet i filen som du skapade under anpassningsprocessen för avbildningen.
Azure-Image-Builder-Was-Here
Från samma PowerShell-session kontrollerar du att den andra anpassningen har slutförts genom att kontrollera förekomsten av
c:\buildArtifacts\index.html
, som du ser i följande exempel:Get-ChildItem c:\buildArtifacts\
Resultatet bör vara en kataloglista som visar att filen laddades ned under anpassningsprocessen för avbildningen.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
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:
Ta bort mallen för VM Image Builder.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Ta bort bildresursgruppen.
Varning
I följande exempel tas den angivna resursgruppen bort och alla resurser som den innehåller. Om det finns resurser utanför omfånget för den här artikeln i resursgruppen tas de också bort.
Remove-AzResourceGroup -Name $imageResourceGroup
Nästa steg
Mer information om komponenterna i JSON-filen som används i den här artikeln finns i mallreferensen för VM Image Builder.