Version : 1.1 · Date : 2026-10-22 · Domaine 4 de l'examen : Monitor and maintain an Azure Virtual Desktop infrastructure (10 à 15 %)
En une phrase : on collecte deux flux de journaux (diagnostic settings du service, Azure Monitor Agent sur les session hosts) pour les lire dans AVD Insights, on ajuste la capacité avec le load balancing et un scaling plan, on met à jour les hosts en remplaçant l'image plutôt qu'en patchant chaque VM, et on prépare la reprise : sauvegarder ce qui a un état (profils, postes personnels, images), redéployer ce qui n'en a pas, et prévoir une seconde région.

Ce chapitre suppose connus le host pool, le workspace et les application groups (03 · 1), FSLogix et Cloud Cache (02 · 10), les images et Azure Compute Gallery (04 · 5), RDP Shortpath et la qualité de connexion (01 · 5, 01 · 9). Azure Backup en général (vaults, soft delete, immutabilité, rôles) est traité dans SC-500 chapitre 03 : on n'y revient pas.
Ce que l'examen demande#
Bloc Monitor and maintain an Azure Virtual Desktop infrastructure du guide d'étude AZ-140 (compétences au 20/07/2026) :
| # | Compétence mesurée (guide officiel, en anglais) | Section |
|---|---|---|
| 1 | Configure log collection and analysis for Azure Virtual Desktop session hosts | 2 |
| 2 | Monitor Azure Virtual Desktop by using Azure Monitor | 3 |
| 3 | Customize Azure Monitor workbooks for Azure Virtual Desktop Insights | 3.4 |
| 4 | Optimize session host capacity and performance | 4 |
| 5 | Implement autoscaling in host pools | 5 |
| 6 | Monitor and manage active sessions and application groups | 6 |
| 7 | Recommend an update strategy for session hosts | 7 |
| 8 | Plan and implement a disaster recovery plan for Azure Virtual Desktop | 8 |
| 9 | Plan for multi-region implementation | 9 |
| 10 | Design and implement a backup strategy for Azure Virtual Desktop | 10 |
| 11 | Configure backup and restore for FSLogix user profiles, personal desktops, and images | 10.2 |
1. Les bases avant de commencer#
1.1 Ce que Microsoft gère, ce que vous gérez#
| Composant | Géré par | Conséquence pour la supervision et la reprise |
|---|---|---|
| Control plane (broker, gateway, web access, diagnostics, stockage des métadonnées : host pools, app groups, workspaces) | Microsoft | Rien à sauvegarder ; les métadonnées restent dans la géographie choisie. Vous suivez son état avec Service Health. |
| Session hosts (VM, OS, applications, agent AVD) | Vous | Journaux à collecter (AMA), capacité, mises à jour, reprise. |
| Profils FSLogix (Azure Files, Azure NetApp Files) | Vous | État utilisateur : à sauvegarder et à répliquer. |
| Images (Azure Compute Gallery, managed images) | Vous | Source de tous les hosts : versionner, répliquer. |
| Dépendances (réseau, AD DS ou Microsoft Entra, DNS, applications métier) | Vous | Doivent exister dans la région de reprise. |
Deux principes guident tout le domaine :
- un session host pooled est sans état (stateless) : il se redéploie depuis l'image, il ne se restaure pas ;
- un poste personnel (personal desktop) a un état (applications, données sur le disque) : il se sauvegarde et se réplique comme une VM classique.
1.2 Les rôles utiles au domaine 4#
| Rôle (built-in) | Sert à |
|---|---|
| Desktop Virtualization Reader | Lire les objets AVD ; avec Log Analytics Reader, suffit pour consulter AVD Insights |
| Desktop Virtualization User Session Operator | Envoyer un message, déconnecter, fermer la session d'un utilisateur |
| Desktop Virtualization Session Host Operator | Voir et retirer des session hosts, activer le drain mode |
| Desktop Virtualization Power On Off Contributor | Démarrer et arrêter les VM : attribué à l'identité utilisée par autoscale, à l'abonnement (Start VM on Connect se contente de Power On Contributor) |
| Desktop Virtualization Virtual Machine Contributor | Créer et supprimer des session hosts : requis en plus par le dynamic autoscaling et la session host update |
| Log Analytics Contributor, Monitoring Contributor | Configurer les diagnostic settings, les data collection rules, les alertes |
Les rôles qui démarrent ou créent des VM s'attribuent à un service principal : la managed identity du host pool (system-assigned ou user-assigned) ou le service principal Azure Virtual Desktop (application ID
9cdead84-a844-4324-93f2-b2e6bb768d07). Pour l'attribuer, il fautMicrosoft.Authorization/roleAssignments/write(Owner ou User Access Administrator).
2. Collecter les journaux des session hosts et du service#
2.1 Deux flux de données#

| Flux | Source | Comment on l'active | Tables |
|---|---|---|---|
| Journaux du service | Host pool, application group, workspace (control plane) | Diagnostic settings de chaque objet vers un Log Analytics workspace | Préfixe WVD : WVDConnections, WVDErrors, WVDCheckpoints… |
| Données des session hosts | Windows dans chaque VM | Azure Monitor Agent (AMA) + data collection rule (DCR) | Perf (compteurs), Event (journaux Windows) |
Les deux sont nécessaires : le premier dit ce que l'utilisateur a vécu (connexion, erreur, latence), le second pourquoi le host a souffert (CPU, mémoire, disque, FSLogix).
2.2 Les diagnostic settings du service#
Chemin : objet AVD (host pool, application group ou workspace) > Monitoring > Diagnostic settings > Add diagnostic setting, cocher les catégories, destination Send to Log Analytics workspace.
| Catégorie (portail) | Objet | Table | Contenu |
|---|---|---|---|
| Checkpoints | Host pool, app group, workspace | WVDCheckpoints |
Étapes d'une activité (connexion, lancement d'application) |
| Errors | Host pool, app group, workspace | WVDErrors |
Erreurs, avec ServiceError et CorrelationId |
| Management Activities | Host pool, app group, workspace | WVDManagement |
Appels de gestion (création, modification d'objets) |
| Feed | Workspace | WVDFeeds |
Téléchargement du flux de ressources par le client |
| Connections | Host pool | WVDConnections |
Connexions : états Started, Connected, Completed |
| Host Registration | Host pool | WVDHostRegistrations |
Enregistrement des session hosts auprès du service |
| Agent Health Status | Host pool | WVDAgentHealthStatus |
Santé et version de l'agent AVD, mises à jour |
| Network | Host pool | WVDConnectionNetworkData |
RTT et bande passante estimés, toutes les 2 minutes par connexion |
| Session Host Management Activity | Host pool | WVDSessionHostManagement |
Opérations sur les hosts (session host configuration, update) |
| Autoscale | Host pool | WVDAutoscaleEvaluationPooled |
Chaque évaluation d'autoscale : action prise et raison |
| Connection Graphics (préversion) | Host pool | WVDConnectionGraphicsDataPreview |
Données graphiques des connexions lentes |
Règles à connaître :
- les événements de diagnostic arrivent quand l'activité est terminée ; seules les connexions ont des états intermédiaires
(
Startedquand l'utilisateur lance,Connectedquand il est sur la VM,Completedà la déconnexion) ; - une erreur
ServiceError = truevient du service : ouvrir un ticket Microsoft avec le CorrelationId ;false= problème côté client ou configuration ; - les tables WVD ne supportent pas le plan Basic logs : elles sont en Analytics ;
- à grande échelle, appliquer les diagnostic settings par Azure Policy plutôt qu'à la main.
2.3 Azure Monitor Agent sur les session hosts#
Le plus simple : le configuration workbook d'AVD Insights (section 3.1), onglet Session host data settings, qui crée la
DCR, installe l'AMA (extension de VM, avec une system-assigned managed identity) et associe les hosts. La DCR d'Insights
collecte des compteurs de performance (processeur, mémoire, disque, User Input Delay per Session…) et des journaux
Windows (System, Application, journaux Terminal Services et FSLogix). Une DCR créée par Insights porte un nom qui commence par
microsoft-avdi-.
Piège : une session host update recrée les VM sans l'AMA. Prévoir une Azure Policy qui déploie l'agent et associe la DCR, sinon Insights perd les nouveaux hosts.
2.4 Analyser avec KQL#
Chemin : Log Analytics workspace > Logs (ou Azure Monitor > Logs avec le workspace en étendue).
Durée des connexions par utilisateur (relier Connected et Completed par CorrelationId) :
WVDConnections
| where TimeGenerated > ago(1d)
| where State in ("Connected", "Completed")
| summarize Debut = minif(TimeGenerated, State == "Connected"),
Fin = maxif(TimeGenerated, State == "Completed") by CorrelationId, UserName, SessionHostName
| extend DureeMinutes = datetime_diff("minute", Fin, Debut)
| order by DureeMinutes desc
Erreurs les plus fréquentes, en séparant service et client :
WVDErrors
| where TimeGenerated > ago(7d)
| summarize Nombre = count(), Utilisateurs = dcount(UserName) by CodeSymbolic, ServiceError, Source
| order by Nombre desc
Utilisateurs à forte latence (RTT médian au-dessus de 150 ms) :
WVDConnectionNetworkData
| where TimeGenerated > ago(1d)
| join kind=inner (WVDConnections | where State == "Connected" | project CorrelationId, UserName) on CorrelationId
| summarize RttMedian = percentile(EstRoundTripTimeInMs, 50), Rtt95 = percentile(EstRoundTripTimeInMs, 95) by UserName
| where RttMedian > 150
| order by RttMedian desc
Version et mises à jour de l'agent AVD par host :
WVDAgentHealthStatus
| where TimeGenerated > ago(1d)
| summarize arg_max(TimeGenerated, AgentVersion, LastUpgradeTimeStamp, UpgradeState, UpgradeErrorMsg) by SessionHostName
| order by AgentVersion asc
3. Superviser avec Azure Monitor#
3.1 Azure Virtual Desktop Insights#
AVD Insights est un ensemble de workbooks Azure Monitor qui lisent les tables de la section 2. Accès : portail > Azure
Virtual Desktop > Insights, ou https://aka.ms/avdi.
| Point | À retenir |
|---|---|
| Prérequis | Un Log Analytics workspace (dédié à AVD conseillé, pour isoler les coûts et les droits), les diagnostic settings, l'AMA et la DCR sur les hosts |
| Mise en place | Configuration workbook : onglet Resource diagnostic settings (host pool, workspace) puis onglet Session host data settings (DCR, AMA) ; déploiement automatisé jusqu'à 1 000 session hosts, au-delà en script ou Azure Policy |
| Droits pour lire | Desktop Virtualization Reader (objets AVD) + Log Analytics Reader (workspace) |
| Délai | Les données apparaissent avec une latence d'environ 15 minutes |
| Plusieurs host pools | Insights at scale : sélection de plusieurs abonnements, groupes de ressources et host pools |
| Agent | AMA uniquement : l'ancien Log Analytics agent (MMA) est retiré, l'ancien Insights est marqué Legacy |
3.2 Les onglets et ce qu'ils montrent#
| Onglet | Question à laquelle il répond |
|---|---|
| Overview | État global : sessions, hosts disponibles, erreurs, alertes de sévérité 0 |
| Connection Reliability | Les déconnexions : top 20 des pics, pivots par host pool, transport (UDP / TCP), client, région de gateway |
| Connection Diagnostics | Taux de réussite des connexions et erreurs par étape |
| Connection Performance | Time to connect et round-trip time (RTT) par région de gateway et par utilisateur |
| Host Diagnostics | Santé de l'agent, erreurs des hosts, compteurs au-dessus des seuils (mémoire, CPU, disque, input delay) |
| Host Performance | Tendances CPU, mémoire, disque, input delay par host |
| Users | Le parcours d'un utilisateur : connexions, erreurs, hosts utilisés |
| Utilization | Historique des sessions actives et déconnectées : base pour régler un scaling plan |
| Clients | Types et versions des clients (Windows App, Remote Desktop) |
| Alerts | Alertes Azure Monitor déclenchées sur ces ressources |
Seuils de latence d'Insights : moins de 100 ms idéal, qualité dégradée au-delà de 200 ms ; Microsoft conseille aussi un RTT de moins de 150 ms entre l'utilisateur et la région des session hosts.
3.3 Alertes et Service Health#
| Besoin | Outil |
|---|---|
| Être prévenu d'un incident du service AVD | Service Health > Health alerts > Create service health alert, service Windows Virtual Desktop / Azure Virtual Desktop, types Service issue, Planned maintenance, Health advisory, Security advisory |
| Une VM session host indisponible | Resource Health de la VM, alerte d'activité |
| Trop d'erreurs de connexion, agent en échec, host qui ne s'enregistre plus | Log search alert rule sur WVDErrors, WVDAgentHealthStatus ou WVDHostRegistrations |
| Saturation d'un host | Alerte sur les compteurs (Perf) ou metric alert sur la VM (CPU, mémoire disponible) |
| Recommandations | Azure Advisor : par exemple fixer un max session limit sur un host pool breadth-first |
Exemple de requête d'alerte (plus de 20 erreurs de service en 15 minutes) :
WVDErrors
| where ServiceError == true
| summarize Nombre = count() by bin(TimeGenerated, 15m), _ResourceId
| where Nombre > 20
3.4 Personnaliser les workbooks d'Insights#
Les workbooks livrés par Microsoft sont en lecture seule. Pour les adapter :
- ouvrir le workbook d'Insights, Edit puis Save As : choisir un nom, un abonnement, un groupe de ressources et une
région ; c'est maintenant votre workbook (ressource
Microsoft.Insights/workbooks) ; - Edit : ajouter une étape (Add > Add query, Add metric, Add parameters, Add text, Add group), écrire la requête KQL, choisir la visualisation (grid, chart, tiles, map) ;
- réutiliser les parameters existants (abonnement, host pool, plage de temps) pour que la nouvelle étape suive les filtres ;
- Done Editing, Save ; partager par Share (le lecteur doit avoir les droits sur le workbook et sur les données) ; épingler une visualisation sur un dashboard Azure si besoin.
| Ce qu'on peut faire | Comment |
|---|---|
| Ajouter un onglet maison (ex. erreurs FSLogix) | Nouvelle étape de requête sur Event filtré sur le journal FSLogix |
| Garder un modèle pour plusieurs équipes | Enregistrer en workbook template ou exporter en modèle ARM (Advanced Editor > Gallery Template) |
| Accès en lecture | Rôle Workbook Reader sur le workbook + lecture des données ; Workbook Contributor pour modifier |
Piège : une copie personnalisée ne reçoit plus les mises à jour du workbook Microsoft. Garder le workbook d'origine à côté et ne copier que ce qui manque.
4. Optimiser la capacité et la performance des session hosts#
4.1 Load balancing#
| Algorithme | Comportement | Quand le choisir |
|---|---|---|
| Breadth-first (défaut) | Choisit au hasard parmi la moitié des hosts disponibles qui ont le moins de sessions : la charge s'étale | Meilleure expérience : chaque utilisateur a plus de ressources |
| Depth-first | Remplit un host jusqu'au max session limit avant de passer au suivant | Coût : moins de hosts allumés ; exige un max session limit renseigné |
# Exemple (non exécuté) : passer un host pool en depth-first avec 10 sessions par host
az desktopvirtualization hostpool update \
--resource-group rg-avd-prd \
--name hp-avd-prd-01 \
--load-balancer-type DepthFirst \
--max-session-limit 10
- Un host pool personal n'a pas d'algorithme : l'utilisateur va toujours sur son poste.
- Créé en breadth-first sans valeur, le max session limit vaut 999999 : à corriger avant de passer en depth-first ou d'activer autoscale (qui l'exige).
- Autoscale ignore l'algorithme du host pool : il applique celui de chaque phase de son planning (section 5).
4.2 Max session limit et dimensionnement#
Recommandations Microsoft pour les hosts multi-session (Windows 10/11 Enterprise multi-session, Windows Server) :
| Charge de travail | Utilisateurs par vCPU | Exemple de taille |
|---|---|---|
| Light | 6 | D4s (4 vCPU) : environ 24 utilisateurs |
| Medium | 4 | D4s : environ 16 utilisateurs |
| Heavy | 2 | D8s : environ 16 utilisateurs |
| Power | 1 | D-series, GPU si besoin graphique |
- Microsoft recommande des VM de 4 à 24 vCPU pour le multi-session (au moins 4 cœurs) : trop petites, une session lourde pénalise les autres ; trop grosses, une panne touche beaucoup d'utilisateurs.
- Le max session limit se fixe à partir de ce ratio, puis se valide par un test de charge et par l'onglet Host Performance d'Insights.
4.3 Lire les signaux et agir#
| Signal (Insights, KQL) | Cause probable | Action |
|---|---|---|
| User Input Delay élevé, CPU saturé | Trop de sessions par host | Baisser le max session limit, VM plus grosse, plus de hosts |
| Mémoire disponible faible, page faults | Applications gourmandes | Taille avec plus de RAM (série E), revoir les applications |
| RTT élevé pour certains utilisateurs | Réseau client, région éloignée | RDP Shortpath (06), région plus proche |
| Ouverture de session lente | Profils FSLogix, stockage | Niveau Azure Files Premium, taille du partage, voir 02 |
| Beaucoup de sessions déconnectées | Utilisateurs qui ferment la fenêtre | Délais de déconnexion (GPO / Intune), ZeroActiveSessions dans le scaling plan |
| Hosts allumés la nuit sans session | Pas de scaling plan | Autoscale et Start VM on Connect |
5. Autoscale avec les scaling plans#
5.1 Power management ou dynamic autoscaling#
| Power management autoscaling | Dynamic autoscaling (préversion) | |
|---|---|---|
| Ce qu'il fait | Démarre et arrête (deallocate) les VM existantes | Démarre, arrête et crée ou supprime des session hosts |
| Host pools | Pooled et personal, standard management | Pooled avec session host configuration uniquement |
| Statut | GA | Preview ; non disponible dans Azure Government |
| Rôles de l'identité | Power On Off Contributor | Power On Off Contributor + Desktop Virtualization Virtual Machine Contributor |
| Réglages en plus | — | Taille minimale et maximale du host pool (le minimum du plan prime sur le host pool) |
À l'examen, « autoscale » sans précision = power management.
5.2 Prérequis#
- Le rôle Desktop Virtualization Power On Off Contributor attribué à la managed identity du host pool ou au service principal Azure Virtual Desktop, à la portée de chaque abonnement qui contient des host pools et des session hosts : la page de création précise qu'une portée plus basse (groupe de ressources, host pool, VM) empêche autoscale de fonctionner correctement. La page de dépannage cite aussi host pool et groupe de ressources : à l'examen, répondre abonnement.
- Pooled : max session limit renseigné (pas 999999).
- Un seul outil de scaling : pas de scaling tool (Azure Automation + Logic Apps) ni d'outil tiers sur le même host pool.
- Le scaling plan est créé dans la même région que le host pool qu'il gère ; il ne fonctionne que dans son fuseau horaire.
- Un scaling plan par host pool ; un plan peut gérer plusieurs host pools du même type (pooled ou personal, type non modifiable après création).
- Pour PowerShell : module Az.DesktopVirtualization 4.2.0 ou plus.
5.3 Pooled host pools#

| Paramètre | Sens |
|---|---|
| Phases | Ramp-up (début de journée), Peak (pic), Ramp-down (fin de journée), Off-peak (nuit) ; une heure de début chacune |
| Load balancing algorithm | Par phase ; remplace celui du host pool |
| Minimum percentage of hosts | Part des hosts à garder démarrés (arrondie au supérieur) ; ramp-up et ramp-down |
| Capacity threshold | Seuil de capacité utilisée (sessions ÷ capacité des hosts démarrés) au-delà duquel un host démarre ; le seuil du ramp-up vaut aussi pour le peak, celui du ramp-down pour l'off-peak |
| Force logoff users | Ramp-down seulement : met en drain mode, envoie la notification, attend le delay time, puis ferme les sessions |
| Stop VMs when | Ramp-down : ZeroSessions (aucune session) ou ZeroActiveSessions (sessions déconnectées tolérées) |
| Exclusion tag | Nom de tag ; une VM taguée n'est ni démarrée, ni arrêtée, ni passée en drain mode par autoscale |
| Schedules | Un ou plusieurs (semaine, week-end) ; un jour sans planning reste sur le dernier off-peak |
Comment il décide :
- il démarre un host dès que la capacité utilisée dépasse le seuil, dans n'importe quelle phase ;
- il arrête un host seulement s'il est sans session (sauf force logoff en ramp-down) et si l'arrêt ne fait pas dépasser le seuil ; jamais en ramp-up ;
- hosts nécessaires = CEILING(sessions ÷ (max session limit × capacity threshold)), en comptant les sessions déconnectées ; il garde le plus grand de ce nombre et du minimum de hosts.
Exemple : 6 hosts, max session limit 5, seuil 30 %, minimum 30 %. Au ramp-up, 2 hosts démarrent (30 % de 6 = 1,8, arrondi à 2), capacité 10. À 4 sessions, la capacité utilisée est 40 % > 30 % : un 3e host démarre (capacité 15, 27 %).
Pièges : pour un pooled, autoscale écrase le drain mode ; pendant une maintenance, poser l'exclusion tag sur les VM concernées. Une VM taguée compte toujours dans le calcul du minimum de hosts.
5.4 Personal host pools#

| Paramètre (par phase) | Valeurs |
|---|---|
| Start VM on Connect | Oui / non ; si non en ramp-up, les postes doivent être démarrés par autoscale ou à la main |
| VMs to start (ramp-up) | Assigned only, Assigned and unassigned, ou aucune |
| Disconnect settings | Délai de 0 à 360 minutes, puis action Deallocate, Hibernate ou rien |
| Log off settings | Même chose après la fermeture de session |
- Autoscale personal ne force jamais la déconnexion et ne met pas les postes en drain mode.
- Un poste démarré sur lequel personne ne se connecte est désalloué après une période d'inactivité.
- Hibernate exige que l'hibernation soit activée sur la VM (sinon autoscale ne fait rien) et n'est pas pris en charge avec FSLogix ni App Attach.
- Start VM on Connect est aussi une propriété du host pool (pooled ou personal), utilisable sans scaling plan, avec le rôle Power On Contributor (06 · 11).
5.5 Mise en œuvre#
Portail : Azure Virtual Desktop > Scaling plans > Create : Basics (région, fuseau horaire, Host pool type, Scaling method, exclusion tag), Schedules (une ligne par planning, un onglet par phase), Host pool assignments (cocher Enable autoscale).
PowerShell (exemple non exécuté, valeurs de démonstration) :
$plan = @{
ResourceGroupName = 'rg-avd-prd'
Name = 'sp-avd-prd-01'
Location = 'francecentral'
FriendlyName = 'Scaling plan bureaux'
HostPoolType = 'Pooled'
TimeZone = 'Romance Standard Time'
ExclusionTag = 'excludeFromScaling'
HostPoolReference = @(@{
'hostPoolArmPath' = '/subscriptions/<subscriptionId>/resourceGroups/rg-avd-prd/providers/Microsoft.DesktopVirtualization/hostPools/hp-avd-prd-01'
'scalingPlanEnabled' = $true
})
}
New-AzWvdScalingPlan @plan
$jours = @{
ResourceGroupName = 'rg-avd-prd'
ScalingPlanName = 'sp-avd-prd-01'
ScalingPlanScheduleName = 'semaine'
DaysOfWeek = 'Monday','Tuesday','Wednesday','Thursday','Friday'
RampUpStartTimeHour = 7; RampUpStartTimeMinute = 0
RampUpLoadBalancingAlgorithm = 'BreadthFirst'
RampUpMinimumHostsPct = 20; RampUpCapacityThresholdPct = 60
PeakStartTimeHour = 9; PeakStartTimeMinute = 0
PeakLoadBalancingAlgorithm = 'DepthFirst'
RampDownStartTimeHour = 18; RampDownStartTimeMinute = 0
RampDownLoadBalancingAlgorithm = 'DepthFirst'
RampDownMinimumHostsPct = 10; RampDownCapacityThresholdPct = 90
RampDownForceLogoffUser = $true
RampDownWaitTimeMinute = 30
RampDownNotificationMessage = 'Votre session sera fermée dans 30 minutes, enregistrez votre travail.'
RampDownStopHostsWhen = 'ZeroSessions'
OffPeakStartTimeHour = 20; OffPeakStartTimeMinute = 0
OffPeakLoadBalancingAlgorithm = 'DepthFirst'
}
New-AzWvdScalingPlanPooledSchedule @jours
# Vérifier l'association
(Get-AzWvdScalingPlan -ResourceGroupName 'rg-avd-prd' -Name 'sp-avd-prd-01').HostPoolReference |
Format-List HostPoolArmPath, ScalingPlanEnabled
Pour un personal : New-AzWvdScalingPlanPersonalSchedule (paramètres RampUpStartVMOnConnect, RampUpAutoStartHost,
actions de déconnexion et de fermeture par phase).
Terraform (ressource azurerm_virtual_desktop_scaling_plan, arguments vérifiés dans le registre, azurerm 5.10.0) :
# ==== Scaling plan pooled : jours ouvrés, rôle Power On Off Contributor pour le service AVD ====
data "azuread_service_principal" "avd" {
client_id = "9cdead84-a844-4324-93f2-b2e6bb768d07" # service principal Azure Virtual Desktop
}
resource "azurerm_role_assignment" "avd_power" {
scope = data.azurerm_subscription.current.id # portée abonnement recommandée par Microsoft
role_definition_name = "Desktop Virtualization Power On Off Contributor"
principal_id = data.azuread_service_principal.avd.object_id
}
resource "azurerm_virtual_desktop_scaling_plan" "bureaux" {
name = local.scaling_plan_name
location = azurerm_resource_group.avd.location # même région que le host pool
resource_group_name = azurerm_resource_group.avd.name
time_zone = "Romance Standard Time"
exclusion_tag = "excludeFromScaling"
schedule {
name = "semaine"
days_of_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
ramp_up_start_time = "07:00"
ramp_up_load_balancing_algorithm = "BreadthFirst"
ramp_up_minimum_hosts_percent = 20
ramp_up_capacity_threshold_percent = 60
peak_start_time = "09:00"
peak_load_balancing_algorithm = "DepthFirst"
ramp_down_start_time = "18:00"
ramp_down_load_balancing_algorithm = "DepthFirst"
ramp_down_minimum_hosts_percent = 10
ramp_down_capacity_threshold_percent = 90
ramp_down_force_logoff_users = true
ramp_down_wait_time_minutes = 30
ramp_down_notification_message = "Votre session sera fermée dans 30 minutes, enregistrez votre travail."
ramp_down_stop_hosts_when = "ZeroSessions"
off_peak_start_time = "20:00"
off_peak_load_balancing_algorithm = "DepthFirst"
}
host_pool {
hostpool_id = azurerm_virtual_desktop_host_pool.bureaux.id
scaling_plan_enabled = true
}
depends_on = [azurerm_role_assignment.avd_power] # sans le rôle, autoscale échoue en silence
}
La page du registre parle encore de préversion et d'un rôle personnalisé : c'est daté, Microsoft Learn documente le rôle built-in Desktop Virtualization Power On Off Contributor. Une association séparée existe aussi (
azurerm_virtual_desktop_scaling_plan_host_pool_association) : utiliser l'une ou l'autre, pas les deux.
5.6 Suivre et dépanner l'autoscale#
- Activer la catégorie Autoscale dans les diagnostic settings du host pool : chaque évaluation arrive dans
WVDAutoscaleEvaluationPooled(colonnesConfig…= réglages de la phase en cours). SiResultType == "Failed", joindreWVDErrorsparCorrelationId. - Insights propose une vue des opérations d'autoscale.
WVDAutoscaleEvaluationPooled
| where TimeGenerated > ago(1d) and ResultType == "Failed"
| join kind=leftouter (WVDErrors | project CorrelationId, CodeSymbolic, Message) on CorrelationId
| project TimeGenerated, _ResourceId, CodeSymbolic, Message
Causes classiques d'échec : rôle absent ou mal placé, max session limit à 999999, autre outil de scaling actif, VM verrouillée par une resource lock ou une policy, quota de cœurs atteint.
6. Gérer les sessions actives et les application groups#
6.1 Sessions et drain mode#
Chemin : host pool > Sessions (une ligne par session : utilisateur, host, état Active ou Disconnected, heure) et host pool
Session hosts.
| Action | Où | Effet |
|---|---|---|
| Send message | Sessions | Message à l'utilisateur (prévenir avant une maintenance) |
| Disconnect | Sessions | Coupe la connexion ; la session reste ouverte sur le host |
| Log off | Sessions | Ferme la session (travail non enregistré perdu) |
| Turn drain mode on (Allow new sessions = No) | Session hosts | Le host n'accepte plus de nouvelles sessions ; les sessions en cours continuent |
| Remove | Session hosts | Retire le host du host pool (la VM n'est pas supprimée) |
Procédure de maintenance d'un host pooled : exclusion tag (si autoscale), drain mode, message, attente, log off des restants, maintenance, puis retrait du drain mode et du tag.
6.2 PowerShell#
# Exemples (non exécutés) : lister, prévenir, vider un host
$hp = @{ ResourceGroupName = 'rg-avd-prd'; HostPoolName = 'hp-avd-prd-01' }
Get-AzWvdUserSession @hp | Select-Object Name, UserPrincipalName, SessionState, CreateTime
Update-AzWvdSessionHost @hp -Name 'avd-prd-0.contoso.local' -AllowNewSession:$false # drain mode
Send-AzWvdUserSessionMessage @hp -SessionHostName 'avd-prd-0.contoso.local' -UserSessionId 2 `
-MessageTitle 'Maintenance' -MessageBody 'Fermeture de session dans 15 minutes.'
Disconnect-AzWvdUserSession @hp -SessionHostName 'avd-prd-0.contoso.local' -Id 2 # déconnecter
Remove-AzWvdUserSession @hp -SessionHostName 'avd-prd-0.contoso.local' -Id 2 # fermer la session
Après un changement de drain mode, attendre environ 60 secondes avant de relire l'état.
6.3 Application groups#
Ce qu'on surveille et gère au quotidien (la création est au chapitre 03 · 1, les applications au chapitre 07 · 2) :
| Tâche | Comment |
|---|---|
| Qui a accès | App group > Assignments : utilisateurs et groupes avec le rôle Desktop Virtualization User |
| Visible dans le flux | L'app group doit être enregistré dans un workspace ; sinon l'utilisateur ne voit rien |
| Erreurs de lancement, d'accès | Diagnostic settings de l'app group (WVDErrors, WVDCheckpoints) ; onglet Users d'Insights |
| Flux non mis à jour chez l'utilisateur | WVDFeeds (workspace) ; rafraîchir le client |
| Changer le nom affiché | Friendly name de l'app group ou de l'application |
Get-AzWvdApplicationGroup -ResourceGroupName 'rg-avd-prd' |
Select-Object Name, ApplicationGroupType, HostPoolArmPath, WorkspaceArmPath
Get-AzRoleAssignment -Scope (Get-AzWvdApplicationGroup -ResourceGroupName 'rg-avd-prd' -Name 'ag-desktop').Id `
-RoleDefinitionName 'Desktop Virtualization User'
7. Stratégie de mise à jour des session hosts#
7.1 Deux approches#

| Image-based servicing (remplacer) | Patch in-place (patcher) | |
|---|---|---|
| Principe | Mettre à jour l'image, puis redéployer les hosts | Installer les mises à jour dans chaque VM |
| Pour | Pooled (recommandé par Microsoft) | Personal, pooled en standard management sans pipeline d'image |
| Outils | Session host update (host pool avec session host configuration), redéploiement depuis Compute Gallery | Azure Update Manager, Windows Update for Business / Windows Autopatch (Intune), Configuration Manager, WSUS |
| Avantages | Hosts identiques, retour arrière = image N-1, pas de dérive | Simple, garde l'état du poste |
| Limites | Personnalisations manuelles perdues ; il faut un pipeline d'image (04 · 7) | Dérive de configuration, durée des patchs pendant les heures ouvrées |
flowchart TD
A[Host pool à mettre à jour] --> B{Type ?}
B -->|Personal| C[Patch in-place : Windows Update for Business, Autopatch, Configuration Manager, Update Manager]
B -->|Pooled| D{Session host configuration ?}
D -->|Oui| E[Nouvelle image dans Compute Gallery puis Session host update]
D -->|Non| F[Nouvelle image puis redéploiement des hosts ; à défaut Update Manager]
E --> G[Tester sur un host pool de validation, garder l'image N-1]
F --> G
7.2 Session host update#
Fonction d'un host pool avec session host configuration : elle remplace les hosts par de nouveaux, construits sur la configuration mise à jour (image, taille de VM, type de disque, security type : Standard, Trusted launch, Confidential, identifiants de jonction AD, enrôlement Intune, compte admin local, script PowerShell de configuration).
Déroulé :
- un premier host, l'initial, est mis à jour seul pour valider le processus ;
- puis les autres par batch (nombre de hosts indisponibles en même temps) ; exemple : 10 hosts, batch de 3 = l'initial puis 3 batches de 3, au moins 7 hosts disponibles à tout moment ;
- pour chaque host : notification aux utilisateurs et attente (0 à 60 minutes), fermeture des sessions, drain mode,
retrait du host pool (l'objet ordinateur AD est conservé), création d'une nouvelle VM nommée
SessionHostName-DateTimeavec le même hostname, ajout au host pool, puis suppression de l'ancienne VM.
| Règle | Détail |
|---|---|
| Planification | Immédiate ou programmée (jusqu'à 2 semaines à l'avance) ; compter environ 20 minutes par host |
| Concurrence | Une seule opération par host pool ; plusieurs host pools en parallèle possibles |
| Autoscale | Désactiver le scaling plan pendant l'update, sinon échec possible |
| Identité | Utiliser la managed identity du host pool (obligatoire pour un Key Vault en accès privé) |
| Quotas | Les nouvelles VM consomment du quota de cœurs pendant le batch |
| Limites | Global Azure seulement ; image de la Compute Gallery dans le même abonnement ; taille du disque OS inchangée ; AMA non réinstallé |
| Contrôle | Pause, reprise, annulation, nouvel essai ; progression qui n'avance qu'à chaque host terminé |
7.3 Patch in-place#
- Azure Update Manager : évaluation périodique, maintenance configurations (fenêtres planifiées), patch à la demande ; la VM doit être en orchestration Customer Managed Schedules pour les fenêtres planifiées.
- Windows Update for Business / Windows Autopatch via Intune pour les hosts inscrits à Intune ; Configuration Manager pour les parcs existants.
- Avant une fenêtre de patch sur un pooled : exclusion tag + drain mode sur les hosts concernés, et une fenêtre hors des heures ouvrées ; les hosts doivent être démarrés (Start VM on Connect ne démarre pas une VM pour un patch).
7.4 L'agent Azure Virtual Desktop#
L'agent (et le side-by-side stack, l'agent boot loader) se met à jour automatiquement, par vagues (flights) étalées sur environ 5 jours. Scheduled Agent Updates permet de choisir quand :
| Point | Détail |
|---|---|
| Activation | Host pool > Scheduled Agent Updates ; désactivé par défaut ; host pools existants seulement |
| Fenêtres | Une ou deux fenêtres de maintenance de 2 heures (jour et heure) |
| Échecs | Après 4 essais infructueux, la mise à jour est imposée ; les mises à jour critiques passent hors fenêtre |
| Conditions | Hosts démarrés pendant la fenêtre |
| Suivi | WVDAgentHealthStatus (AgentVersion, LastUpgradeTimeStamp, UpgradeState, UpgradeErrorMsg), événement 3277 dans le journal Application en cas d'échec |
7.5 Que recommander#
| Situation | Recommandation |
|---|---|
| Pooled, session host configuration | Image mensuelle (Patch Tuesday) dans Compute Gallery, session host update hors heures ouvrées, host pool de validation d'abord |
| Pooled, standard management | Même logique d'image, redéploiement des hosts ; Azure Update Manager en complément pour les correctifs urgents |
| Personal | Windows Update for Business / Autopatch ou Configuration Manager, anneaux (pilote puis production), Start VM on Connect désactivé pendant la fenêtre si les VM doivent rester allumées |
| Agent AVD | Scheduled Agent Updates calé sur la fenêtre de maintenance |
| Applications | Dans l'image ou par App Attach (07 · 6) |
8. Plan de reprise après sinistre#
8.1 Le partage des responsabilités#
Le plan de reprise couvre quatre couches, chacune avec sa méthode :
| Couche | Méthode de reprise | RPO / RTO indicatifs (doc d'architecture Microsoft) |
|---|---|---|
| Control plane | Géré par Microsoft, métadonnées répliquées dans la géographie | Aucun travail de votre part |
| Session hosts pooled | Second host pool dans une autre région (actif ou hot standby), ou Site Recovery | Active-active : quasi nul ; active-passive : 15 à 60 min de RTO |
| Session hosts personal | Azure Site Recovery (réplication des VM) | RPO de 5 à 15 min environ |
| Profils FSLogix | Cloud Cache vers deux stockages, ou réplication du stockage, ou sauvegarde | Selon l'option (section 8.5) |
| Images | Replicas de la Compute Gallery dans la région de reprise | Image disponible immédiatement |
Les chiffres de RPO et RTO sont des estimations du centre d'architecture : chaque plan doit être mesuré par un test.
8.2 Haute disponibilité dans une région#
| Option | Protège contre | SLA VM |
|---|---|---|
| Availability zones | Panne d'un datacenter de la région | 99,99 % |
| Availability sets | Panne d'un rack ou d'une maintenance (un seul datacenter) | 99,95 % |
Microsoft recommande les availability zones quand la région et la taille de VM les supportent, et du stockage ZRS pour les profils dans la même logique.
8.3 Personal host pools avec Site Recovery#

- Microsoft recommande Site Recovery pour les host pools personal (possible aussi en pooled) ; la région cible doit être alignée sur la reprise du stockage FSLogix.
- Architecture Azure to Azure : pas d'intégration directe à AVD, réplication VM par VM ; le host pool reste unique (pas de second host pool, ni de workspace supplémentaire).
- Failover et failback déclenchés par l'administrateur (portail, API, PowerShell), puis reprotect pour revenir.
- Ne pas utiliser le test failover de Site Recovery sur des session hosts : la VM dupliquée s'enregistre au control plane et entre en conflit avec l'originale. Tester plutôt en démarrant les hosts secondaires avec un groupe d'utilisateurs de test.
- Site Recovery et Azure Backup peuvent protéger la même VM.
8.4 Pooled host pools#
Second host pool dans la région de reprise, construit depuis la même image (replica de la gallery) :
- hot standby : hosts créés mais arrêtés (coût du stockage seulement) ou au minimum par un scaling plan ; un recovery plan Site Recovery peut orchestrer le démarrage ;
- app groups propres au second host pool ; à la bascule, retirer les affectations du host pool principal et affecter les utilisateurs au secondaire (ou les deux en active-active, chaque utilisateur sur une seule région) ;
- les deux host pools doivent rester alignés (image, applications, GPO, réglages RDP).
8.5 Les profils FSLogix#
Le détail de Cloud Cache est au chapitre 02 · 10. Les options de reprise :
| Option | Principe | Quand |
|---|---|---|
| No profile recovery | En cas de sinistre, l'utilisateur repart d'un profil neuf | Profils jetables, données dans OneDrive |
| Cloud Cache primary / failover | CCDLocations vers deux stockages (régions différentes), écriture asynchrone, un seul actif |
Active-passive avec reprise des profils |
| Cloud Cache active / active | Deux host pools, chacun écrit d'abord dans son stockage local puis réplique vers l'autre | Active-active |
| Réplication du stockage | Azure Files ZRS ou GRS, Azure NetApp Files cross-region replication | Environnements moins critiques |
Règles :
- GRS n'existe pas pour Azure Files Premium, ni pour le Standard avec large file shares activé : d'où Cloud Cache ;
- Cloud Cache : jusqu'à 4 emplacements ; il ne rend pas les ouvertures de session plus rapides (souvent un peu plus lentes) ;
- séparer Profile container et Office container ; ne pas rendre l'Office container résilient (il se reconstruit) ;
- rediriger les dossiers connus vers OneDrive (Known Folder Move) réduit ce qu'il faut protéger.
8.6 Tester et dérouler le plan#
sequenceDiagram
participant Ops as Exploitation
participant SH as Service Health
participant B as Région B
participant U as Utilisateurs
SH->>Ops: Alerte Service issue région A
Ops->>Ops: Décision de bascule (RTO, RPO)
Ops->>B: Démarrer les hosts (scaling plan ou recovery plan)
Ops->>B: Vérifier enregistrement des hosts (WVDHostRegistrations)
Ops->>U: Affecter les utilisateurs aux app groups de B
U->>B: Connexion, profil depuis l'emplacement Cloud Cache de B
Ops->>Ops: Retour en A : même chemin à l'envers, puis reprotect
Le plan doit lister : déclencheur et décideur, ordre de démarrage (réseau, AD DS, DNS, stockage, hosts), comptes et groupes à
réaffecter, vérifications (Insights, WVDConnections dans la région B), retour arrière, et la fréquence des tests.
9. Déploiement multi-région#

| Active-passive | Active-active | |
|---|---|---|
| Principe | Région B prête, démarrée à la bascule | Deux host pools en service en permanence |
| Type de host pool | Pooled et personal (Site Recovery) | Pooled uniquement (un poste personnel ne change pas de VM) |
| Utilisateurs | Réaffectés à la bascule | Chacun rattaché à une région ; réaffecté à l'autre en cas de sinistre |
| Profils | Cloud Cache primary / failover, ou réplication | Cloud Cache active / active |
| Coût, complexité | Plus faible | Plus élevé (deux environnements à tenir alignés) |
| Recommandation Microsoft | À privilégier si le RPO et le RTO sont tenus | Quand l'indisponibilité doit être quasi nulle |
Ce que la région B doit avoir avant le sinistre :
- réseau (hub, spoke, peering, connectivité hybride), DNS, contrôleurs AD DS ou Microsoft Entra Domain Services si les hosts sont joints à un domaine ;
- quotas de cœurs suffisants et, pour les charges critiques, des capacity reservations ;
- replicas de l'image dans la Compute Gallery (au moins deux copies par région, ZRS si possible) ;
- stockage des profils, applications métier et données qu'utilisent les sessions ;
- supervision : un Log Analytics workspace commun aux deux régions donne une vue unifiée dans Insights, mais il tombe avec sa région ; un workspace par région est plus résilient.
10. Stratégie de sauvegarde#
10.1 Quoi sauvegarder#

| Élément | Sauvegarder ? | Comment |
|---|---|---|
| Profils FSLogix sur Azure Files | Oui | Azure Backup du partage (Recovery Services vault) |
| Profils FSLogix sur Azure NetApp Files | Oui | Snapshot policies et Azure NetApp Files backup |
| Postes personnels | Oui | Azure VM backup (Recovery Services vault) |
| Session hosts pooled | Non (supporté mais inutile) | Sans état : redéployer depuis l'image |
| Images | Versionner | Compute Gallery : versions, replicas ; le pipeline de construction est la vraie sauvegarde |
| Packages App Attach | Oui | Partage Azure Files sauvegardé comme les profils |
| Objets AVD (host pools, app groups) | Code | Terraform ou Bicep dans un dépôt Git ; rien à sauvegarder côté Microsoft |
10.2 Configurer sauvegarde et restauration#
Profils FSLogix sur Azure Files (portail : storage account > File shares > le partage > Backup) :
| Étape | Point clé |
|---|---|
| Vault | Recovery Services vault dans la même région et le même abonnement que le storage account |
| Policy | Niveau Snapshot (instantanés locaux au compte, protège d'une suppression accidentelle) ou Vault-Standard (copie dans le vault, rétention longue jusqu'à 10 ans, protection contre les rançongiciels, restauration inter-régions selon la région) ; jusqu'à 24 snapshots par jour |
| Réseau | Si le storage account est filtré : exception Allow Azure services on the trusted services list |
| Horaire | Hors des heures d'ouverture de session : un snapshot est crash-consistent, un VHDX monté peut être capturé en cours d'écriture |
| Restauration | Full share (même emplacement ou autre) ou item-level : un seul fichier, par exemple le VHDX d'un utilisateur, avec l'utilisateur déconnecté |
Profils sur Azure NetApp Files : snapshot policy (horaire, quotidienne, hebdomadaire) sur le volume, Azure NetApp Files
backup pour une copie hors du volume, cross-region replication pour la reprise ; restauration d'un fichier depuis le dossier
~snapshot ou d'un volume depuis un snapshot.
Postes personnels (VM) :
| Étape | Point clé |
|---|---|
| Activer | VM > Backup ou vault > + Backup > Azure Virtual Machine |
| Policy | Standard (une sauvegarde par jour) ou Enhanced (plusieurs par jour, obligatoire pour Trusted launch) |
| Restaurer | Create new VM, Replace existing (disques), Restore disks, ou File Recovery (montage d'un point de restauration pour récupérer des fichiers) |
| Après restauration | Vérifier que la VM est toujours enregistrée dans le host pool et affectée au bon utilisateur |
Images :
- garder au moins la version N-1 dans la Compute Gallery pour revenir en arrière ; marquer une version Exclude from latest si elle ne doit plus être choisie par défaut ;
- replicas dans la région de reprise, stockage ZRS quand c'est disponible ;
- le pipeline (Azure VM Image Builder, Packer, scripts) en Git : il reconstruit l'image à l'identique (04 · 4).
11. Labs conseillés#
À faire dans un abonnement de test avec un host pool pooled de 2 hosts (D2s_v5 ou B-series) et un personal de 1 host. Coût : celui des VM pendant les heures de lab, l'ingestion Log Analytics (quelques centaines de Mo), le stockage Azure Files et le vault. Nettoyage : supprimer le groupe de ressources du lab, le scaling plan, le vault (désactiver le soft delete des éléments de test avant).
- Insights de bout en bout : créer un workspace dédié, lancer le configuration workbook (diagnostic settings puis AMA et DCR), se connecter avec deux utilisateurs, exécuter les requêtes KQL de la section 2.4. Résultat attendu : après environ 15 minutes, les onglets Overview, Connection Performance et Host Performance se remplissent.
- Workbook personnalisé : Save As du workbook Insights, ajouter une étape « erreurs de service par host pool » avec le paramètre de plage de temps, partager en lecture à un collègue. Résultat attendu : la nouvelle étape suit les filtres ; le collègue sans Log Analytics Reader ne voit pas les données.
- Scaling plan pooled : rôle Power On Off Contributor, max session limit 2, seuil 50 %, minimum 50 %, une phase ramp-up qui
commence dans 10 minutes ; connecter 2 puis 3 utilisateurs. Résultat attendu : le second host démarre au-delà du seuil ;
WVDAutoscaleEvaluationPooledexplique chaque décision. Poser l'exclusion tag sur un host et constater qu'il n'est plus touché. - Sessions et maintenance : drain mode sur un host,
Send-AzWvdUserSessionMessage, puisRemove-AzWvdUserSession. Résultat attendu : les nouvelles connexions vont sur l'autre host ; la session fermée disparaît de la liste. - Sauvegarde des profils : sauvegarder le partage FSLogix (policy Snapshot), supprimer le VHDX d'un utilisateur de test déconnecté, le restaurer en item-level. Résultat attendu : l'utilisateur retrouve son profil à la connexion suivante.
12. Les pièges d'examen#
| Situation dans la question | Réponse | Pourquoi |
|---|---|---|
| Insights vide pour les nouveaux hosts après une session host update | Azure Policy pour l'AMA et la DCR | La session host update ne réinstalle pas l'agent |
| Lire Insights avec le moindre privilège | Desktop Virtualization Reader + Log Analytics Reader | Il faut les objets AVD et les données du workspace |
Une erreur avec ServiceError = true |
Ticket Microsoft avec le CorrelationId | L'erreur vient du service, pas de la configuration |
Connexions qui restent en Started sans Connected |
Problème entre client et host (réseau, agent, capacité) | Connected n'arrive que si l'utilisateur atteint la VM |
| Réduire le coût de Log Analytics des tables WVD avec Basic logs | Impossible | Les tables WVD ne supportent pas Basic logs : réduire les compteurs, la rétention, un workspace dédié |
| Modifier un onglet d'Insights | Save As puis éditer la copie | Les workbooks Microsoft sont en lecture seule ; la copie ne reçoit plus les mises à jour |
| Passer en depth-first échoue ou autoscale ne démarre rien | Renseigner le max session limit | Breadth-first à la création laisse 999999 |
| Autoscale n'agit pas | Rôle Power On Off Contributor sur l'identité du host pool ou le service principal AVD, à l'abonnement | Sans rôle, aucune VM ne démarre |
| Le drain mode posé pour une maintenance saute tout seul | Exclusion tag | Autoscale pooled écrase le drain mode |
| Un même host pool dans deux scaling plans | Impossible | Un seul plan par host pool (un plan peut couvrir plusieurs host pools du même type) |
| Scaling tool Automation + scaling plan | L'un ou l'autre | Les deux sur le même host pool sont interdits |
| Fermer de force les sessions d'un personal le soir | Impossible avec autoscale | Le personal ne force jamais la déconnexion ; actions après déconnexion ou fermeture seulement |
| Hibernate sur des postes avec FSLogix | Non supporté | Hibernation incompatible avec FSLogix et App Attach |
| Créer et supprimer des hosts selon la charge | Dynamic autoscaling (préversion) | Pooled avec session host configuration uniquement |
| Mettre à jour un pooled | Nouvelle image + session host update | Recommandation Microsoft : servicing par l'image |
| Mettre à jour un personal | Windows Update for Business, Configuration Manager, Update Manager | Le poste a un état, on ne le recrée pas |
| Session host update pendant qu'autoscale tourne | Désactiver autoscale pendant l'update | Sinon échec à l'exécution |
| Choisir l'heure des mises à jour de l'agent AVD | Scheduled Agent Updates (2 fenêtres de 2 h) | Désactivé par défaut ; les critiques passent quand même |
| Reprise d'un personal host pool | Azure Site Recovery | Recommandé par Microsoft ; le host pool reste unique |
| Tester la reprise Site Recovery des session hosts | Pas de test failover | La VM dupliquée entre en conflit au control plane |
| Active-active pour des postes personnels | Impossible | Active-active = pooled uniquement |
| GRS pour des profils sur Azure Files Premium | Impossible : Cloud Cache ou réplication applicative | GRS n'existe pas en Premium ni avec large file shares |
| Sauvegarder les VM d'un pooled | Inutile | Sans état : redéploiement depuis l'image |
| Vault pour sauvegarder un partage Azure Files | Même région, même abonnement que le storage account | Contrainte d'Azure Backup pour Azure Files |
13. Scénarios d'entraînement#
1. Contoso a activé les diagnostic settings de ses host pools. Le support veut savoir quel host est saturé quand les utilisateurs se plaignent de lenteur, mais Insights n'affiche rien dans Host Performance. Que manque-t-il ?
Les données des session hosts : l'Azure Monitor Agent et la data collection rule d'Insights, à déployer depuis le configuration workbook (onglet Session host data settings). Les diagnostic settings ne couvrent que le service.
2. Un auditeur doit consulter Insights pour trois host pools sans pouvoir rien modifier. Quels rôles ?
Desktop Virtualization Reader sur les host pools (ou leur groupe de ressources) et Log Analytics Reader sur le workspace.
3. L'équipe veut ajouter à Insights un onglet des erreurs FSLogix et garder les mises à jour de Microsoft sur le reste. Que faire ?
Save As du workbook Insights dans un groupe de ressources de l'équipe, ajouter une étape de requête sur
Event(journal FSLogix) avec les paramètres existants ; garder le workbook Microsoft d'origine en parallèle, car la copie ne reçoit plus ses mises à jour.
4. Un host pool pooled de 20 hosts D4s, en breadth-first, coûte trop cher la nuit et le week-end. Les utilisateurs arrivent entre 7 h et 9 h. Que mettre en place ?
Un scaling plan power management : rôle Power On Off Contributor à l'identité du host pool ou au service principal AVD (abonnement), max session limit renseigné, planning semaine (ramp-up 7 h breadth-first, peak 9 h, ramp-down 18 h avec notification puis force logoff ou
ZeroActiveSessions, off-peak 20 h depth-first) et un planning week-end au minimum.
5. Pendant une maintenance, l'administrateur passe deux hosts en drain mode ; une heure plus tard, ils acceptent de nouveau des sessions. Pourquoi et comment l'éviter ?
Autoscale écrase le drain mode des pooled. Poser l'exclusion tag du scaling plan sur ces VM pendant la maintenance, puis le retirer.
6. Une agence d'architecture a des postes personnels avec GPU. Les utilisateurs se déconnectent sans fermer leur session le soir et la facture reste élevée. Que configurer ?
Un scaling plan personal : Start VM on Connect activé, et dans Disconnect settings un délai (par exemple 60 minutes) puis Deallocate. Pas d'hibernation si les postes utilisent FSLogix. Autoscale ne forcera pas la fermeture de session.
7. Fabrikam a un host pool pooled avec session host configuration et veut appliquer chaque mois les correctifs de sécurité sans dérive entre hosts. Quelle stratégie ?
Image-based servicing : construire chaque mois une nouvelle version d'image dans la Compute Gallery, la valider sur un host pool de test, puis lancer une session host update programmée hors heures ouvrées (batch adapté à la capacité, notification), autoscale désactivé pendant l'opération ; garder la version N-1.
8. Une banque héberge 300 postes personnels en France Central et exige une reprise en région secondaire avec un RPO de quelques minutes. Que proposer, et quel test éviter ?
Azure Site Recovery (Azure to Azure) vers la région appariée, le host pool restant unique ; dépendances (réseau, AD DS, DNS, quotas) prêtes en région B ; failover et failback VM par VM. Ne pas utiliser le test failover : tester en démarrant des hosts secondaires avec un groupe de test.
9. Un éditeur a deux host pools pooled en West Europe et North Europe et veut qu'un utilisateur retrouve son profil où qu'il se connecte après une panne régionale. Les profils sont sur Azure Files Premium. Quelle solution pour les profils ?
FSLogix Cloud Cache avec
CCDLocationsvers un partage dans chaque région (active-active ou primary / failover). Le GRS n'est pas disponible pour Azure Files Premium. Séparer Profile et Office container, Office container non répliqué.
10. Le RSSI demande une stratégie de sauvegarde AVD : profils sur Azure Files Premium, 50 postes personnels, 400 hosts pooled. Que sauvegarder ?
Azure Backup du partage des profils (vault dans la même région et le même abonnement, sauvegarde hors des heures d'ouverture de session, restauration item-level d'un VHDX) ; Azure VM backup des 50 postes personnels ; pas de sauvegarde des hosts pooled (sans état), mais des versions d'image dans la Compute Gallery avec replicas et le pipeline d'image dans Git.
11. Après une restauration d'un poste personnel avec Create new VM, l'utilisateur ne voit plus son bureau. Que vérifier ?
Que la nouvelle VM est enregistrée dans le host pool (agent AVD,
WVDHostRegistrations) et que l'utilisateur lui est affecté ; l'ancienne VM peut encore figurer comme session host indisponible.
14. Pour aller plus loin (au-delà de l'examen)#
- Azure Monitor Baseline Alerts (AMBA) propose des alertes AVD prêtes à déployer (Policy initiative) pour démarrer vite.
- Cost Management : étiqueter les VM par host pool et suivre l'effet du scaling plan semaine après semaine.
- Capacity reservations dans la région de reprise pour garantir le démarrage des VM lors d'un incident régional.
- Le centre d'architecture (Multiregion BCDR for Azure Virtual Desktop) détaille les procédures de failover et de failback pour chaque modèle.
- Les mêmes requêtes KQL peuvent alimenter Microsoft Sentinel (connexions anormales, voir SC-500 chapitre 11).
15. Fiche à retenir#
- Deux flux : diagnostic settings (host pool, app group, workspace → tables WVD) + AMA et DCR sur les hosts (
Perf,Event). - Connexions :
Started→Connected→Completed;ServiceError = true= ticket Microsoft avec le CorrelationId. - Insights :
aka.ms/avdi, configuration workbook, workspace dédié, ~15 min de délai, 1 000 hosts en automatique, Desktop Virtualization Reader + Log Analytics Reader. - Workbook : Save As puis éditer ; la copie ne reçoit plus les mises à jour.
- Load balancing : breadth-first (expérience) / depth-first (coût, exige le max session limit, 999999 par défaut).
- Dimensionnement multi-session : Light 6, Medium 4, Heavy 2, Power 1 utilisateurs par vCPU ; VM de 4 à 24 vCPU.
- Autoscale : rôle Power On Off Contributor (identité du host pool ou service principal AVD, abonnement), un plan par host pool, même région, fuseau du plan, pas d'autre outil.
- Pooled : 4 phases, capacity threshold et minimum % hosts ; démarre dans toute phase, n'arrête jamais en ramp-up ; force logoff en ramp-down seulement ; exclusion tag car autoscale écrase le drain mode.
- Personal : Start VM on Connect, VMs to start, actions après déconnexion / fermeture (0 à 360 min), jamais de force logoff ; Hibernate incompatible FSLogix et App Attach.
- Dynamic autoscaling = préversion, pooled avec session host configuration, crée et supprime des hosts.
- Sessions : drain mode (Allow new sessions = No), message, disconnect, log off ; rôles User Session Operator et Session Host Operator.
- Mises à jour : pooled = image + session host update (initial puis batches, 0 à 60 min de notification, ~20 min par host, autoscale désactivé) ; personal = WUfB / Autopatch / ConfigMgr / Update Manager.
- Agent : Scheduled Agent Updates, 2 fenêtres de 2 h, désactivé par défaut, critiques imposées, événement 3277.
- Reprise : personal = Site Recovery (host pool unique, pas de test failover) ; pooled = second host pool (hot standby ou actif) ; zones 99,99 %.
- Multi-région : active-passive à privilégier ; active-active = pooled seulement, Cloud Cache active / active ; dépendances et quotas en région B.
- Profils : Cloud Cache (4 emplacements max), pas de GRS en Premium ni avec large file shares, séparer Profile et Office container.
- Sauvegarde : Azure Files (vault même région et abonnement, Snapshot ou Vault-Standard, item-level), ANF snapshots, Azure VM backup des personnels, pas des pooled, images N-1 et replicas.
Références#
Toutes lues le 22/10/2026 :
- Study guide for Exam AZ-140
- Send diagnostic data to Log Analytics for Azure Virtual Desktop
- Log Analytics tables for microsoft.desktopvirtualization/hostpools
- Enable Insights to monitor Azure Virtual Desktop
- Use cases for Azure Virtual Desktop Insights
- Azure Virtual Desktop Insights glossary
- Azure Workbooks overview
- Create service health alerts
- Configure host pool load balancing
- Session host virtual machine sizing guidelines
- Autoscale scaling plans and example scenarios
- Create and assign an autoscale scaling plan (power management)
- Autoscale glossary et Autoscale FAQ
- Monitor Autoscale operations with Insights
- Assign Azure RBAC roles or Microsoft Entra roles to a service principal
- Built-in Azure RBAC roles for Azure Virtual Desktop
- Start VM on Connect
- Drain mode
- Terraform azurerm_virtual_desktop_scaling_plan
- Session host update for Azure Virtual Desktop
- Scheduled Agent Updates
- Azure Update Manager overview
- Azure Virtual Desktop disaster recovery concepts
- Business continuity and disaster recovery considerations for Azure Virtual Desktop
- Multiregion BCDR for Azure Virtual Desktop
- FSLogix container recovery and business continuity
- Storage options for FSLogix profile containers
- About Azure Files backup et Back up Azure Files
- About Azure VM backup
- Azure Site Recovery: Azure to Azure disaster recovery architecture