Version : 1.1 · Date : 2026-10-22 · Domaine 1 : Plan and implement an Azure Virtual Desktop infrastructure (40 à 45 %)
En une phrase : un session host n'est que l'instance d'une image ; l'examen vérifie que vous savez construire cette image à la main (VM de référence, Sysprep, capture) ou avec un custom image template (Azure VM Image Builder), la ranger et la répliquer dans Azure Compute Gallery (image definition, versions, réplicas, Trusted Launch), puis la mettre à jour chaque mois et remplacer les session hosts (session host update) plutôt que de les patcher un par un.

Ce que l'examen demande#
Texte officiel du guide d'étude AZ-140, bloc Create and manage session host images :
| # | Compétence mesurée (guide officiel, en anglais) | Section |
|---|---|---|
| 1 | Create an image manually | 3 |
| 2 | Create an image by using Azure VM Image Builder | 4 |
| 3 | Modify an image | 6 |
| 4 | Plan and implement lifecycle management for images | 7 |
| 5 | Apply OS and application updates to an image | 7.2 |
| 6 | Create a session host by using a custom image | 8 |
| 7 | Plan and implement image storage, including Azure Compute Gallery | 5 |
Ce chapitre suppose connus les bases des VM Azure, des disques managés et de Trusted Launch (voir SC-500 § 9 Trusted Launch et SC-500 § 11.4 Images et Azure Compute Gallery). Les host pools sont au chapitre 03, FSLogix au chapitre 02, les applications (MSIX, App Attach) au chapitre 07.
1. Trois manières d'obtenir une image#
| Approche | Comment | Quand la choisir | Limites |
|---|---|---|---|
| Image Marketplace telle quelle | Windows 11 Enterprise multi-session (avec ou sans Microsoft 365 Apps) choisie à la création du host pool | POC, petits pools, applications livrées autrement (App Attach, Intune) | Pas d'application métier ni de réglage préinstallé ; chaque VM se configure après coup |
| Image manuelle (golden image) | VM de référence personnalisée à la main, Sysprep, capture | Peu de mises à jour, application difficile à scripter, premier essai | Manuel, peu reproductible, une VM généralisée est perdue à chaque capture |
| Custom image template (Azure VM Image Builder) | Modèle JSON : source + customizations + destinations, build automatisé | Production, mises à jour mensuelles, plusieurs régions | Tout doit être scriptable ; scripts en exit 0 ; build de 4 h maximum par défaut |
Dans les trois cas, l'image finale se range de préférence dans Azure Compute Gallery (versionnée, répliquée, compatible Trusted Launch). La managed image n'est plus qu'un format hérité.
2. Partir d'une image Marketplace#
2.1 Les images multi-session#
Systèmes pris en charge pour les session hosts (64 bits) : Windows 11 / 10 Enterprise multi-session, Windows 11 / 10 Enterprise (host pools personal) et Windows Server 2025, 2022, 2019, 2016 (avec RDS CAL). Windows multi-session ne s'exécute en production que dans Azure Virtual Desktop.
| Image | Publisher | Offer | SKU (exemples) |
|---|---|---|---|
| Windows 11 Enterprise multi-session | MicrosoftWindowsDesktop |
windows-11 |
win11-24h2-avd, win11-25h2-avd |
| Windows 11 Enterprise multi-session + Microsoft 365 Apps | MicrosoftWindowsDesktop |
office-365 |
win11-24h2-avd-m365, win11-25h2-avd-m365 |
| Windows 11 Enterprise (personal) | MicrosoftWindowsDesktop |
windows-11 |
win11-24h2-ent, win11-25h2-ent |
| Windows 10 Enterprise multi-session | MicrosoftWindowsDesktop |
windows-10 |
win10-22h2-avd |
Ce que Microsoft garantit pour ces images :
- FSLogix est préinstallé sur toutes les images Windows Enterprise multi-session (il reste à le configurer, voir chapitre 02).
- Les images sont mises à jour chaque mois après la publication des correctifs de sécurité ; les images avec Microsoft 365 Apps arrivent vers le milieu de la 3e semaine du mois. Les applications préinstallées sont dans la version disponible le 2e mardi du mois.
2.2 Trouver la bonne image#
# SKU multi-session de Windows 11 (lecture seule)
Get-AzVMImageSku -Location francecentral -PublisherName MicrosoftWindowsDesktop -Offer windows-11 |
Where-Object Skus -like '*avd*'
# Même recherche en Azure CLI
az vm image list-skus --location francecentral --publisher MicrosoftWindowsDesktop --offer office-365 --output table
Les images Windows 11 sont Gen2 : toute la chaîne (image definition, build VM, taille des session hosts) doit être Gen2.
3. Créer une image manuellement#

3.1 Préparer la VM de référence#
- Déployer une VM depuis l'image Marketplace voulue (multi-session pour un pool pooled, Enterprise pour un pool personal), sans cocher Login with Microsoft Entra ID : l'extension ajoutée gênerait la généralisation.
- Ne pas la joindre au domaine ni au host pool : pas d'agent Azure Virtual Desktop, pas de jeton d'inscription (il expire et chaque session host doit s'inscrire avec le sien au déploiement).
- Prendre un snapshot du disque OS avant toute personnalisation : c'est le point de retour si une installation échoue.
3.2 Personnaliser#
- Applications : Microsoft 365 Apps (si l'image ne les contient pas), applications métier, agents de sécurité.
- Langues : language packs, langue d'affichage par défaut ; à installer avant les mises à jour cumulatives.
- Réglages AVD recommandés par Microsoft Learn pour une image :
- redirection du fuseau horaire (
fEnableTimeZoneRedirection) ; - désactivation de Storage Sense (elle peut supprimer des fichiers du profil FSLogix) ;
- désactivation des mises à jour automatiques dans l'image (
NoAutoUpdate), si elles sont gérées par reconstruction de l'image ; - exclusions antivirus FSLogix (liste complète au chapitre 02).
- redirection du fuseau horaire (
- Optimisations : le Virtual Desktop Optimization Tool (VDOT, scripts PowerShell open source du dépôt GitHub
The-Virtual-Desktop-Team/Virtual-Desktop-Optimization-Tool, cité par Optimizing Windows configuration for VDI desktops et par le tutoriel Image Builder pour AVD) retire applications UWP, services et tâches inutiles en VDI, à partir de fichiers JSON que l'on édite pour garder ce qui sert. Exemples fournis « pour illustration et test » : tester chaque réglage avant la production. - Mises à jour : appliquer les derniers correctifs Windows et applicatifs.
- Interdit : Unified Write Filter (non pris en charge), jonction au domaine laissée active.
Puis un snapshot final : c'est lui qui servira de point de départ à la prochaine version de l'image.
3.3 Généraliser avec Sysprep#
Avant Sysprep : retirer la VM du domaine si elle y a été jointe, désactiver temporairement l'antivirus, nettoyer les fichiers temporaires et les profils de test.
# Dans la VM, en administrateur : généralise et arrête la VM
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /mode:vm
| Option | Rôle |
|---|---|
/generalize |
Retire les informations propres à la machine (SID, nom, pilotes) |
/oobe |
Démarrage suivant sur l'écran d'accueil (OOBE), où Azure injecte nom et compte |
/shutdown |
Arrête la VM à la fin (indispensable avant la capture) |
/mode:vm |
Généralisation rapide propre aux VM (le matériel virtuel ne change pas) |
Une VM généralisée ne redémarre plus utilement : elle ne sert qu'à la capture.
3.4 Capturer dans Azure Compute Gallery#
Portail : sur la VM arrêtée, Capture → Share image to Azure compute gallery : oui → gallery, image definition (ou en créer une), numéro de version, régions et réplicas. Option managed image possible mais déconseillée.
# VM désallouée puis marquée généralisée, ensuite version d'image (abonnement de test)
az vm deallocate --resource-group rg-avd-build --name vm-golden
az vm generalize --resource-group rg-avd-build --name vm-golden
az sig image-version create --resource-group rg-avd-images --gallery-name gal_avd_prd \
--gallery-image-definition win11-avd-m365 --gallery-image-version 1.0.0 \
--virtual-machine "$(az vm show -g rg-avd-build -n vm-golden --query id -o tsv)" \
--target-regions "francecentral=3=standard_zrs" "westeurope=2"
Règles documentées après la capture : supprimer la VM capturée, ne jamais capturer deux fois la même VM, ne jamais capturer un session host existant (agent et inscription inclus), et repartir du snapshot final pour la version suivante.
4. Créer une image avec Azure VM Image Builder#
4.1 Custom image templates et Image Builder#
Le menu Azure Virtual Desktop > Custom image templates est une interface AVD au-dessus d'Azure VM Image Builder, lui-même
bâti sur HashiCorp Packer. Le template est une ressource Azure (Microsoft.VirtualMachineImages/imageTemplates) qui décrit :
une source, des customizations exécutées dans l'ordre et une ou plusieurs destinations. Image Builder lance une build
VM temporaire, exécute les scripts, fait lui-même le Sysprep, puis distribue l'image.

Ce qui se passe à la création et au build :
- un staging resource group
IT_{RG}_{template}_{GUID}est créé : storage account (conteneursshell,packerlogs,vhds), puis, pendant le build, build VM, disque, carte réseau ; - sans VNet existant : IP publique et NSG temporaires (WinRM vers la build VM) ; avec un VNet existant : Private Link, sans IP publique ;
- à la fin, tout est supprimé sauf le staging RG et son storage account ; supprimer le template les nettoie (supprimer le RG à la main laisse le template en erreur) ;
- le template est immuable : on ne le modifie pas, on en crée un nouveau.
4.2 Prérequis#
| Prérequis | Détail |
|---|---|
| Resource providers | Microsoft.DesktopVirtualization, Microsoft.VirtualMachineImages, Microsoft.Storage, Microsoft.Compute, Microsoft.Network, Microsoft.KeyVault, Microsoft.ContainerInstance |
| Identité | Une user-assigned managed identity, attachée au template |
| Rôle de l'identité | Rôle personnalisé sur le RG de l'image : Microsoft.Compute/galleries/read, …/galleries/images/read, …/galleries/images/versions/read, …/galleries/images/versions/write, Microsoft.Compute/images/write, …/images/read, …/images/delete (plus les droits réseau si VNet existant) |
| Image definition | Créée avant le build, même génération (Gen1/Gen2) que la source ; Image Builder crée la version, pas vous |
| Scripts personnels | URI publique, ou blob d'un storage account avec Storage Blob Data Reader pour l'identité |
| VNet existant (option) | Private service policy désactivée sur le subnet, sortie Internet disponible pour les téléchargements |
# Image definition Gen2 compatible Trusted Launch (abonnement de test)
az sig create --resource-group rg-avd-images --gallery-name gal_avd_prd
az sig image-definition create --resource-group rg-avd-images --gallery-name gal_avd_prd \
--gallery-image-definition win11-avd-m365 --publisher Contoso --offer avd --sku win11-m365 \
--os-type Windows --os-state Generalized --hyper-v-generation V2 \
--features SecurityType=TrustedLaunchSupported
4.3 Créer un custom image template dans le portail#
Azure Virtual Desktop > Custom image templates > + Add custom image template, puis les onglets :
| Onglet | Ce qu'on y règle |
|---|---|
| Basics | Nom, RG, région, managed identity du template ; possibilité de repartir d'un template existant |
| Source image | Image Marketplace, Azure Compute Gallery (version) ou managed image |
| Distribution targets | Managed image et/ou Azure Compute Gallery : image definition, version, replicated regions, Excluded from latest, type de stockage (Standard_LRS, Standard_ZRS, Premium_LRS) |
| Build properties | Build timeout, Build VM size (même génération que la source), OS disk size, Staging group, Build VM managed identity, VNet et subnet |
| Customizations | Built-in scripts et scripts personnels, ordre modifiable (Move up / Move down) |
| Tags | Tag ajouté par défaut : AVD_IMAGE_TEMPLATE : AVD_IMAGE_TEMPLATE |
Le template créé, il faut Start build, puis suivre la colonne Build run state.
4.4 Les customizations#

Built-in scripts proposés par le portail AVD : installation de language packs et langue par défaut, time zone redirection, désactivation de Storage Sense, installation et configuration de FSLogix (Profile Container, ou avec Kerberos), RDP Shortpath pour les réseaux managés, screen capture protection, Teams optimizations (WebRTC redirector et Visual C++), session timeouts, désactivation des mises à jour automatiques MSIX, ajout ou retrait d'applications Office, Windows Updates.
Customizers d'Image Builder pour vos propres étapes :
| Customizer | Usage | Propriétés utiles |
|---|---|---|
PowerShell |
Script ou commandes inline | scriptUri ou inline, runElevated, runAsSystem, sha256Checksum, validExitCodes |
File |
Copier un fichier dans la VM | sourceUri, destination |
WindowsRestart |
Redémarrer entre deux installations | restartCommand, restartTimeout (5 min par défaut) |
WindowsUpdate |
Installer les mises à jour Windows | searchCriteria, filters, updateLimit (1 000 par défaut) |
Règles des scripts : ils doivent sortir en code 0 (sinon le build échoue), écrire leur trace avec Write-Host (visible dans
le log), et ne pas relancer Sysprep. La suppression d'applications du Microsoft Store n'est pas prise en charge par les
custom image templates.
4.5 Image Builder en direct : template JSON, CLI et PowerShell#
Pour l'automatisation (pipeline, IaC), on écrit le template soi-même :
{
"type": "Microsoft.VirtualMachineImages/imageTemplates",
"apiVersion": "2025-10-01",
"name": "it-avd-win11-m365",
"location": "francecentral",
"identity": { "type": "UserAssigned", "userAssignedIdentities": { "{resource ID de l'identité}": {} } },
"properties": {
"buildTimeoutInMinutes": 240,
"vmProfile": { "vmSize": "Standard_D4s_v5", "osDiskSizeGB": 127 },
"source": {
"type": "PlatformImage", "publisher": "MicrosoftWindowsDesktop",
"offer": "office-365", "sku": "win11-24h2-avd-m365", "version": "latest"
},
"customize": [
{ "type": "PowerShell", "name": "apps-metier", "scriptUri": "https://{stockage}/scripts/install-apps.ps1",
"runElevated": true, "runAsSystem": true },
{ "type": "WindowsRestart", "restartTimeout": "10m" },
{ "type": "WindowsUpdate", "searchCriteria": "IsInstalled=0",
"filters": [ "exclude:$_.Title -like '*Preview*'", "include:$true" ], "updateLimit": 40 }
],
"distribute": [
{ "type": "SharedImage", "runOutputName": "win11-avd-m365",
"galleryImageId": "/subscriptions/{sub}/resourceGroups/rg-avd-images/providers/Microsoft.Compute/galleries/gal_avd_prd/images/win11-avd-m365",
"targetRegions": [
{ "name": "francecentral", "replicaCount": 3, "storageAccountType": "Standard_ZRS" },
{ "name": "westeurope", "replicaCount": 2 }
] }
]
}
}
| Propriété | À savoir |
|---|---|
buildTimeoutInMinutes |
240 par défaut (4 h), 6 minimum, 960 maximum (16 h) |
vmProfile.vmSize |
Par défaut Standard_D1_v2 (Gen1) ou Standard_D2ds_v4 (Gen2) ; pour Windows, Standard_D2_v2 ou plus |
distribute |
ManagedImage, SharedImage (gallery) ou VHD ; replicationRegions est déprécié au profit de targetRegions |
targetRegions |
name, replicaCount (1 par défaut), storageAccountType |
versioning |
Numérotation automatique des versions (Latest avec un major fixé, ou Source) |
vmProfile.vnetConfig.subnetId |
Build dans votre VNet, sans IP publique |
stagingResourceGroup |
Nommer soi-même le staging RG (vide, créé à l'avance) |
optimize.vmBoot |
Optimisation du démarrage des VM créées depuis l'image |
validate |
Scripts de validation après les customizations |
Lancer le build (abonnement de test) :
az image builder create --resource-group rg-avd-images --name it-avd-win11-m365 --image-template it-avd-win11-m365.json
az image builder run --resource-group rg-avd-images --name it-avd-win11-m365 --no-wait
az image builder show --resource-group rg-avd-images --name it-avd-win11-m365 --query lastRunStatus
Start-AzImageBuilderTemplate -ResourceGroupName rg-avd-images -Name it-avd-win11-m365 -NoWait
Get-AzImageBuilderTemplate -ResourceGroupName rg-avd-images -Name it-avd-win11-m365 |
Select-Object LastRunStatusRunState, LastRunStatusMessage
# Nettoyage : supprimer le template supprime aussi le staging RG
Remove-AzImageBuilderTemplate -ResourceGroupName rg-avd-images -Name it-avd-win11-m365
4.6 Réseau, isolated builds et coûts#
- Isolated image builds : Image Builder exécute une partie de son travail dans des Azure Container Instances de votre
abonnement (d'où le provider
Microsoft.ContainerInstanceet le quota ACI) ;containerInstanceSubnetIdles place dans votre VNet. - Les nouveaux VNet créent par défaut des subnets privés sans default outbound access (changement de mars 2026) : un subnet fourni à Image Builder doit avoir une sortie (NAT Gateway, pare-feu) si les scripts téléchargent des sources.
- Coûts : le service est gratuit ; on paie la build VM, le stockage, le réseau et les réplicas. L'Azure Hybrid Benefit ne s'applique pas à la build VM.
4.7 Dépanner un build#
| Symptôme | Cause et correction |
|---|---|
| Échec sur une étape PowerShell | Code de sortie non nul : corriger le script ou déclarer validExitCodes |
| Rien d'exploitable dans le portail | Lire customization.log dans le conteneur packerlogs du storage account du staging RG |
| Timeout | Augmenter buildTimeoutInMinutes (960 max) ou alléger (mises à jour déjà dans la source) |
| Erreur Sysprep sur une petite VM | Course avec l'agent invité : taille de build VM plus grande ou pause de 60 s en customization |
| Azure Container Instances provider not registered ou quota ACI | Enregistrer Microsoft.ContainerInstance, réduire les builds simultanés ou demander du quota |
| Accès refusé au script ou à la gallery | Rôle de l'identité incomplet (actions gallery, Storage Blob Data Reader) |
5. Stocker les images dans Azure Compute Gallery#

5.1 Gallery, image definition, image version#
| Niveau | Contenu | À retenir |
|---|---|---|
| Gallery | Conteneur de partage (RBAC, direct shared gallery, community gallery) | Une gallery de production séparée de celle de test |
| Image definition | Publisher, Offer, SKU (triplet unique dans la gallery), OS type, OS state, Hyper-V generation, security type, date de fin de vie (informative) | Génération, OS state et security type se choisissent à la création ; garder Publisher, Offer, SKU proches du Marketplace |
| Image version | Numéro Major.Minor.Patch, source (VM, disque, snapshot, autre version), régions cibles et réplicas |
La version « latest » est la plus haute non exclue |
excludeFromLatest (global) ou regionalExcludeFromLatest (par région, prioritaire) retire une version de « latest » : utile
pour une version en test. Une VM déployée en pointant l'image definition (sans version) prend la latest.
5.2 Génération, security type et OS state#

| Security type de l'image definition | VM qu'on peut en créer |
|---|---|
TrustedLaunchSupported |
VM Gen2 standard ou Trusted Launch (le plus souple pour AVD) |
TrustedLaunch |
Uniquement des VM Trusted Launch |
ConfidentialVMSupported, ConfidentialVM, TrustedLaunchAndConfidentialVmSupported |
Confidential VMs (rare en AVD) |
Generalized (Sysprep, nom et compte fixés à la création de la VM) est le seul choix sensé pour un pool ; specialized (sans Sysprep, démarrage plus rapide, même nom d'ordinateur que la source, pas de profil OS) ne convient pas à des session hosts multiples.
5.3 Réplication, réplicas et stockage#
- La région source fait obligatoirement partie des target regions.
- Réplicas : chaque réplica supporte environ 20 créations de VM simultanées ; Microsoft recommande au moins 3 réplicas en production, et au moins 2 pour le session host update. Le nombre se règle par région ou globalement.
- Stockage : Standard_LRS, Standard_ZRS (recommandé là où il existe, résiste à la perte d'une zone), Premium_LRS.
- Taille : image de moins de 2 To en réplication complète ; la shallow replication (
--replication-mode Shallow) va jusqu'à 32 To, mais elle ne copie pas l'image : réservée au test, elle ne tient pas beaucoup de VM créées en même temps. - Pas de réplication entre abonnements : on partage la gallery par RBAC (ou direct shared gallery) au lieu de copier.
5.4 Limites, partage et protection#
| Limite (par abonnement et par région) | Valeur |
|---|---|
| Galleries | 100 |
| Image definitions | 1 000 |
| Image versions | 10 000 |
| Réplicas par image version | 100 (relevée de 50 à 100 en janvier 2023 ; « 50 suffisent dans la plupart des cas ») ; la section bonnes pratiques de la même page dit encore « 50 au maximum par région » : à l'examen, retenir 100 par version et 1 réplica pour 20 VM créées en même temps |
Bonnes pratiques documentées : resource lock sur la gallery et les versions de production, galleries prod et test séparées, deux galleries dans deux régions pour la reprise après sinistre (une gallery est une ressource régionale), coût limité au stockage des réplicas (facturé comme des snapshots) et au transfert réseau de la première copie vers chaque région.
5.5 Managed image : l'héritage#
| Managed image | Azure Compute Gallery | |
|---|---|---|
| Versions | Aucune (une image = une ressource) | Major.Minor.Patch, latest, exclusion |
| Régions | Une seule | Réplication multi-région |
| Déploiements simultanés | 20 au maximum | ~20 par réplica, réplicas multiples |
| Trusted Launch, ARM64, Confidential VM | Non (impossible depuis une VM Trusted Launch) | Oui |
| Session host update | Possible | Recommandé (≥ 2 réplicas) |
6. Modifier une image#
Une image ne se modifie pas : on produit une nouvelle version et on garde l'ancienne pour le retour arrière.
| Méthode | Démarche |
|---|---|
| Image manuelle | Nouvelle VM depuis le snapshot final (ou depuis la dernière version de la gallery, puis la personnaliser), modifications, nouveau snapshot, Sysprep, capture en version suivante (ex. 1.0.2 → 1.0.3) |
| Custom image template | Template immuable : en créer un nouveau (ou repartir du précédent dans l'onglet Basics), changer source ou customizations, Start build vers la même image definition |
| Layering | Prendre la dernière version de la gallery comme source d'un template et n'y ajouter que les nouveautés (build plus court) ; le nombre de Sysprep successifs sur une même lignée Windows est limité, d'où une reconstruction régulière depuis le Marketplace |
Une nouvelle version ne touche pas les session hosts existants : il faut ensuite les remplacer (§ 8.2).
7. Cycle de vie des images#

7.1 Deux modèles de maintenance#
| Méthode (mises à jour mensuelles) | Windows Enterprise (personal) | Windows multi-session (pooled) | Windows Server |
|---|---|---|---|
| Windows Update / Windows Autopatch | Recommandé | Non recommandé | Supporté / non supporté |
| Configuration Manager | Supporté | Supporté | Supporté |
| Azure Update Manager, automatic guest patching | Non supporté | Non supporté | Recommandé |
| Session host update | Non supporté | Recommandé | Non recommandé |
| Nouvelle image dans Azure Compute Gallery | Non recommandé | Recommandé | Non recommandé |
Le patch en place convient aux VM qui durent (pool personal, Windows Server). Pour un pool multi-session, Microsoft recommande l'image-based servicing : on reconstruit l'image et on remplace les VM, ce qui supprime la dérive entre session hosts. Le hotpatch (sans redémarrage) existe sur Windows 11 Enterprise 24H2 et plus avec VBS, via Windows Autopatch et Intune.
7.2 Appliquer les mises à jour de l'OS et des applications#
Cycle mensuel conseillé :
- Après le Patch Tuesday (2e mardi), lancer le build : la source Marketplace en
latestapporte déjà les correctifs du mois ; la customization WindowsUpdate (ou le built-in script Windows Updates) complète. - Applications : les scripts installent la dernière version (Microsoft 365 Apps, Teams, applications métier) ; une application livrée par App Attach se met à jour hors de l'image (chapitre 07).
- Distribuer une version avec excludeFromLatest et la tester sur un host pool de validation (validation environment).
- Validée : retirer l'exclusion (elle devient latest), puis session host update sur la production.
- Garder 1 ou 2 versions précédentes pour le retour arrière, supprimer les plus anciennes (coût de stockage).
# Rendre une version testée « latest » (abonnement de test)
az sig image-version update --resource-group rg-avd-images --gallery-name gal_avd_prd \
--gallery-image-definition win11-avd-m365 --gallery-image-version 1.0.3 \
--set publishingProfile.excludeFromLatest=false
7.3 Automatiser avec les triggers Image Builder#
Un trigger de type SourceImage relance le build dès que l'image source change (nouvelle image Marketplace, nouvelle
version de gallery). Conditions : source PlatformImage en latest ou version de gallery en latest, pas de version fixée en
destination, trigger dans la même région que le template, un seul trigger par template, 100 triggers par région et
abonnement, API Image Builder 2022-07-01 ou plus. Après plusieurs échecs consécutifs, les triggers se désactivent jusqu'au
prochain build manuel réussi. Statut : annoncés en preview dans les notes de version de l'API 2022-07-01 ; la page how-to
n'a plus de bandeau preview mais demande toujours d'enregistrer la fonctionnalité
(az feature register --namespace Microsoft.VirtualMachineImages --name Triggers), et les bonnes pratiques Image Builder
recommandent de les configurer.
az image builder trigger create --resource-group rg-avd-images --image-template-name it-avd-win11-m365 \
--name trg-source --kind SourceImage
Alternative courante : un pipeline planifié (Azure Pipelines, GitHub Actions) qui lance az image builder run chaque mois.
8. Créer des session hosts depuis une image personnalisée#
8.1 Portail, ARM et Bicep#
- Création du host pool ou ajout de session hosts : onglet Virtual Machines > Image > See all images > My Items > Shared Images (Azure Compute Gallery) ou My Images (managed images). Le Security type choisi (Trusted Launch) doit être compatible avec l'image definition.
- ARM / Bicep :
imageReference.idpointe soit une version précise (…/galleries/gal_avd_prd/images/win11-avd-m365/versions/1.0.3), soit l'image definition pour prendre la latest. Fixer la version rend les déploiements reproductibles. - La gallery dans un autre abonnement fonctionne pour un déploiement classique avec les droits RBAC de lecture, mais pas pour le session host update (§ 8.2).
- La création des session hosts est détaillée au chapitre 03.
8.2 Session host update#
Pour les host pools pooled créés avec une session host configuration, session host update remplace les session hosts par lots avec une nouvelle configuration : image, taille de VM, type de disque, security type, identifiants de jonction au domaine, inscription Intune, compte administrateur, script personnalisé.
flowchart LR
A[Nouvelle session host configuration<br>image 1.0.3] --> B[Planification<br>jusqu'à 2 semaines]
B --> C[Lot initial<br>un premier session host]
C --> D[Drain mode<br>message puis déconnexion]
D --> E[Suppression de la VM<br>recréation SessionHostName-DateTime]
E --> F{Lot réussi ?}
F -- oui --> G[Lots suivants]
F -- non --> H[Retour arrière automatique]
| Point | Règle documentée |
|---|---|
| Ordre | Un lot initial d'abord, puis le reste par lots (UpdateMaxVmsRemoved) |
| Utilisateurs | Drain mode, message, délai de déconnexion de 0 à 60 min |
| Noms | Les nouvelles VM s'appellent SessionHostName-DateTime ; les objets ordinateur AD sont repris |
| Concurrence | Une seule mise à jour à la fois par host pool, planifiable jusqu'à 2 semaines à l'avance |
| Échec | Retour arrière automatique |
| Limites | Azure global seulement ; gallery dans un autre abonnement non prise en charge ; taille du disque OS inchangeable ; purchase plan non conservé ; managed identity requise pour un Key Vault privé |
| Gallery | Au moins 2 réplicas recommandés |
# Module Az.DesktopVirtualization (préversion ≥ 5.3.0) ; abonnement de test
Update-AzWvdSessionHostConfiguration -ResourceGroupName rg-avd -HostPoolName hp-pooled -ImageInfoType Custom `
-CustomInfoResourceId "/subscriptions/{sub}/resourceGroups/rg-avd-images/providers/Microsoft.Compute/galleries/gal_avd_prd/images/win11-avd-m365/versions/1.0.3"
Update-AzWvdSessionHostManagement -ResourceGroupName rg-avd -HostPoolName hp-pooled -UpdateDeleteOriginalVM:$true `
-UpdateMaxVmsRemoved 2 -UpdateLogOffDelayMinute 15 -UpdateLogOffMessage "Maintenance : enregistrez votre travail"
Invoke-AzWvdInitiateSessionHostUpdate -ResourceGroupName rg-avd -HostPoolName hp-pooled # ou -ScheduledDateTime (2 semaines max)
Get-AzWvdSessionHostManagementsUpdateStatus -ResourceGroupName rg-avd -HostPoolName hp-pooled | Format-List PercentComplete, Status
# Pause, Resume, Cancel (-CancelMessage) ou Retry d'une mise à jour en cours
Invoke-AzWvdControlSessionHostUpdate -ResourceGroupName rg-avd -HostPoolName hp-pooled -Action Pause
UpdateDeleteOriginalVM = $true est recommandé (pas de nettoyage manuel après la mise à jour). Prérequis : session hosts tous
dans la même région et le même resource group, image de même génération (Gen2 pour Trusted Launch), aucun resource lock sur les
session hosts ou leur resource group.
Pour un host pool sans session host configuration (ou personal) : déployer de nouveaux session hosts depuis la nouvelle version, passer les anciens en drain mode, puis les supprimer (VM, disques et inscription dans le host pool).
9. Bonnes pratiques#
- Une image par usage (image definition distincte pour PRD, test, poste développeur), pas une image unique « qui fait tout ».
- Jamais de jonction au domaine ni d'agent AVD dans l'image : la jonction et l'inscription se font au déploiement.
- Tout scripter (custom image template ou IaC) pour reconstruire à l'identique ; snapshot avant et après en image manuelle.
- Gen2 + TrustedLaunchSupported pour les nouvelles images ; Azure Compute Gallery plutôt que managed image.
- Version de test avec excludeFromLatest, host pool de validation, puis production.
- 3 réplicas ZRS au moins en production, réplication dans la région de secours, resource locks.
- Garder l'image légère : applications à mise à jour fréquente via App Attach ou Intune ; FSLogix configuré par GPO ou Intune plutôt que figé.
- Langues installées avant les mises à jour cumulatives ; Storage Sense désactivé ; redirection du fuseau horaire.
10. Labs conseillés#
Abonnement de test, région unique, VM de petite taille. Coût indicatif : quelques euros par lab si tout est supprimé le jour même (build VM, disques, réplicas facturés à l'heure ou au Go).
- Image manuelle : VM Windows 11 multi-session
win11-24h2-avd(Gen2, Trusted Launch), snapshot, installer une application, Sysprep/generalize /oobe /shutdown /mode:vm, capture vers une gallery (image definitionTrustedLaunchSupported). Attendu : version 1.0.0 visible, VM source inutilisable. Nettoyage : supprimer la VM et le snapshot. - Custom image template : prérequis du § 4.2 (providers, identité, rôle personnalisé), template avec les built-in scripts
Time zone redirection, Disable Storage Sense, Teams optimizations, distribution vers la gallery. Attendu : staging RG
IT_…créé, build réussi, version 1.0.1. Lirecustomization.log. Nettoyage : supprimer le template (le staging RG part avec). - Échec volontaire : ajouter un script inline
exit 1. Attendu : build en échec, cause danscustomization.log. - Latest et exclusion : version 1.1.0 avec Excluded from latest, déployer une VM depuis l'image definition. Attendu : la VM est en 1.0.1.
- Session host update : host pool pooled avec session host configuration (2 session hosts B-series), passer à la version
1.1.0. Attendu : lot initial, VM recréées
…-DateTime. Nettoyage : supprimer host pool, VM, gallery et RG.
11. Pièges d'examen#
| Situation | Réponse attendue | Pourquoi |
|---|---|---|
| Image capturée depuis une VM jointe au domaine | Retirer du domaine avant Sysprep | Jonction faite au déploiement de chaque session host |
| Agent AVD installé dans l'image | Non : l'inscription se fait au déploiement | Jeton d'inscription qui expire, identité de session host unique |
| Redémarrer la VM généralisée pour « une dernière modif » | Impossible : repartir du snapshot | Une VM généralisée ne sert qu'à la capture |
| Capturer un session host existant | Non | Agent et inscription inclus dans l'image |
| Managed image depuis une VM Trusted Launch | Impossible : Azure Compute Gallery | Limite des managed images |
| Plus de 20 VM à créer en même temps depuis une managed image | Azure Compute Gallery avec réplicas | 20 déploiements simultanés au maximum |
| Build Image Builder qui échoue sur un script | Code de sortie ≠ 0 ; lire customization.log (packerlogs) |
Scripts en exit 0 obligatoires |
| Build arrêté au bout de 4 h | buildTimeoutInMinutes (960 max) |
240 par défaut |
| Image Builder ne trouve pas l'image definition | La créer avant, même génération que la source | Image Builder crée la version, pas la définition |
| Faut-il lancer Sysprep dans un script Image Builder ? | Non | Image Builder généralise lui-même |
| Erreur « Azure Container Instances provider not registered » | Enregistrer Microsoft.ContainerInstance |
Isolated image builds |
| Build VM sans IP publique | Template avec VNet existant (subnetId) |
Private Link au lieu d'IP publique |
| Script privé dans un blob | Identité avec Storage Blob Data Reader | Image Builder lit le script avec l'identité |
Staging RG IT_… qui reste |
Supprimer le template | Il porte le cycle de vie du staging RG |
| Version de test à ne pas déployer par défaut | excludeFromLatest | latest = plus haute non exclue |
| Déploiement d'une image Gen1 sur une taille Gen2 seule | Échec : générations cohérentes | Hyper-V generation figée sur la définition |
| Copier une image vers un autre abonnement | Partager la gallery par RBAC | Pas de réplication inter-abonnements |
| Session host update refusé | Host pool personal, sans session host configuration, ou gallery d'un autre abonnement | Limites documentées |
| Patch mensuel d'un pool pooled multi-session | Nouvelle image + session host update | Méthode recommandée par Microsoft |
| Unified Write Filter dans l'image | Non pris en charge | Limite documentée |
12. Scénarios corrigés#
1. Un pool pooled de 200 session hosts doit recevoir chaque mois les correctifs Windows et une application métier, sans dérive entre VM.
Custom image template (source Marketplace en
latest, script de l'application, Windows Updates), distribution vers Azure Compute Gallery, test avec excludeFromLatest, puis session host update par lots.
2. Un administrateur a capturé une VM jointe au domaine avec l'agent AVD ; les session hosts créés ne s'inscrivent pas correctement.
Recréer l'image depuis le snapshot de départ : ni domaine ni agent dans l'image ; jonction et inscription au déploiement.
3. Le build Image Builder échoue après 4 h sur l'installation de mises à jour.
Augmenter
buildTimeoutInMinutes(jusqu'à 960), limiterupdateLimit, et partir d'une source Marketplace récente (déjà patchée).
4. La sécurité exige que la build VM n'ait jamais d'IP publique.
vmProfile.vnetConfig.subnetIdvers un subnet existant (Private Link), private service policy désactivée, sortie via NAT Gateway ou pare-feu ; identité avec les droits réseau.
5. 60 session hosts doivent être créés en même temps depuis une managed image ; le déploiement échoue.
Managed image limitée à 20 déploiements simultanés : passer à Azure Compute Gallery avec au moins 3 réplicas (20 VM par réplica).
6. L'entreprise veut des session hosts Trusted Launch avec une image personnalisée.
Image definition Gen2 en
TrustedLaunchSupported(ouTrustedLaunch), build VM Gen2, capture dans la gallery (pas de managed image depuis une VM Trusted Launch).
7. Une nouvelle version d'image doit être testée par 10 utilisateurs pilotes avant toute la production.
Version avec excludeFromLatest, déployée explicitement dans un host pool de validation ; une fois validée, retirer l'exclusion et lancer le session host update en production.
8. Une région Azure devient indisponible : il faut recréer le pool dans la région de secours.
Version répliquée dans la région de secours (target regions), idéalement seconde gallery dans cette région ; host pool de secours déployé depuis la version répliquée.
9. Les images sont dans l'abonnement « Images » et le host pool dans l'abonnement « AVD-PRD » ; le session host update échoue.
Le session host update ne prend pas en charge une gallery d'un autre abonnement : rapprocher la gallery (ou une copie de l'image definition) de l'abonnement du host pool, ou remplacer les VM à la main (drain, nouveaux session hosts).
10. L'équipe veut que l'image se reconstruise seule quand Microsoft publie une nouvelle image Marketplace.
Trigger
SourceImagesur le template (sourcelatest, pas de version fixée en destination) ; sinon pipeline planifié.
13. Pour aller plus loin#
- Azure Image Builder dans un pipeline : tâche Azure DevOps (préversion) ou
az image builderdans GitHub Actions avec fédération OIDC (AZ-400). - Bicep / AVM : module Azure Verified Modules
avm/ptn/virtual-machine-images/azure-image-builder(gallery, définition, template et build en un déploiement). - Validation :
validated'Image Builder pour des tests automatiques avant distribution. - Windows 365 et Microsoft Dev Box utilisent les mêmes images de gallery (exigences Gen2 / Trusted Launch proches).
- Hotpatch sur Windows 11 Enterprise 24H2 multi-session : moins de redémarrages entre deux images.
14. Fiche à retenir#
- Images Marketplace :
MicrosoftWindowsDesktop, offreswindows-11(win11-24h2-avd) etoffice-365(win11-24h2-avd-m365) ; FSLogix préinstallé ; mises à jour mensuelles. - Image manuelle : VM sans Login with Microsoft Entra ID, sans domaine ni agent AVD, snapshots avant/après, Sysprep
/generalize /oobe /shutdown /mode:vm, capture, suppression de la VM. - Custom image template = Azure VM Image Builder : source + customizations (dans l'ordre) + distribution ; Sysprep automatique ;
scripts en exit 0 ; staging RG
IT_…supprimé avec le template ; template immuable. - Prérequis : 7 resource providers (dont
VirtualMachineImagesetContainerInstance), user-assigned managed identity, rôle personnalisé, image definition existante de même génération. -
buildTimeoutInMinutes: 240 par défaut, 960 max ; build VM Standard_D2_v2 ou plus pour Windows ; pas d'Azure Hybrid Benefit. - Azure Compute Gallery : gallery → image definition (Publisher/Offer/SKU, Gen, security type, generalized) → version
Major.Minor.Patch; latest = plus haute non exclue. - Réplicas : 20 VM simultanées par réplica, 3 en production, ZRS ; région source dans les target regions ; pas de réplication inter-abonnements.
- Managed image : 20 déploiements, une région, pas de Trusted Launch.
- Pooled multi-session : image-based servicing + session host update (lot initial, drain, 0-60 min, 2 semaines, une mise à jour à la fois, retour arrière automatique).
- Modifier une image = nouvelle version ; garder la précédente pour le retour arrière.
Références#
Lues le 22/10/2026 :
- Study guide for Exam AZ-140
- Prerequisites for Azure Virtual Desktop
- Windows Enterprise multi-session FAQ
- Create a golden image in Azure
- Prepare and customize a VHD image for Azure Virtual Desktop
- Custom image templates in Azure Virtual Desktop
- Use custom image templates to create custom images
- Azure VM Image Builder overview
- Create an Azure Virtual Desktop image by using VM Image Builder and PowerShell
- Create a VM Image Builder Bicep or ARM template JSON
- Best practices for Azure VM Image Builder
- How to enable automatic image creation with Azure Image Builder triggers
- Troubleshoot Azure VM Image Builder
- What's new in Azure VM Image Builder
- Store and share images in an Azure Compute Gallery
- Image definitions and versions in Azure Compute Gallery
- Azure Compute Gallery best practices
- Trusted Launch for Azure virtual machines
- Create a legacy managed image of a generalized VM in Azure
- Windows update management methodologies for Azure Virtual Desktop session hosts
- Session host update
- Use session host update
- Create Azure Local VM image using Azure Marketplace images (table des SKU Windows 11)