Version : 1.1 · Date : 2026-10-22 · Domaine 1 de l'examen : Plan and implement an Azure Virtual Desktop infrastructure (40 à 45 %)
En une phrase : un host pool regroupe des VM identiques (les session hosts) ; des application groups publient un bureau ou des applications de ce host pool ; un workspace les présente aux utilisateurs. Tout le reste (pooled ou personal, load balancing, taille des VM, licences, IaC) consiste à choisir les bons réglages de ces quatre objets.

Ce que l'examen demande#
Repris mot pour mot du guide d'étude AZ-140 (compétences mesurées au 20 juillet 2026), blocs Plan host pools and session hosts et Implement host pools and session hosts :
| # | Compétence mesurée (guide officiel, en anglais) | Section de ce chapitre |
|---|---|---|
| 1 | Recommend resource groups, subscriptions, and management groups for Azure Virtual Desktop resources | 2 |
| 2 | Recommend an operating system (OS) for Azure Virtual Desktop session hosts | 3 |
| 3 | Recommend an appropriate licensing model for Azure Virtual Desktop based on requirements | 6 |
| 4 | Plan a host pool architecture | 4 |
| 5 | Design an Azure Virtual Desktop configuration for performance requirements | 5 |
| 6 | Design an Azure Virtual Desktop configuration for Azure Virtual Machines capacity requirements | 5.4 |
| 7 | Create host pools and session hosts by using the Azure portal | 7 |
| 8 | Automate creation of Azure Virtual Desktop hosts and host pools by using PowerShell, Azure CLI, Azure Resource Manager templates (ARM templates), and Bicep files | 8 |
| 9 | Configure host pool and session host settings | 9 |
| 10 | Configure licensing for session hosts, including user eligibility for Windows client access and RDS Client Access License (CAL) requirements for Windows Server | 6.3 |
Ce chapitre s'appuie sur le chapitre 01 (réseau, service AVD) et renvoie au chapitre 02 (FSLogix), au chapitre 04 (images), au chapitre 05 (jonction au domaine, RBAC), au chapitre 06 (RDP properties), au chapitre 07 (RemoteApp, App Attach) et au chapitre 08 (autoscale, supervision, mises à jour).
1. Les objets Azure Virtual Desktop et leurs liens#
1.1 Quatre objets, une chaîne#
| Objet | Rôle | Ce qu'il faut savoir |
|---|---|---|
| Host pool | Collection de VM enregistrées dans AVD comme session hosts | Toutes les VM d'un host pool viennent de la même image et ont la même configuration (taille, jonction au domaine). Type Pooled ou Personal |
| Session host | Une VM Windows avec l'agent AVD, rattachée à un seul host pool | VM Azure, VM sur Azure Local, ou VM dans une Azure Extended Zone ; jamais de mélange Azure et Azure Local dans un host pool |
| Application group | Publie ce que les utilisateurs obtiennent : un bureau complet (Desktop) ou des applications (RemoteApp) | Lié à un seul host pool ; les utilisateurs et groupes Entra ID sont assignés à l'application group (rôle Desktop Virtualization User) |
| Workspace | Regroupe des application groups ; c'est le feed que voit l'utilisateur dans Windows App | Un application group n'est enregistré que dans un seul workspace ; un workspace peut contenir des application groups de plusieurs host pools |
Les host pools, application groups et workspaces sont des service objects (metadata) : ils vivent dans une région Azure (celle choisie à la création) et sont indépendants de la région des VM.
1.2 Les règles des application groups (très demandées)#
- Desktop : disponible pour les host pools pooled et personal ; un seul Desktop application group par host pool. Le portail le crée automatiquement avec le host pool.
- RemoteApp : pooled uniquement ; plusieurs RemoteApp application groups possibles sur un même host pool. Un utilisateur assigné à plusieurs RemoteApp application groups du même host pool voit l'union des applications.
- Preferred app group type (réglage du host pool : Desktop, RemoteApp) : si un utilisateur est assigné à la fois au Desktop et à un RemoteApp application group du même host pool, il ne voit que le type préféré. Pour lui donner les deux, il faut deux host pools.
- Une session peut être active, disconnected ou pending ; une reconnexion revient toujours à la session existante.
À retenir : donner l'accès = assigner l'utilisateur ou le groupe à l'application group, et enregistrer cet application group dans un workspace. Sans workspace, l'utilisateur ne voit rien ; sans assignation non plus.
1.3 Les limites du service à connaître#
| Objet | Limite |
|---|---|
| Workspaces par tenant Entra ID | 1 300 |
| Host pools par workspace | 400 |
| Application groups par tenant | 1 000 (plus sur demande au support) |
| RemoteApps par application group | 500 |
| Role assignments par objet AVD | 200 |
| Session hosts par host pool | 10 000 |
2. Organiser les ressources : management groups, abonnements, resource groups#
Le Cloud Adoption Framework (scénario AVD) et l'AVD landing zone accelerator donnent le modèle de référence. La page CAF
dédiée à AVD est marquée comme dépréciée (retrait annoncé le 30/10/2026) : la suite est dans l'accélérateur
(github.com/Azure/avdaccelerator) et le guide de conception de l'Architecture Center ; les principes ne changent pas.

2.1 Management groups et abonnements#
| Niveau | Recommandation | Pourquoi |
|---|---|---|
| Management groups | AVD se place sous Landing zones (comme toute charge applicative) ; la plateforme (connectivité, identité, supervision) sous Platform | Les Azure Policy et le RBAC s'héritent ; pas de management group par environnement (dev, test, prod) |
| Abonnement AVD | Un abonnement landing zone AVD pour les host pools, VM, réseau spoke, stockage des profils | Isoler quotas, coûts et droits ; plusieurs abonnements AVD quand les quotas de VM ou l'organisation l'imposent |
| Abonnement de services partagés | Images (Azure Compute Gallery), Key Vault de déploiement, outils communs | Réutilisés par plusieurs host pools ou régions |
| Abonnements Platform | Connectivity (hub, pare-feu, DNS), Identity (AD DS, Entra Domain Services), Management (Log Analytics) | Le spoke AVD se raccorde au hub par peering (voir chapitre 01) |
Pour un public externe (clients d'une offre SaaS) : Microsoft recommande un tenant et un abonnement séparés pour les utilisateurs d'organisations différentes ; un abonnement séparé est aussi la bonne pratique avec le per-user access pricing (section 6).
2.2 Resource groups par rôle#
| Resource group | Contenu | Pourquoi le séparer |
|---|---|---|
| Service objects | Workspaces, host pools, application groups, scaling plans | Cycle de vie et droits différents des VM ; rôles Desktop Virtualization … à ce niveau |
| Compute | VM, disques, NIC des session hosts | Recréés à chaque mise à jour d'image ; Virtual Machine Contributor pour l'équipe qui déploie |
| Network | VNet spoke, NSG, route tables | Géré par l'équipe réseau, stable |
| Storage | Azure Files ou Azure NetApp Files (FSLogix, App Attach) | Données utilisateurs à protéger (sauvegarde, verrou) |
| Shared | Images, Key Vault | Partagés entre host pools |
Bonne pratique complémentaire : des tags (centre de coût, host pool, environnement) sur toutes les ressources, pour suivre les coûts dans Cost Management (section 10).
3. Choisir le système d'exploitation des session hosts#
3.1 Les OS pris en charge (64 bits uniquement)#
| OS | Pooled | Personal | Licence (usage interne) |
|---|---|---|---|
| Windows 11 Enterprise multi-session | Recommandé | Non pris en charge (doc de mise à jour) | Licence Windows par utilisateur (section 6) |
| Windows 11 Enterprise (single-session) | Possible avec max session limit = 1, déconseillé | Recommandé | Licence Windows par utilisateur |
| Windows 10 Enterprise (multi-session) | Possible | Possible | Fin de support le 14/10/2025 ; ESU inclus sans coût sur AVD |
| Windows Server 2016, 2019, 2022, 2025 | Possible (rôle RD Session Host) | Possible | RDS CAL avec Software Assurance ou RDS User Subscription License |
Non pris en charge pour les session hosts : OS 32 bits ; éditions N, KN, LTSC ; Ultra disks pour le disque OS ; ephemeral OS disks ; Virtual Machine Scale Sets ; VM Arm64.
Windows Enterprise multi-session est un OS client qui accepte plusieurs sessions interactives simultanées : il n'existe que sur Azure Virtual Desktop (et Azure Local). Il offre l'expérience Windows 11 (Microsoft 365 Apps, Teams, Store) avec la densité d'un serveur RDS.
3.2 La recommandation, cas par cas#
| Situation | OS conseillé | Pourquoi |
|---|---|---|
| Bureaux partagés pour des employés de la même organisation | Windows 11 Enterprise multi-session, pooled | Coût par utilisateur le plus bas, expérience Windows 11, licence souvent déjà incluse dans Microsoft 365 |
| Développeurs, administrateurs, applications qui exigent des droits locaux | Windows 11 Enterprise, personal | Isolation, droits d'administration sur sa VM |
| Application certifiée uniquement sur Windows Server, ou RDS CAL déjà achetées | Windows Server 2022 ou 2025 | Compatibilité, réutilisation des licences existantes |
| Clients externes (offre SaaS) | Windows 11 Enterprise (multi-session) + per-user access pricing | Le per-user access pricing n'existe pas pour Windows Server |
| Utilisateurs d'organisations concurrentes | Pas de multi-session partagé : tenant et abonnement séparés | Une seule faille suffirait à exposer les données d'un autre client |
| Données très sensibles en mémoire | Confidential VMs (Windows 11 / 10 Enterprise multi-session, Windows Server 2022 / 2019) | Mémoire chiffrée, racine de confiance matérielle |
Points techniques à connaître :
- Windows 11 exige Trusted launch (ou confidential VM) : c'est le security type par défaut quand on crée des session hosts depuis le portail.
- Pas de mise à niveau sur place d'un OS (Windows 10 vers 11, Server 2022 vers 2025) : on redéploie depuis une nouvelle image (chapitre 04).
- Windows Server : installer le rôle RD Session Host (
Install-WindowsFeature -Name RDS-RD-Server -Restart) avant d'installer l'agent AVD quand on enregistre la VM à la main. - Mises à jour mensuelles : sur multi-session, Microsoft recommande l'image (Azure Compute Gallery, session host update) plutôt que Windows Update en place ; sur Windows Server, Azure Update Manager ; sur personal, Windows Update ou Windows Autopatch.
- Azure Virtual Desktop Hybrid (session hosts sur site gérés par vous) ne prend pas en charge le multi-session, l'autoscale, Start VM on Connect ni la session host configuration.
4. L'architecture du host pool#
4.1 Pooled ou personal#

| Critère | Pooled | Personal |
|---|---|---|
| Utilisateurs par VM | Plusieurs (multi-session), répartis par le load balancing | Un utilisateur attitré par VM |
| Données et profil | Profil dans FSLogix (chapitre 02), VM interchangeables | Restent sur la VM (FSLogix possible mais pas indispensable) |
| Mises à jour | Redéploiement depuis une nouvelle image | Mises à jour en place (Windows Update, Configuration Manager) |
| Application groups | Desktop et RemoteApp | Desktop uniquement |
| Coût | Le plus bas (VM partagées, autoscale efficace) | Plus élevé : une VM par utilisateur, même éteinte le disque est facturé |
| Cas typiques | Employés de bureau, centres d'appels, applications métier publiées | Développeurs, droits d'administration, applications non compatibles multi-session |
Le type du host pool (Pooled ou Personal) se choisit à la création et ne se change pas (en Terraform, le modifier recrée la ressource).
4.2 Personal : assignation automatique ou directe#
| Assignment type | Comportement | Quand |
|---|---|---|
| Automatic | À sa première connexion, l'utilisateur reçoit une VM libre du host pool, qui lui reste ensuite attribuée | Parc homogène, peu d'administration |
| Direct | L'administrateur attribue une VM précise à l'utilisateur (portail, Update-AzWvdSessionHost -AssignedUser) |
VM préparée pour quelqu'un, contraintes de matériel ou de logiciel |
- Plusieurs bureaux personnels pour un même utilisateur (Assign multiple desktops to a single user) : seulement avec
l'assignation Direct, coché à la création du host pool (load balancer type
MultiplePersistentau lieu dePersistent). L'utilisateur voit chaque bureau séparément dans son feed. - Une VM personal attribuée peut être désassignée ou réattribuée (portail ou PowerShell), par exemple au départ d'un employé.
4.3 Load balancing (pooled)#

| Algorithme | Fonctionnement | Avantage | Exige |
|---|---|---|---|
| Breadth-first | Choisit au hasard parmi la moitié des session hosts disponibles qui ont le moins de sessions | Meilleure expérience : charge étalée | Rien de particulier |
| Depth-first | Choisit le session host qui a le plus de sessions sans dépasser la max session limit | Moins de VM allumées : idéal avec l'autoscale et Start VM on Connect | Une max session limit réaliste |
- Max session limit : nombre maximum de sessions par session host ; valeur par défaut et maximum 999 999. Avec depth-first, garder 999 999 revient à tout envoyer sur la même VM : Azure Advisor recommande de la régler.
- La limite peut être dépassée ponctuellement en cas de forte charge simultanée ; la baisser ne déconnecte pas les sessions existantes.
- Seuls les session hosts Available et non drainés reçoivent de nouvelles sessions ; une reconnexion revient toujours au session host qui porte la session, même en drain mode.
- Personal : le load balancer type est
Persistent(ouMultiplePersistent) ; pas de max session limit.
4.4 Deux approches de gestion : standard ou session host configuration#

| Standard | Session host configuration (management type Automated) | |
|---|---|---|
| Types de host pool | Pooled et personal | Pooled uniquement |
| Emplacements | Azure, Azure Local, Azure Extended Zones | Azure seulement (pas Azure Local) |
| Création des VM | Par vous : portail, ARM / Bicep, Terraform, scripts ; registration key | Par le service, d'après la session host configuration ; pas de registration key à gérer |
| Mises à jour d'image | Vos outils (redéploiement) | Session host update remplace les VM selon la session host management policy |
| Autoscale | Scaling plan : allume et éteint des VM existantes | Peut aussi créer et supprimer des VM (autoscale dynamique) |
| VM ajoutées hors du service | Oui | Non : PowerShell ne peut pas ajouter de session host à ce type de host pool |
| Changer d'approche | Le management type ne change pas après la création du host pool | idem |
La session host configuration décrit les VM : image (Marketplace ou Azure Compute Gallery), taille, préfixe de nom (10 caractères maximum, 15 avec le suffixe), resource group, disque OS, jonction au domaine (identifiants dans Key Vault), réseau, région et zones, security type, boot diagnostics, script personnalisé, tags. La session host management policy règle les mises à jour : fuseau horaire (UTC par défaut), nombre de VM retirées à la fois (1), délai de déconnexion (2 minutes, de 0 à 60), message aux utilisateurs, maintien en drain mode, nettoyage des VM en échec (KeepAll par défaut).
Avec une managed identity (system ou user-assigned) sur le host pool, il faut lui donner Desktop Virtualization Virtual Machine Contributor et Key Vault Secrets User sur les secrets d'identifiants. La création peut aller jusqu'à 500 VM d'un coup (selon les quotas).
Statut au 22/10/2026 : les pages Deploy Azure Virtual Desktop (mise à jour du 30/09/2026) et Host pool management approaches ne marquent plus la session host configuration comme préversion, et l'exigence d'un validation environment a disparu. Restent en préversion : les cmdlets PowerShell de ce type de host pool (module Az.DesktopVirtualization en version preview, 5.3.0 ou plus) et, selon sa page de dépannage, session host update. Région exclue : West US 3.
flowchart TD
A["Les utilisateurs ont-ils besoin<br/>d'une VM attitrée ?"] -->|Oui| P["Personal<br/>Windows 11 Enterprise"]
A -->|Non| B["Pooled<br/>Windows 11 Enterprise multi-session"]
P --> P1{"VM précise ou<br/>plusieurs bureaux ?"}
P1 -->|Oui| P2["Assignment type Direct"]
P1 -->|Non| P3["Assignment type Automatic"]
B --> C{"Session hosts sur Azure<br/>et cycle de vie délégué ?"}
C -->|Oui| D["Session host configuration<br/>management type Automated"]
C -->|"Non : Azure Local, VM existantes"| E["Standard<br/>registration key"]
D --> F["Breadth-first ou depth-first<br/>+ max session limit"]
E --> F
4.5 Validation environment#
Un host pool marqué validation environment reçoit les mises à jour du service AVD avant les autres : on y détecte une
régression avant qu'elle touche la production. Il doit ressembler à la production (même image, mêmes applications) et être
utilisé régulièrement (vrais utilisateurs ou tests automatisés). Le réglage se change à tout moment (Properties >
Validation environment, validate_environment en Terraform, validationEnvironment en Bicep).
4.6 Deployment scope et emplacements particuliers#
| Option | Ce qu'il faut savoir |
|---|---|
| Deployment scope : Geographical ou Regional (regional host pools, préversion) | Un host pool Regional garde ses metadata dans une région précise (préversion dans quelques régions, dont East US 2 et Central US). Le scope ne change pas après création ; les objets de scopes différents ne s'associent pas (application group et workspace héritent du scope du host pool) |
| Azure Local (ex-Azure Stack HCI, version 23H2 minimum, enregistré dans Azure) | Session hosts sur site ; activation des VM par Azure verification for VMs (Windows Enterprise multi-session, Windows Server 2022 Datacenter: Azure Edition) ; Azure Connected Machine agent installé ; rôle Azure Stack HCI VM Contributor ; host pool standard uniquement |
| Azure Extended Zones | Abonnement à enregistrer sur la zone (propriétaire de l'abonnement) ; seules les VM vont dans la zone, les metadata restent dans la région parente ; pas d'accès sortant par défaut ni de NAT Gateway : un Azure Load Balancer avec règles sortantes ; moins de tailles de VM ; RDP Shortpath réduit la latence |
5. Dimensionner : performance et capacité#

5.1 Les repères Microsoft pour le multi-session#
| Charge | Exemple d'utilisateur | Utilisateurs max par vCPU | VM minimale |
|---|---|---|---|
| Light | Tâches simples : saisie, navigateur léger | 6 | 8 vCPU, 16 Go de RAM, 32 Go de disque (ex. D8s_v5) |
| Medium | Bureautique, navigation, e-mail | 4 | 8 vCPU, 16 Go, 32 Go |
| Heavy | Applications lourdes, développement léger | 2 | 8 vCPU, 16 Go, 32 Go |
| Power | CAO, graphisme, calcul | 1 | 6 vCPU, 56 Go, 340 Go (série NV, GPU) |
Règles qui accompagnent ces repères :
- Multi-session : 4 vCPU est le minimum stable ; rester entre 6 et 24 vCPU par VM (au-delà, plusieurs VM moyennes valent mieux qu'une grosse : moins d'impact d'une panne, meilleure granularité de l'autoscale).
- Single-session (personal) : Light 2 vCPU / 8 Go, Medium 4 vCPU / 16 Go, Heavy 8 vCPU / 32 Go.
- Profils FSLogix : compter 30 Go par utilisateur au départ ; avec Cloud Cache, partir d'un ratio de 2 utilisateurs par vCPU (Cloud Cache consomme plus de ressources locales).
- Ces chiffres sont des points de départ : seuls un test de charge avec les vraies applications et la mesure en production (Azure Virtual Desktop Insights, compteurs CPU, mémoire, User Input Delay) donnent la bonne densité.
Exemple de calcul : 400 utilisateurs Medium, 70 % de connexions simultanées au pic, VM D8s_v5 (8 vCPU) : 280 sessions ÷ (8 × 4 = 32 sessions par VM) ≈ 9 VM au pic, plus 1 ou 2 VM de marge (maintenance, panne) ; max session limit = 32 si depth-first.
5.2 Les familles de VM#
| Famille | Usage AVD |
|---|---|
| D-series v5 / v6 (usage général) | Le choix par défaut pour le multi-session |
| E-series (mémoire) | Applications gourmandes en RAM |
| F-series (calcul) | Applications très consommatrices de CPU |
| B-series (burstable) | Labs, très petits usages ; déconseillée en production multi-session |
| NV, NC (GPU) | Graphisme, CAO, vidéo (section 5.3) |
Disque OS : Premium SSD (ou Standard SSD pour les labs) ; Ultra disks et ephemeral OS disks non pris en charge.
5.3 GPU#
| Série prise en charge comme session host | Rendu applicatif accéléré | Encodage accéléré |
|---|---|---|
| NVadsA10 v5 (NVIDIA A10, de 1/6 à 2 GPU) | Oui | HEVC/H.265, AVC/H.264 |
| NVv3 | Oui | HEVC/H.265, AVC/H.264 |
| NCasT4_v3 (NVIDIA T4) | Oui | HEVC/H.265, AVC/H.264 |
| NVv4 (AMD, GPU partiel) | Oui | AVC/H.264 ; série retirée le 30/09/2026, migrer vers NVads V710 v5, NVadsA10 v5 ou NGads V620 |
- Les séries NC, NCv2, NCv3, ND, NDv2 (calcul CUDA, IA) ne conviennent pas comme session hosts : pas d'accélération de l'interface Windows.
- NVIDIA : installer les pilotes GRID (pas CUDA), de préférence par l'extension NVIDIA GPU Driver ; AMD : pilotes AMD fournis par Azure. HEVC exige GRID 16.2 ou plus récent.
- Une VM NVIDIA inclut une licence GRID jusqu'à 25 utilisateurs simultanés.
- Activer ensuite l'accélération par stratégie de groupe (rendu GPU, encodage H.264/AVC 444, HEVC) : détails au chapitre 06.
5.4 Capacité : quotas, limites du service et zones#
| Point de capacité | Ce qu'il faut prévoir |
|---|---|
| Quotas vCPU de l'abonnement, par région et par famille | Les vérifier (Quotas) et demander l'augmentation avant le déploiement, en comptant la marge du pic et des mises à jour |
| Capacité régionale | Une réservation de VM (Reserved VM Instance) donne une remise, pas de capacité garantie ; pour garantir des VM, On-demand capacity reservation |
| Availability zones | Répartir les session hosts sur plusieurs zones (choix des zones à la création) |
| Limites AVD | 10 000 session hosts par host pool, 400 host pools par workspace (section 1.3) |
| Déploiement par le portail | Le template de création est limité à 800 objets et chaque VM en crée environ six : environ 132 VM par passage en standard (FAQ AVD) ; jusqu'à 500 VM à la création avec une session host configuration |
| Préfixe de nom | 11 caractères maximum en standard (le portail ajoute -0, -1…), 10 avec une session host configuration ; nom complet de 15 caractères maximum (NetBIOS) |
| Plusieurs régions | Un host pool par région (metadata et VM proches des utilisateurs) ; continuité d'activité au chapitre 08 |
6. Licences : choisir le modèle, puis le configurer#

6.1 Deux familles de coûts#
Azure Virtual Desktop coûte : (1) la consommation Azure (VM, disques, stockage, réseau, Log Analytics), toujours facturée, et (2) le droit d'accès des utilisateurs, qui dépend de qui ils sont et de l'OS des session hosts.
| Utilisateurs | OS des session hosts | Licence d'accès |
|---|---|---|
| Internes (employés, élèves, prestataires et fournisseurs de l'organisation) | Windows 11 / 10 Enterprise (multi-session) | Une licence éligible par utilisateur : Microsoft 365 E3, E5, A3, A5, F3, Business Premium, Student Use Benefit ; Windows Enterprise E3, E5 ; Windows Education A3, A5 ; Windows VDA per user |
| Internes | Windows Server 2016 à 2025 | RDS CAL avec Software Assurance (per user ou per device) ou RDS User Subscription Licenses |
| Externes (clients d'une application SaaS) | Windows 11 / 10 Enterprise (multi-session) | Per-user access pricing, payé par un abonnement Azure inscrit |
| Externes | Windows Server | Non pris en charge : le per-user access pricing n'existe pas pour Windows Server |
6.2 Le per-user access pricing#
- Il faut inscrire (enroll) un abonnement Azure : Azure Virtual Desktop > Per-user access pricing. La facturation apparaît ensuite sur la facture Azure de cet abonnement.
- Deux offres : Apps (RemoteApp seulement) et Desktops + apps ; prix fixe par utilisateur, facturé seulement pour les utilisateurs qui se sont connectés dans le mois, une seule fois par utilisateur et par période.
- Il facture tous les utilisateurs qui se connectent aux host pools de l'abonnement inscrit, y compris ceux qui ont déjà une licence : placer les utilisateurs internes dans un abonnement non inscrit.
- Il inclut les droits FSLogix ; il ne couvre pas le calcul Azure.
- Les licences ne traversent pas les tenants (seule exception citée : Microsoft Entra ID P1 dans une organisation multitenant).
- Un abonnement Dev/Test permet les tests de recette sans licence, jamais la production.
6.3 Configurer les licences sur les session hosts#
Licence Windows des VM (OS client) : avec une licence éligible, la VM tourne sans payer la licence Windows du prix pay-as-you-go, à condition que la propriété LicenseType = Windows_Client soit posée. Elle l'est automatiquement quand les session hosts sont créés par le service AVD (portail AVD, session host configuration) ; à poser soi-même pour une VM créée autrement (template, Terraform, image importée).
# Poser la licence Windows client sur une VM existante (session Azure déjà ouverte avec Connect-AzAccount)
$vm = Get-AzVM -ResourceGroupName 'rg-avd-compute' -Name 'avd-sh-0'
$vm.LicenseType = 'Windows_Client'
Update-AzVM -ResourceGroupName 'rg-avd-compute' -VM $vm
# Vérifier les VM déjà licenciées
Get-AzVM | Where-Object LicenseType -eq 'Windows_Client' | Select-Object ResourceGroupName, Name, LicenseType
az vm update --resource-group rg-avd-compute --name avd-sh-0 --license-type Windows_Client
En Terraform : license_type = "Windows_Client" sur azurerm_windows_virtual_machine ; en Bicep : licenseType: 'Windows_Client'
dans les propriétés de la VM.
Windows Server :
- La licence Windows Server de la VM :
Windows_Server(Azure Hybrid Benefit, si vous avez des licences avec Software Assurance), sinon licence incluse dans le prix de la VM. Limite connue : des VM Windows Server créées par le processus de host pool peuvent recevoir un mauvais license type, à vérifier. - Les RDS CAL : un RDS license server (rôle Remote Desktop Licensing, CAL installées et activées) joignable par les
session hosts ; sur chaque session host, par GPO (Computer Configuration > Administrative Templates > Windows Components >
Remote Desktop Services > Remote Desktop Session Host > Licensing) : Use the specified Remote Desktop license servers et
Set the Remote Desktop licensing mode (Per User ou Per Device), stockés sous
HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services(LicenseServers,LicensingMode). Sans license server, les connexions sont refusées à la fin de la période de grâce de 120 jours (lecture :GetGracePeriodDays()de la classe WMIWin32_TerminalServiceSetting).
Azure Local : activer les VM (Azure verification for VMs pour Windows Enterprise multi-session et Windows Server 2022 Datacenter: Azure Edition, méthodes d'activation habituelles pour les autres).
| Besoin | Modèle de licence |
|---|---|
| Entreprise équipée en Microsoft 365 E3 | Rien à acheter pour l'accès ; payer le calcul Azure |
| Utilisateurs en Microsoft 365 Business Standard | Non éligible : passer à Business Premium, E3, ou ajouter Windows Enterprise E3 / VDA per user |
| Éditeur SaaS qui publie son application à ses clients | Per-user access pricing (offre Apps), abonnement dédié inscrit |
| Application qui n'existe que sur Windows Server | RDS CAL (avec SA) ou RDS User Subscription Licenses + license server |
| Prestataires externes travaillant pour l'entreprise | Usage interne : une licence éligible par prestataire (pas le per-user access pricing) |
7. Créer un host pool et ses session hosts avec le portail#
Rôles minimums sur le resource group : Desktop Virtualization Host Pool Contributor (host pool, registration key), plus Virtual Machine Contributor pour créer les VM (Azure, Extended Zones) ou Azure Stack HCI VM Contributor (Azure Local). Ne pas désactiver WinRM sur l'image : l'ajout de session hosts par le portail utilise PowerShell DSC.
Azure Virtual Desktop > Host pools > Create :
| Onglet | Réglages clés |
|---|---|
| Basics | Abonnement, resource group, nom (64 caractères maximum), Location (des metadata), Validation environment, Preferred app group type, Host pool type : Pooled (load balancing algorithm, max session limit) ou Personal (assignment type, Assign multiple desktops to a single user) ; pour pooled, choix Use a session host configuration |
| Session hosts | Add virtual machines ou non ; resource group, name prefix, région et availability zones, security type (Trusted launch par défaut), image (Marketplace ou Azure Compute Gallery), taille, nombre de VM, disque OS, réseau (VNet, subnet, NSG), domaine (Microsoft Entra ID, avec ou sans inscription Intune, ou Active Directory), compte administrateur local |
| Workspace | Register desktop app group : Yes et choisir ou créer le workspace |
| Advanced | Diagnostic settings vers Log Analytics (chapitre 08) |
| Tags puis Review + create |
Ensuite :
- Application groups > le Desktop application group créé > Assignments : ajouter les utilisateurs ou groupes.
- Pour des RemoteApp : créer un application group RemoteApp, ajouter des applications (au moins un session host allumé et disponible), l'assigner, l'ajouter au workspace (chapitre 07).
- Session hosts joints à Microsoft Entra ID : donner Virtual Machine User Login (ou Administrator Login) aux utilisateurs et régler la RDP property d'authentification Entra (chapitre 05).
- Vérifier que les session hosts passent en statut Available (Session hosts).
Ajouter des session hosts plus tard (standard) : Host pool > Session hosts > Add reprend la configuration ; il faut garder la même taille, image et identité que les VM existantes (le portail génère une registration key pour l'occasion).
8. Automatiser : PowerShell, Azure CLI, ARM, Bicep et Terraform#
Toutes les commandes supposent une session déjà ouverte (Connect-AzAccount, az login) : aucun identifiant dans le code. Le
module PowerShell est Az.DesktopVirtualization ; l'extension CLI desktopvirtualization s'installe au premier appel.
8.1 PowerShell#
# Host pool pooled en gestion standard
$hp = @{
Name = 'hp-avd-prd-01'
ResourceGroupName = 'rg-avd-service'
Location = 'westeurope'
HostPoolType = 'Pooled'
LoadBalancerType = 'DepthFirst'
MaxSessionLimit = 16
PreferredAppGroupType = 'Desktop'
ValidationEnvironment = $false
StartVMOnConnect = $true
}
New-AzWvdHostPool @hp
# Desktop application group, workspace, puis enregistrement de l'application group dans le workspace
$hpId = (Get-AzWvdHostPool -Name 'hp-avd-prd-01' -ResourceGroupName 'rg-avd-service').Id
$ag = New-AzWvdApplicationGroup -Name 'ag-avd-prd-01-desktop' -ResourceGroupName 'rg-avd-service' -Location 'westeurope' `
-ApplicationGroupType 'Desktop' -HostPoolArmPath $hpId
New-AzWvdWorkspace -Name 'ws-avd-prd' -ResourceGroupName 'rg-avd-service' -Location 'westeurope'
Register-AzWvdApplicationGroup -ResourceGroupName 'rg-avd-service' -WorkspaceName 'ws-avd-prd' -ApplicationGroupPath $ag.Id
# Donner l'accès à un groupe Entra ID
New-AzRoleAssignment -ObjectId '{objectId-du-groupe}' -RoleDefinitionName 'Desktop Virtualization User' `
-ResourceName 'ag-avd-prd-01-desktop' -ResourceGroupName 'rg-avd-service' `
-ResourceType 'Microsoft.DesktopVirtualization/applicationGroups'
# Registration key valable 8 heures (1 heure minimum, 27 jours maximum), puis lecture
New-AzWvdRegistrationInfo -ResourceGroupName 'rg-avd-service' -HostPoolName 'hp-avd-prd-01' `
-ExpirationTime $((Get-Date).ToUniversalTime().AddHours(8).ToString('yyyy-MM-ddTHH:mm:ss.fffffffZ'))
$token = (Get-AzWvdHostPoolRegistrationToken -ResourceGroupName 'rg-avd-service' -HostPoolName 'hp-avd-prd-01').Token
Pour une session host configuration : New-AzWvdHostPool avec -ManagementType 'Automated' et une managed identity
(-IdentityType 'SystemAssigned'), puis New-AzWvdSessionHostConfiguration et New-AzWvdSessionHostManagement. Le paramètre
-DeploymentScope (regional host pools) demande la version préliminaire du module (5.4.5-preview).
8.2 Azure CLI#
az desktopvirtualization hostpool create \
--name hp-avd-prd-01 --resource-group rg-avd-service --location westeurope \
--host-pool-type Pooled --load-balancer-type BreadthFirst \
--preferred-app-group-type Desktop --max-session-limit 16
# Personal, assignation automatique
az desktopvirtualization hostpool create \
--name hp-avd-dev-01 --resource-group rg-avd-service --location westeurope \
--host-pool-type Personal --load-balancer-type Persistent \
--preferred-app-group-type Desktop --personal-desktop-assignment-type Automatic
hostPoolArmPath=$(az desktopvirtualization hostpool show --name hp-avd-prd-01 \
--resource-group rg-avd-service --query id --output tsv)
az desktopvirtualization applicationgroup create --name ag-avd-prd-01-desktop \
--resource-group rg-avd-service --location westeurope \
--application-group-type Desktop --host-pool-arm-path "$hostPoolArmPath"
az desktopvirtualization workspace create --name ws-avd-prd --resource-group rg-avd-service
# Registration key, puis lecture
az desktopvirtualization hostpool update --name hp-avd-prd-01 --resource-group rg-avd-service \
--registration-info expiration-time="$(date -u -d '+8 hours' +%Y-%m-%dT%H:%M:%S.%7NZ)" registration-token-operation="Update"
az desktopvirtualization hostpool retrieve-registration-token --name hp-avd-prd-01 \
--resource-group rg-avd-service --query token --output tsv
8.3 Enregistrer une VM à la main (agent et BootLoader)#
Pour une VM créée hors du portail AVD (template, Terraform, image importée) :
- Vérifier l'accès aux URL requises (outil Azure Virtual Desktop Agent URL Tool, chapitre 01).
- Windows Server : installer le rôle RD Session Host et redémarrer.
- Installer l'agent avec la clé, puis le BootLoader :
msiexec /i Microsoft.RDInfra.RDAgent.Installer-x64-{version}.msi /quiet REGISTRATIONTOKEN={registration-key}
msiexec /i Microsoft.RDInfra.RDAgentBootLoader.Installer-x64-{version}.msi /quiet

Quatre composants apparaissent : Remote Desktop Agent Boot Loader, Remote Desktop Services Infrastructure Agent, Remote Desktop Services Infrastructure Geneva Agent, Remote Desktop Services SxS Network Stack. La clé ne sert qu'à l'enregistrement : la VM obtient ensuite un machine token. Une VM éteinte plus de 90 jours perd ce token et doit être réenregistrée (l'allumer au moins 20 minutes tous les 90 jours l'évite).
Dépannage : événement 3277 (INVALID_REGISTRATION_TOKEN, EXPIRED_MACHINE_TOKEN) dans le journal Application ; clés
IsRegistered et RegistrationToken sous HKLM:\SOFTWARE\Microsoft\RDInfraAgent ; après une nouvelle clé :
Restart-Service RDAgentBootLoader.
8.4 ARM templates et Bicep#
Les types : Microsoft.DesktopVirtualization/hostPools, applicationGroups, workspaces (dernière version d'API non préliminaire
lue : 2025-10-10). Microsoft publie un exemple de démarrage rapide (Creates AVD with Microsoft Entra ID Join) et des Azure
Verified Modules (avm/res/desktop-virtualization/host-pool).
// ==== Objets de service AVD : host pool pooled, Desktop application group, workspace ====
param location string = resourceGroup().location
param hostPoolName string = 'hp-avd-prd-01'
param tokenExpiration string = dateTimeAdd(utcNow(), 'PT8H') // utcNow() n'est permis qu'en valeur par défaut d'un paramètre
resource hostPool 'Microsoft.DesktopVirtualization/hostPools@2025-10-10' = {
name: hostPoolName
location: location
properties: {
hostPoolType: 'Pooled'
loadBalancerType: 'DepthFirst'
maxSessionLimit: 16
preferredAppGroupType: 'Desktop'
validationEnvironment: false
startVMOnConnect: true
registrationInfo: {
expirationTime: tokenExpiration
registrationTokenOperation: 'Update'
}
}
}
resource desktopAppGroup 'Microsoft.DesktopVirtualization/applicationGroups@2025-10-10' = {
name: '${hostPoolName}-desktop'
location: location
properties: {
applicationGroupType: 'Desktop'
hostPoolArmPath: hostPool.id
}
}
resource workspace 'Microsoft.DesktopVirtualization/workspaces@2025-10-10' = {
name: 'ws-avd-prd'
location: location
properties: {
applicationGroupReferences: [
desktopAppGroup.id // l'enregistrement dans le workspace se fait ici
]
}
}
Les VM se déclarent ensuite comme toute VM (Microsoft.Compute/virtualMachines avec licenseType: 'Windows_Client'), plus une
extension qui installe l'agent avec la clé. Ne jamais sortir la registration key en output : la récupérer au moment du
déploiement et la passer comme paramètre @secure().
Autres propriétés utiles de hostPools : personalDesktopAssignmentType, customRdpProperty, agentUpdate (fenêtres de mise à
jour de l'agent), publicNetworkAccess. managementType (Automated ou Standard), deploymentScope et les options RDP Shortpath
n'existent que dans les API preview (depuis 2025-11-01-preview) : la GA 2025-10-10 les a retirées, et azurerm (qui
utilise la GA) ne les expose pas.
8.5 Terraform#

Ressources du provider hashicorp/azurerm (version 5.10 lue sur le registre) :
# ==== Objets de service AVD : host pool, registration info, Desktop application group, workspace ====
resource "azurerm_virtual_desktop_host_pool" "prd" {
name = "hp-avd-prd-01"
resource_group_name = azurerm_resource_group.service.name
location = azurerm_resource_group.service.location
type = "Pooled" # Personal ou Pooled ; changer recrée le host pool
load_balancer_type = "DepthFirst" # BreadthFirst, DepthFirst ; Persistent ou MultiplePersistent pour Personal
maximum_sessions_allowed = 16 # pooled seulement, de 0 à 999999
preferred_app_group_type = "Desktop"
validate_environment = false
start_vm_on_connect = true
scheduled_agent_updates {
enabled = true
schedule {
day_of_week = "Saturday"
hour_of_day = 2 # fenêtre de 2 heures, deux blocs schedule au maximum
}
}
}
# Clé renouvelée toutes les 8 heures sans créer de différence à chaque plan (timestamp() en créerait une)
resource "time_rotating" "avd_token" {
rotation_hours = 8
}
resource "azurerm_virtual_desktop_host_pool_registration_info" "prd" {
hostpool_id = azurerm_virtual_desktop_host_pool.prd.id
expiration_date = time_rotating.avd_token.rotation_rfc3339
}
resource "azurerm_virtual_desktop_application_group" "prd_desktop" {
name = "ag-avd-prd-01-desktop"
resource_group_name = azurerm_resource_group.service.name
location = azurerm_resource_group.service.location
type = "Desktop" # RemoteApp seulement sur un host pool Pooled
host_pool_id = azurerm_virtual_desktop_host_pool.prd.id
}
resource "azurerm_virtual_desktop_workspace" "prd" {
name = "ws-avd-prd"
resource_group_name = azurerm_resource_group.service.name
location = azurerm_resource_group.service.location
}
resource "azurerm_virtual_desktop_workspace_application_group_association" "prd_desktop" {
workspace_id = azurerm_virtual_desktop_workspace.prd.id
application_group_id = azurerm_virtual_desktop_application_group.prd_desktop.id
}
- Arguments Required du host pool :
name,resource_group_name,location,type,load_balancer_type; pour Personal,personal_desktop_assignment_type(Automatic ou Direct) devient obligatoire. - Une seule ressource
registration_infopar host pool (sinon résultats incohérents). Son attributtokenest stocké dans le state : state distant chiffré à accès restreint, durée de clé courte, tout output marquésensitive = true. - Les VM :
azurerm_windows_virtual_machineaveclicense_type = "Windows_Client"et une extension (DSC ou script) qui installe l'agent avec le token ; ou mieux, la session host configuration, qui supprime la gestion du token. - Accès :
azurerm_role_assignmentdu rôle Desktop Virtualization User sur l'application group.
9. Configurer le host pool et les session hosts#
9.1 Les réglages du host pool#
| Réglage | Où (portail > Host pool) | PowerShell / CLI / Terraform |
|---|---|---|
| Load balancing, max session limit | Properties | Update-AzWvdHostPool -LoadBalancerType DepthFirst -MaxSessionLimit 10 ; az desktopvirtualization hostpool update --load-balancer-type DepthFirst --max-session-limit 10 ; load_balancer_type, maximum_sessions_allowed |
| Preferred app group type | Properties | --preferred-app-group-type ; preferred_app_group_type |
| Validation environment | Properties | -ValidationEnvironment ; validate_environment |
| Start VM on Connect | Properties | -StartVMOnConnect ; start_vm_on_connect (rôle Desktop Virtualization Power On Contributor pour la managed identity du host pool ou le service principal Azure Virtual Desktop, à une portée qui contient les VM, l'abonnement de préférence ; voir 06 · 11) |
| Assignment type (personal) | Properties | personal_desktop_assignment_type (changer recrée la ressource en Terraform) |
| RDP properties | RDP Properties | custom_rdp_properties (chapitre 06) |
| Accès réseau public | Networking | public_network_access (Private Link, chapitre 01) |
| Mises à jour de l'agent | Scheduled agent updates | scheduled_agent_updates : jusqu'à deux fenêtres de 2 heures, fuseau horaire ou heure locale du session host |
| Registration key | Registration key > Generate new key | section 8 ; 1 heure à 27 jours |
9.2 Les réglages des session hosts#
| Action | Comment | Effet |
|---|---|---|
| Drain mode (Turn drain mode on) | Portail Session hosts ; Update-AzWvdSessionHost -AllowNewSession:$false |
Plus de nouvelles sessions ; les sessions en cours et les reconnexions continuent. Attendre une minute avant de rafraîchir le portail |
| Attribuer une VM personal | Portail Assign ; Update-AzWvdSessionHost -AssignedUser '[email protected]' |
Assignation Direct ; désassigner ou réattribuer de la même façon |
| Envoyer un message, déconnecter, fermer une session | Portail Session hosts > Sessions ; Send-AzWvdUserSessionMessage, Disconnect-AzWvdUserSession, Remove-AzWvdUserSession |
Préparer une maintenance |
| Retirer un session host | Supprimer le session host du host pool puis la VM | Sinon il reste un enregistrement orphelin (ou une VM facturée) |
Séquence de maintenance d'une VM pooled : drain mode → message aux utilisateurs → attente de la fin des sessions (ou déconnexion) → maintenance ou remplacement → sortie du drain mode. La session host configuration automatise cette séquence (délai de déconnexion, message, nombre de VM traitées à la fois).
9.3 Les statuts à connaître#
| Statut | Signification | Que faire |
|---|---|---|
| Available | Health checks réussis, prêt (même à la max session limit) | — ; reçoit de nouvelles sessions |
| Needs Assistance | Health check non bloquant en échec (Geneva Monitoring Agent, IMDS, URL) | Reçoit encore des sessions ; voir UrlsAccessibleCheck, MetaDataServiceCheck, MonitoringAgentCheck |
| Unavailable | VM éteinte ou health check bloquant en échec (jonction au domaine, listener SxS) ; remplace l'ancien NoHeartbeat | Exclu du load balancing ; voir les health checks (chapitre 08) |
| Shutdown | VM arrêtée ou désallouée | Normal avec autoscale ou Start VM on Connect |
| Upgrading / Upgrade Failed | Mise à jour de l'agent ou de la pile SxS en cours ou en échec | Reçoit encore des sessions ; bloqué en Upgrading : réinstaller la pile SxS puis l'agent |
L'API connaît aussi des statuts détaillés : NotJoinedToDomain, DomainTrustRelationshipLost, SxSStackListenerNotReady,
FSLogixNotHealthy, Disconnected.
10. Les coûts#
| Poste | Levier |
|---|---|
| VM des session hosts (le plus gros poste) | Bonne densité (section 5) ; autoscale (scaling plan) et Start VM on Connect ; depth-first pour concentrer les sessions ; Reserved VM Instances ou Azure savings plan for compute pour la part permanente ; abonnements Dev/Test hors production |
| Licence Windows de la VM | Windows_Client avec une licence éligible ; Windows Server : Azure Hybrid Benefit avec Software Assurance |
| Disques OS | Payés même VM éteinte : taille et performance adaptées (Premium SSD pour la production) |
| Stockage des profils et App Attach | Azure Files ou Azure NetApp Files (chapitre 02) |
| Identité | Entra ID seul, ou contrôleurs de domaine (VM), ou Entra Domain Services |
| Supervision | Données Log Analytics d'AVD Insights (estimer et filtrer les compteurs) |
| Réseau | Sortie vers Internet et Microsoft 365 (OneDrive, Exchange Online) |
| Accès externe | Per-user access pricing (section 6.2) |
Outils : le module Azure Virtual Desktop de l'Azure Pricing Calculator (calcul, stockage, utilisateurs, heures, concurrence, per-user access pricing, réservations) ; Microsoft Cost Management après le déploiement, avec des tags sur les ressources AVD ; AVD Insights pour mesurer l'usage réel et ajuster.
11. Labs conseillés#
Dans un abonnement de test et un tenant de test, avec un VNet qui a un accès sortant vers les URL AVD (voir
chapitre 01) et des utilisateurs de test licenciés (essai Microsoft 365 E3 ou E5). Coût : une
ou deux VM D4s_v5 quelques heures, des disques Premium SSD, rien de cher si tout est supprimé le jour même. Nettoyage à la fin
de chaque lab : supprimer les resource groups rg-avd-lab-* (le host pool ne se supprime qu'une fois ses session hosts retirés).
Lab 1. Un host pool pooled complet par le portail.
- Host pools > Create : Pooled, breadth-first, max session limit 4, validation environment Yes, 1 VM Windows 11 Enterprise multi-session, D4s_v5, jointe à Microsoft Entra ID, workspace créé et Desktop application group enregistré.
- Assigner deux utilisateurs de test ; leur donner Virtual Machine User Login sur le resource group des VM.
- Se connecter avec Windows App ou le client web (
https://windows.cloud.microsoft). - Résultat attendu : le session host est Available ; les deux sessions apparaissent sur la même VM ;
Get-AzVM ... | Select LicenseTypeaffiche Windows_Client sans rien avoir fait.
Lab 2. Load balancing et drain mode.
- Ajouter une deuxième VM au host pool (Session hosts > Add).
- Breadth-first : ouvrir deux sessions, constater qu'elles se répartissent ; passer en depth-first, max session limit 2 : les deux nouvelles sessions vont sur la même VM.
- Mettre la VM occupée en drain mode ; déconnecter puis reconnecter un utilisateur : il revient sur la même VM ; un troisième utilisateur part sur l'autre.
- Résultat attendu : comportement conforme à la section 4.3.
Lab 3. Enregistrer une VM à la main.
- Créer une VM Windows 11 Enterprise multi-session hors d'AVD dans le même VNet (Trusted launch).
- Générer une registration key de 2 heures ; installer l'agent puis le BootLoader avec la clé (section 8.3).
- Vérifier
IsRegistered = 1sousHKLM:\SOFTWARE\Microsoft\RDInfraAgentet le statut Available dans le portail. - Vérifier le
LicenseType: vide (VM créée hors du service) ; le poser àWindows_Client.
Lab 4. Le même déploiement en IaC.
- Avec le code Terraform de la section 8.5 (ou le Bicep de la section 8.4) dans un resource group
rg-avd-lab-iac: host pool, registration info, Desktop application group, workspace, association, role assignment Desktop Virtualization User. - Relancer un
plan: aucune différence (grâce àtime_rotating). - Résultat attendu : le workspace apparaît dans le feed de l'utilisateur, vide tant qu'aucun session host n'est enregistré.
Lab 5. Un host pool personal en assignation Direct.
- Créer un host pool Personal, assignation Direct, Assign multiple desktops to a single user coché, 2 VM Windows 11 Enterprise.
- Attribuer les deux VM au même utilisateur.
- Résultat attendu : deux bureaux distincts dans son feed ; un autre utilisateur assigné à l'application group n'obtient rien tant qu'aucune VM ne lui est attribuée.
12. Les pièges d'examen#
| Situation dans la question | Réponse attendue | Pourquoi |
|---|---|---|
| Un utilisateur doit voir le bureau et des RemoteApp du même host pool | Impossible : il ne voit que le preferred app group type ; deux host pools | Règle des application groups |
| Publier des RemoteApp sur un host pool personal | Impossible : RemoteApp = pooled uniquement | — |
| Deux Desktop application groups sur un host pool | Impossible : un seul Desktop par host pool | Plusieurs RemoteApp, oui |
| Réduire le nombre de VM allumées | Depth-first + max session limit réaliste + autoscale | Breadth-first étale sur toutes les VM |
| Depth-first configuré, une VM saturée, les autres vides | La max session limit est restée à 999 999 | Advisor le signale |
| Un utilisateur a plusieurs bureaux personnels | Assignation Direct + multiple desktops | Impossible en Automatic |
| Session host configuration pour un host pool personal ou sur Azure Local | Non : pooled et Azure seulement | Rester en standard |
| Clients externes sur Windows Server | Non : per-user access pricing réservé aux OS clients | Utiliser Windows 11 Enterprise multi-session |
| Employés avec Microsoft 365 E3 sur Windows 11 multi-session | Aucune licence d'accès en plus ; payer le calcul | Licence éligible |
| Session hosts Windows Server, connexions refusées après quelques mois | RDS license server et licensing mode par GPO, CAL installées | Fin de la période de grâce RDS (120 jours) |
| VM créées par Terraform facturées avec la licence Windows | Poser LicenseType = Windows_Client | Automatique seulement via le service AVD |
| Une VM éteinte depuis 4 mois n'apparaît plus Available | Machine token expiré (plus de 90 jours) : nouvelle clé, réinstaller l'agent | — |
| La registration key générée il y a un mois ne fonctionne plus | Clé expirée (27 jours maximum) : en générer une | — |
| Tester les mises à jour du service AVD avant la production | Validation environment | — |
| Mélanger VM Azure et Azure Local, ou Entra joined et AD joined, dans un host pool | Non : un host pool = une configuration homogène | — |
| Session hosts sur VM Scale Sets, Arm64 ou ephemeral OS disk | Non pris en charge | — |
| VM NC / ND pour un bureau de CAO | Non : séries NV ou NCasT4_v3, pilotes GRID | Les autres NC visent le calcul CUDA |
| Le per-user access pricing facture aussi des internes licenciés | Placer les internes dans un abonnement non inscrit | Il facture toute connexion de l'abonnement inscrit |
13. Scénarios d'entraînement#
1. Contoso a 600 employés de bureau (charge Medium), Microsoft 365 E3, 60 % de connexions simultanées au pic. Elle veut le coût le plus bas. Que recommander (OS, type de host pool, algorithme, taille indicative) ?
Windows 11 Enterprise multi-session, host pool pooled, profils FSLogix. Depth-first avec une max session limit calculée (D8s_v5 : 8 vCPU × 4 = 32) et autoscale : 360 sessions ÷ 32 ≈ 12 VM au pic, plus une marge. Aucune licence d'accès à acheter (E3 éligible) ; licence Windows des VM couverte (
Windows_Client).
2. Les développeurs de Fabrikam doivent installer leurs outils et garder leur environnement. Chacun a parfois besoin de deux VM (Windows 11 et une version de test). Quelle configuration ?
Host pool personal, Windows 11 Enterprise, assignation Direct avec Assign multiple desktops to a single user (
MultiplePersistent). Chaque VM est attribuée nominativement ; mises à jour en place.
3. Un utilisateur est assigné au Desktop application group et au RemoteApp application group Office du host pool HP1. Il ne voit que le bureau. Pourquoi ? Comment lui donner les deux ?
Le preferred app group type de HP1 est Desktop : c'est le seul type affiché quand les deux sont assignés sur le même host pool. Publier les RemoteApp depuis un second host pool (ou ne lui assigner qu'un des deux).
4. Un éditeur publie son logiciel de gestion à 2 000 clients externes via AVD et refuse de leur demander une licence Microsoft. Ses propres équipes testent sur la même plateforme. Quel modèle ?
Per-user access pricing (offre Apps si seules des RemoteApp sont publiées) sur un abonnement inscrit dédié aux clients, session hosts Windows 11 Enterprise multi-session. Les équipes internes, déjà licenciées, utilisent un abonnement non inscrit ; sinon elles seraient facturées aussi. Tenant et abonnement séparés conseillés pour des clients d'organisations différentes.
5. Une application métier n'est supportée que sur Windows Server 2022. L'entreprise a des RDS CAL per user avec Software Assurance. Que faut-il mettre en place côté licences ?
Session hosts Windows Server 2022 (rôle RD Session Host), Azure Hybrid Benefit (
Windows_Server) si la Software Assurance couvre les licences Windows Server, un RDS license server avec les CAL installées, et sur les session hosts la GPO Use the specified Remote Desktop license servers + licensing mode Per User. Le per-user access pricing ne s'applique pas.
6. L'équipe plateforme déploie les VM avec Terraform et constate des factures Windows au tarif pay-as-you-go alors que tous les utilisateurs ont Microsoft 365 E5. Pourquoi, et comment corriger ?
Le LicenseType n'est posé automatiquement que pour les VM créées par le service AVD. Ajouter
license_type = "Windows_Client"surazurerm_windows_virtual_machine(ouUpdate-AzVM/az vm update --license-type Windows_Clientsur l'existant).
7. Après une coupure, un session host éteint depuis 100 jours redémarre mais reste Unavailable ; l'événement 3277 indique
EXPIRED_MACHINE_TOKEN. Que faire ?
Le machine token a expiré (plus de 90 jours éteinte). Générer une nouvelle registration key, la mettre dans la clé de registre
RegistrationToken(ou réinstaller l'agent avecREGISTRATIONTOKEN=), passerIsRegisteredà 0 si besoin, puisRestart-Service RDAgentBootLoader. À l'avenir, allumer ces VM régulièrement ou les retirer du host pool.
8. Une organisation veut que les nouvelles images soient appliquées automatiquement aux VM d'un host pool pooled Azure, avec remplacement progressif hors des heures de travail et sans gérer de registration key. Quelle approche, et quelle contrainte de création ?
Un host pool avec session host configuration (management type Automated) et une session host management policy (planning, nombre de VM retirées à la fois, délai de déconnexion), mises à jour par session host update. Le choix se fait à la création du host pool et ne se change pas ; pooled et Azure seulement ; identifiants de jonction dans Key Vault.
9. Le bureau d'études doit faire tourner une application de CAO en multi-session. L'équipe propose des VM NC24ads_A100_v4. Bonne idée ?
Non : les séries NC de calcul (A100, H100, NCv3…) visent CUDA et l'IA, sans accélération de l'interface Windows. Prendre NVadsA10 v5 (GPU partiel ou complet) ou NCasT4_v3, avec les pilotes GRID, puis activer le rendu et l'encodage GPU par stratégie de groupe ; licence GRID jusqu'à 25 utilisateurs simultanés.
10. Contoso déploie AVD dans trois pays et veut un modèle d'organisation des ressources. Que recommander ?
Sous le management group Landing zones, un abonnement AVD (ou un par région si les quotas l'imposent) et un abonnement de services partagés (Azure Compute Gallery, Key Vault). Dans chaque abonnement AVD, des resource groups par rôle : service objects, compute, network, storage. Un host pool par région, au plus près des utilisateurs ; réseau raccordé au hub de l'abonnement Connectivity ; pas de management group par environnement ; tags pour les coûts.
14. Pour aller plus loin (au-delà de l'examen)#
- AVD landing zone accelerator (
github.com/Azure/avdaccelerator) : déploiement Bicep ou Terraform complet et revu (réseau, identité, stockage, supervision, images), bonne base pour un projet réel. - Azure Verified Modules pour AVD (Bicep et Terraform) : modules maintenus par Microsoft pour host pool, application group, workspace, scaling plan.
- Regional host pools (préversion) : pour des exigences de résidence des metadata.
- Azure Virtual Desktop Hybrid : session hosts sur votre propre infrastructure, sans multi-session ni autoscale.
- Comparer avec Windows 365 : Cloud PC personnel au prix fixe par utilisateur, sans gestion des host pools ; AVD reste plus souple (multi-session, RemoteApp, choix des VM, coût à l'usage).
15. Fiche à retenir#
- Chaîne : workspace → application group → host pool → session hosts ; l'accès = assigner les utilisateurs à l'application group (Desktop Virtualization User).
- Un Desktop application group par host pool ; plusieurs RemoteApp, pooled uniquement ; un application group = un host pool + un workspace.
- Desktop + RemoteApp du même host pool pour un même utilisateur : seul le preferred app group type s'affiche.
- Pooled = multi-session, FSLogix, redéploiement par image ; personal = 1:1, mises à jour en place. Le type ne change pas.
- Personal : Automatic ou Direct ; plusieurs bureaux par utilisateur = Direct seulement.
- Breadth-first : au hasard parmi la moitié la moins chargée ; depth-first : le plus chargé sous la max session limit (défaut et maximum 999 999, à régler).
- Standard (tous les cas, Azure Local) ou session host configuration (pooled, Azure, Automated, choix définitif, pas de registration key ; plus marquée préversion, cmdlets PowerShell encore en preview).
- Registration key : 1 heure à 27 jours ; machine token perdu après 90 jours éteinte ; agent puis BootLoader ; événement 3277.
- Non pris en charge : 32 bits, N/KN/LTSC, Ultra disk OS, ephemeral OS disk, VM Scale Sets, Arm64 ; Windows 11 = Trusted launch par défaut.
- Repères multi-session par vCPU : Light 6, Medium 4, Heavy 2, Power 1 ; VM de 6 à 24 vCPU (4 minimum) ; profils 30 Go.
- GPU : NVadsA10 v5, NVv3, NCasT4_v3 (pilotes GRID) ; NVv4 retirée le 30/09/2026 ; pas de NC/ND de calcul.
- Limites : 10 000 session hosts par host pool, 400 host pools par workspace, 1 300 workspaces par tenant, 500 RemoteApps par application group.
- Licence interne OS client : M365 E3/E5/A3/A5/F3/Business Premium, Windows Enterprise E3/E5, Education A3/A5, VDA per user ; Windows Server : RDS CAL avec SA ou RDS USL + license server.
- Externes : per-user access pricing (abonnement inscrit, Apps ou Desktops + apps, OS client seulement), qui facture aussi les internes de l'abonnement.
- LicenseType Windows_Client : automatique via le service AVD, à poser soi-même sinon.
- Resource groups séparés : service objects, compute, network, storage, shared ; AVD sous Landing zones ; pas de management group par environnement.
- Terraform :
type,load_balancer_typeobligatoires ; une seuleregistration_infopar host pool ; token dans le state ; association workspace ↔ application group par une ressource dédiée. - Coûts : densité, depth-first, autoscale, Start VM on Connect, réservations ou savings plan, Dev/Test, Azure Pricing Calculator (module AVD), tags.
Références#
Toutes lues le 22/10/2026 sur Microsoft Learn, sauf mention :
- Guide d'étude de l'examen AZ-140
- Azure Virtual Desktop terminology
- Preferred application group type behavior for pooled host pools
- Host pool load balancing algorithms
- Configure host pool load balancing
- Configure personal desktop assignment
- Host pool management approaches
- Deploy Azure Virtual Desktop (standard et session host configuration)
- Add session hosts to a host pool
- Session host update
- Configure a host pool as a validation environment
- Regional host pools
- Azure Virtual Desktop on Azure Local
- Azure Virtual Desktop on Azure Extended Zones
- Azure Virtual Desktop Hybrid overview
- Prerequisites for Azure Virtual Desktop (operating systems and licenses)
- Windows update management methodologies for session hosts
- Understanding Extended Security Updates for Windows 10 on AVD
- Security recommendations for Azure Virtual Desktop
- Session host virtual machine sizing guidelines
- Enable GPU acceleration for Azure Virtual Desktop
- NVadsA10 v5 sizes series
- NVv4-series retirement
- Azure Virtual Desktop service limits
- Save costs with Azure Reserved VM Instances
- Licensing Azure Virtual Desktop
- Apply a Windows license to session host virtual machines
- License your RDS deployment with client access licenses
- Understand and estimate costs for Azure Virtual Desktop
- Configure Start VM on Connect
- Troubleshoot the Azure Virtual Desktop agent
- Cloud Adoption Framework : Azure Virtual Desktop
- Microsoft.DesktopVirtualization hostPools (Bicep, ARM)
- Configure Azure Virtual Desktop with Terraform
- Module Az.DesktopVirtualization : New-AzWvdHostPool
- az desktopvirtualization (Azure CLI)
- Registre Terraform, provider
hashicorp/azurerm5.10.0 : azurerm_virtual_desktop_host_pool, azurerm_virtual_desktop_application_group, azurerm_virtual_desktop_workspace, azurerm_virtual_desktop_workspace_application_group_association, azurerm_virtual_desktop_host_pool_registration_info