Een Virtuele Windows-machine maken met VM Image Builder met behulp van PowerShell
Van toepassing op: ✔️ Windows-VM's
In dit artikel wordt gedemonstreerd hoe u een aangepaste Windows-VM-installatiekopieën maakt met behulp van de PowerShell-module van Azure VM Image Builder.
Vereisten
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Als u PowerShell lokaal wilt gebruiken, moet u voor dit artikel de Azure PowerShell-module installeren en verbinding maken met uw Azure-account met behulp van de cmdlet Connect-AzAccount . Zie Azure PowerShell installeren voor meer informatie.
Voor sommige van de stappen zijn cmdlets uit de Az.ImageBuilder-module vereist. Installeer deze afzonderlijk met behulp van de volgende opdracht.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Azure host Azure Cloud Shell, een interactieve shell-omgeving die u via uw browser kunt gebruiken. U kunt Bash of PowerShell gebruiken met Cloud Shell om met Azure-services te werken. U kunt de vooraf geïnstalleerde Cloud Shell-opdrachten gebruiken om de code in dit artikel uit te voeren zonder dat u iets hoeft te installeren in uw lokale omgeving.
Om Azure Cloud Shell op te starten:
Optie | Voorbeeld/koppeling |
---|---|
Selecteer Uitproberen in de rechterbovenhoek van een code- of opdrachtblok. Als u Try It selecteert, wordt de code of opdracht niet automatisch gekopieerd naar Cloud Shell. | |
Ga naar https://shell.azure.com, of selecteer de knop Cloud Shell starten om Cloud Shell in uw browser te openen. | |
Klik op de knop Cloud Shell in het menu in de balk rechtsboven in de Azure-portal. |
Azure Cloud Shell gebruiken:
Start Cloud Shell.
Selecteer de knop Kopiëren op een codeblok (of opdrachtblok) om de code of opdracht te kopiëren.
Plak de code of opdracht in de Cloud Shell-sessie door Ctrl+Shift+V in Windows en Linux te selecteren of door Cmd+Shift+V te selecteren in macOS.
Selecteer Enter om de code of opdracht uit te voeren.
Als u meerdere Azure-abonnementen hebt, kiest u het juiste abonnement waarin de resource moet worden gefactureerd. Selecteer een specifiek abonnement met behulp van de cmdlet Set-AzContext .
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
Providers registreren
Als u dit nog niet hebt gedaan, registreert u de volgende resourceproviders voor gebruik met uw Azure-abonnement:
- 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
Variabelen definiëren
Omdat u enkele stukjes gegevens herhaaldelijk gaat gebruiken, maakt u enkele variabelen om die informatie op te slaan:
# 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'
Maak een variabele voor uw Azure-abonnements-id. Als u wilt controleren of de subscriptionID
variabele uw abonnements-id bevat, kunt u de tweede regel uitvoeren in het volgende voorbeeld:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
Een brongroep maken
Maak een Azure-resourcegroep met behulp van de cmdlet New-AzResourceGroup . Een resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en groepsgewijs worden beheerd.
In het volgende voorbeeld wordt een resourcegroep gemaakt die is gebaseerd op de naam in de $imageResourceGroup
variabele in de regio die u in de $location
variabele hebt opgegeven. Deze resourcegroep wordt gebruikt om het artefact voor de configuratiesjabloon voor installatiekopieën en de installatiekopieën op te slaan.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Een gebruikersidentiteit maken en rolmachtigingen instellen
Verdeel machtigingen voor de opbouwfunctie voor Azure-installatiekopieën om installatiekopieën te maken in de opgegeven resourcegroep met behulp van het volgende voorbeeld. Zonder deze machtiging wordt het buildproces van de installatiekopieën niet voltooid.
Maak variabelen voor de roldefinitie en identiteitsnamen. Deze waarden moeten uniek zijn.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"
Maak een gebruikersidentiteit.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
Sla de id-id's en principal-id's op in variabelen.
$identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Machtigingen toewijzen voor de identiteit om de installatiekopieën te distribueren
Download het JSON-configuratiebestand en pas het vervolgens aan op basis van de instellingen die in dit artikel zijn gedefinieerd.
$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
De roldefinitie maken.
New-AzRoleDefinition -InputFile $myRoleImageCreationPath
Verwijs de roldefinitie aan de service-principal vm Image Builder.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
Notitie
Als u de fout 'New-AzRoleDefinition: Limiet voor roldefinities is overschreden. Er kunnen geen roldefinities meer worden gemaakt, zie Problemen met Azure RBAC (op rollen gebaseerd toegangsbeheer) oplossen.
Een Azure Compute-galerie maken
Maak de galerie.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
Een galeriedefinitie maken.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' } New-AzGalleryImageDefinition @GalleryParams
Een installatiekopie maken
Maak een bronobject voor VM Image Builder. Zie Windows VM-installatiekopieën zoeken in Azure Marketplace met Azure PowerShell voor geldige parameterwaarden.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParams
Maak een VM Image Builder-distributeurobject.
$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
Maak een VM Image Builder-aanpassingsobject.
$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
Maak een tweede VM Image Builder-aanpassingsobject.
$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
Maak een VM Image Builder-sjabloon.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
Wanneer de sjabloon is gemaakt, wordt er een bericht geretourneerd en wordt er een VM Image Builder-configuratiesjabloon gemaakt in $imageResourceGroup
.
Gebruik het volgende voorbeeld om te bepalen of het proces voor het maken van de sjabloon is geslaagd:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Op de achtergrond maakt VM Image Builder ook een faseringsresourcegroep in uw abonnement. Deze resourcegroep wordt gebruikt voor de build van de installatiekopieën. Het heeft de notatie IT_<DestinationResourceGroup>_<TemplateName>
.
Waarschuwing
Verwijder de faseringsresourcegroep niet rechtstreeks. Als u wilt dat de faseringsresourcegroep wordt verwijderd, verwijdert u het artefact van de afbeeldingssjabloon.
Als de service een fout meldt wanneer de installatiekopieconfiguratiesjabloon wordt verzonden, gaat u als volgt te werk:
Voordat u de sjabloon opnieuw verzendt, verwijdert u deze door het volgende voorbeeld te volgen:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
De build van de installatiekopieën starten
Verzend de installatiekopieënconfiguratie naar de VM Image Builder-service door de volgende opdracht uit te voeren:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Wacht tot het proces voor het bouwen van afbeeldingen is voltooid, wat maximaal een uur kan duren.
Als er fouten optreden, raadpleegt u Problemen met azure VM Image Builder oplossen.
Een VM maken:
Sla de aanmeldingsreferenties van de VIRTUELE machine op in een variabele. Het wachtwoord moet complex zijn.
$Cred = Get-Credential
Maak de VIRTUELE machine met behulp van de installatiekopieën die u hebt gemaakt.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
De aanpassingen controleren
Maak een verbinding met extern bureaublad met de virtuele machine met behulp van de gebruikersnaam en het wachtwoord die u hebt ingesteld toen u de virtuele machine maakte.
Open PowerShell in de virtuele machine en voer powershell uit
Get-Content
, zoals wordt weergegeven in het volgende voorbeeld:Get-Content -Path C:\buildActions\buildActionsOutput.txt
De uitvoer is gebaseerd op de inhoud van het bestand dat u hebt gemaakt tijdens het aanpassingsproces van de afbeelding.
Azure-Image-Builder-Was-Here
Controleer in dezelfde PowerShell-sessie of de tweede aanpassing is voltooid door te controleren op de aanwezigheid van
c:\buildArtifacts\index.html
, zoals wordt weergegeven in het volgende voorbeeld:Get-ChildItem c:\buildArtifacts\
Het resultaat moet een mapvermelding zijn die laat zien dat het bestand is gedownload tijdens het aanpassingsproces van de installatiekopieën.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
Uw resources opschonen
Als u de resources die tijdens dit proces zijn gemaakt niet meer nodig hebt, kunt u ze als volgt verwijderen:
Verwijder de VM Image Builder-sjabloon.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Verwijder de resourcegroep van de installatiekopieën.
Let op
In het volgende voorbeeld worden de opgegeven resourcegroep en alle resources die deze bevat, verwijderd. Als er resources buiten het bereik van dit artikel aanwezig zijn in de resourcegroep, worden ze ook verwijderd.
Remove-AzResourceGroup -Name $imageResourceGroup
Volgende stappen
Zie de sjabloonreferentie voor VM Image Builder voor meer informatie over de onderdelen van het JSON-bestand dat in dit artikel wordt gebruikt.