WIKI
AZ-140 Azure Virtual Desktop

04 · Images des session hosts : image manuelle, Azure VM Image Builder, Azure Compute Gallery et cycle de vie

29 min de lecture Mis à jour le 22 octobre 2026
Sur cette page

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.

D'où vient l'image d'un session host, et où elle vit

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#

Image manuelle : préparer, généraliser, capturer, puis jeter la VM

3.1 Préparer la VM de référence#

  1. 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.
  2. 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).
  3. 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).
  • 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.

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.

Custom image template : Image Builder construit l'image dans votre abonnement

Ce qui se passe à la création et au build :

  • un staging resource group IT_{RG}_{template}_{GUID} est créé : storage account (conteneurs shell, 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#

Un template = une source, des customizations dans l'ordre, des destinations

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.ContainerInstance et le quota ACI) ; containerInstanceSubnetId les 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)

Azure Compute Gallery : gallery, image definition, versions, réplicas par région

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#

Génération, security type et OS state doivent concorder de bout en bout

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#

Mettre à jour un pool : reconstruire l'image plutôt que patcher les VM

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é :

  1. Après le Patch Tuesday (2e mardi), lancer le build : la source Marketplace en latest apporte déjà les correctifs du mois ; la customization WindowsUpdate (ou le built-in script Windows Updates) complète.
  2. 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).
  3. Distribuer une version avec excludeFromLatest et la tester sur un host pool de validation (validation environment).
  4. Validée : retirer l'exclusion (elle devient latest), puis session host update sur la production.
  5. 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.id pointe 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).

  1. 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 definition TrustedLaunchSupported). Attendu : version 1.0.0 visible, VM source inutilisable. Nettoyage : supprimer la VM et le snapshot.
  2. 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. Lire customization.log. Nettoyage : supprimer le template (le staging RG part avec).
  3. Échec volontaire : ajouter un script inline exit 1. Attendu : build en échec, cause dans customization.log.
  4. 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.
  5. 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), limiter updateLimit, 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.subnetId vers 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 (ou TrustedLaunch), 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 SourceImage sur le template (source latest, 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 builder dans 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 : validate d'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, offres windows-11 (win11-24h2-avd) et office-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 VirtualMachineImages et ContainerInstance), 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 :

Sur cette page
Échap

Tape au moins 2 lettres. Plusieurs mots : tous doivent apparaître.