Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✔️ Windows-VMs
In diesem Artikel erfahren Sie, wie Sie mit dem PowerShell-Modul von Azure VM Image Builder ein benutzerdefiniertes Windows-VM-Image erstellen können.
Voraussetzungen
Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
Wenn Sie PowerShell lokal verwenden möchten, muss in diesem Artikel das Azure PowerShell-Modul installiert und mithilfe des Cmdlets Connect-AzAccount eine Verbindung mit Ihrem Azure-Konto hergestellt werden. Weitere Informationen finden Sie unter Installieren von Azure PowerShell.
Einige der Schritte erfordern Cmdlets aus dem Az.ImageBuilder-Modul . Installieren Sie dies mit dem folgenden Befehl separat.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.
Starten von Azure Cloud Shell:
| Option | Beispiel/Link |
|---|---|
| Wählen Sie "Ausprobieren" in der oberen rechten Ecke eines Code- oder Befehlsblocks aus. Wenn Sie "Testen" auswählen, wird der Code oder Befehl nicht automatisch in Cloud Shell kopiert. |
|
| Wechseln Sie zu https://shell.azure.com, oder wählen Sie die Schaltfläche "Cloud Shell starten " aus, um Cloud Shell in Ihrem Browser zu öffnen. |
|
| Wählen Sie auf der Menüleiste oben rechts im Azure-Portal die Schaltfläche "Cloud Shell" aus. |
|
So verwenden Sie Azure Cloud Shell
Starten Sie Cloud Shell.
Wählen Sie die Schaltfläche "Kopieren " in einem Codeblock (oder Befehlsblock) aus, um den Code oder Befehl zu kopieren.
Fügen Sie den Code oder Befehl mit STRG+UMSCHALT+V unter Windows und Linux oder CMD+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.
Wählen Sie die EINGABETASTE aus, um den Code oder Befehl auszuführen.
Wenn Sie über mehrere Azure-Abonnements verfügen, müssen Sie das entsprechende Abonnement auswählen, in dem die Ressourcen fakturiert werden sollen. Wählen Sie ein bestimmtes Abonnement mithilfe des Cmdlets "Set-AzContext " aus.
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
Registrieren von Anbietern
Wenn Sie dies noch nicht getan haben, registrieren Sie die folgenden Ressourcenanbieter für die Verwendung mit Ihrem 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
Definieren von Variablen
Da Sie einige Informationen wiederholt verwenden werden, erstellen Sie ein paar Variablen, um diese Informationen zu speichern:
# 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'
Erstellen Sie eine Variable für Ihre Azure Abonnement-ID. Um sich zu vergewissern, dass die subscriptionID-Variable Ihre Abonnement-ID enthält, können Sie die zweite Zeile im folgenden Beispiel ausführen:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
Erstellen einer Ressourcengruppe
Erstellen Sie eine Azure-Ressourcengruppe mithilfe des Cmdlets New-AzResourceGroup . Eine Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen als Gruppe bereitgestellt und verwaltet werden.
Im folgenden Beispiel wird eine Ressourcengruppe basierend auf dem Namen in der Variablen $imageResourceGroup in der Region erstellt, die in der Variablen $location angegeben ist. Diese Ressourcengruppe wird verwendet, um das Artefakt und Image der Imagekonfigurationsvorlage zu speichern.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Erstellen der Benutzeridentität und Festlegen von Rollenberechtigungen
Erteilen Sie Azure Image Builder-Berechtigungen zum Erstellen von Images in der angegebenen Ressourcengruppe, indem Sie das folgende Beispiel verwenden. Ohne diese Berechtigung kann der Prozess der Imageerstellung nicht erfolgreich abgeschlossen werden.
Erstellen Sie Variablen für die Rollendefinition und die Identitätsnamen. Diese Werte müssen eindeutig sein.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"Erstellen Sie eine Benutzeridentität.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $locationSpeichern Sie die Identitätsressource und die Prinzipal-IDs in Variablen.
$identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Zuweisen von Berechtigungen für die Identität zur Verteilung der Images
Laden Sie die JSON-Konfigurationsdatei herunter, und ändern Sie sie anhand der in diesem Artikel definierten Einstellungen.
$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 -ForceErstellen Sie die Rollendefinition.
New-AzRoleDefinition -InputFile $myRoleImageCreationPathGewähren Sie dem VM Image Builder-Dienstprinzipal die Rollendefinition.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
Hinweis
Wenn Sie die Fehlermeldung „New-AzRoleDefinition: Rollendefinitionsgrenze überschritten. Es können keine weiteren Rollendefinitionen erstellt werden", siehe Problembehandlung für Azure RBAC (rollenbasierte Zugriffssteuerung).
Erstellen einer Azure Compute Gallery-Instanz
Erstellen Sie den Katalog.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $locationErstellen Sie eine Katalogdefinition.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' HyperVGeneration = 'v1' } New-AzGalleryImageDefinition @GalleryParams
Erstellen eines Images
Erstellen Sie ein VM Image Builder-Quellobjekt. Gültige Parameterwerte finden Sie unter Suchen von Windows-VM-Images in Azure Marketplace mit Azure PowerShell.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParamsErstellen Sie ein VM Image Builder-Distributor-Objekt.
$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 @disObjParamsErstellen Sie ein VM Image Builder-Anpassungsobjekt.
$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 @ImgCustomParams01Erstellen Sie ein zweites VM Image Builder-Anpassungsobjekt.
$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 @ImgCustomParams02Erstellen Sie eine VM Image Builder-Vorlage.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
Wenn die Vorlage erstellt wurde, wird eine Nachricht zurückgegeben, und eine VM Image Builder-Konfigurationsvorlage wird in $imageResourceGroup erstellt.
Um festzustellen, ob die Vorlagenerstellung erfolgreich war, können Sie das folgende Beispiel verwenden:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Außerdem erstellt VM Image Builder im Hintergrund eine Stagingressourcengruppe in Ihrem Abonnement. Diese Ressourcengruppe wird für den Imagebuild verwendet. Sie hat das Format IT_<DestinationResourceGroup>_<TemplateName>.
Warnung
Löschen Sie die Stagingressourcengruppe nicht direkt. Löschen Sie das Artefakt der Imagevorlage. Dadurch wird die Löschung der Stagingressourcengruppe veranlasst.
Wenn der Dienst einen Fehler meldet, wenn Sie die Imagekonfigurationsvorlage übermitteln, gehen Sie wie folgt vor:
Weitere Informationen finden Sie unter "Problembehandlung bei Fehlern beim Azure VM Image Builder".
Bevor Sie versuchen, die Vorlage zu übermitteln, löschen Sie sie wie im folgenden Beispiel:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
Starten des Imagebuilds
Senden Sie die Imagekonfiguration an den VM Image Builder-Dienst, indem Sie die folgenden Befehle ausführen:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Warten Sie, bis der Imageerstellungsvorgang abgeschlossen ist, was bis zu einer Stunde dauern kann.
Wenn Fehler auftreten, überprüfen Sie den Abschnitt Problembehandlung bei Fehlern des Azure VM Image Builder.
Erstellen einer VM
Speichern Sie die Anmeldeinformationen für die VM in einer Variablen. Das Kennwort muss komplex sein.
$Cred = Get-CredentialErstellen Sie die VM mithilfe des erstellten Images.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
Überprüfen der Anpassungen
Stellen Sie mit dem Benutzernamen und dem Kennwort, die Sie beim Erstellen der VM festgelegt haben, eine Remotedesktopverbindung mit der VM her.
Öffnen Sie PowerShell in der VM, und führen Sie
Get-Contentwie im folgenden Beispiel gezeigt aus:Get-Content -Path C:\buildActions\buildActionsOutput.txtDie Ausgabe basiert auf dem Inhalt der Datei, die Sie während des Imageanpassungsvorgangs erstellt haben.
Azure-Image-Builder-Was-HereÜberprüfen Sie in derselben PowerShell-Sitzung, ob die zweite Anpassung erfolgreich abgeschlossen wurde, indem Sie auf das Vorhandensein von
c:\buildArtifacts\index.htmlprüfen, wie im folgenden Beispiel gezeigt:Get-ChildItem c:\buildArtifacts\Das Ergebnis sollte eine Verzeichnisliste sein, die zeigt, dass die Datei während des Imageanpassungsvorgangs heruntergeladen wurde.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
Bereinigen von Ressourcen
Wenn Sie die Ressourcen, die während dieses Vorgangs erstellt wurden, nicht mehr benötigen, können Sie sie wie folgt löschen:
Löschen Sie die VM Image Builder-Vorlage.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateNameLöschen Sie die Imageressourcengruppe.
Vorsicht
Im folgenden Beispiel werden die angegebene Ressourcengruppe und alle in ihr enthaltenen Ressourcen gelöscht. Wenn in der Ressourcengruppe Ressourcen vorhanden sind, die nicht in diesem Artikel behandelt werden, werden sie ebenfalls gelöscht.
Remove-AzResourceGroup -Name $imageResourceGroup
Nächste Schritte
Weitere Informationen zu den Komponenten der JSON-Datei, die in diesem Artikel verwendet wird, finden Sie in der Vorlagenreferenz für vm Image Builder.