Redirection de dossiers et profils via GPO¶
Ce que vous allez apprendre
- Le rôle des CSE Folder Redirection (
{25537BA6-77A8-11D2-9B6C-0000F8080861}) et Offline Files ({C631DF4C-088F-4156-B058-4375F0853CD8}), leur format XML dans le GPT et leur interaction - Les 9 dossiers redirectibles, leurs chemins de registre sous
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders, la redirection de base et avancée (par groupe) - Le mécanisme des profils itinérants (Roaming Profiles) : attribut
profilePath, extension.V6, fichierNTUSER.DAT, comportement de fusion à la déconnexion, Event IDs clés - Les profils obligatoires : renommage en
ntuser.man, comportement en lecture seule, cas d'usage kiosk, piège des fichiers.LOG - FSLogix Profile Container : VHD/VHDX monté à l'ouverture de session, clés de registre
HKLM\SOFTWARE\FSLogix\Profiles\, déploiement via préférences de registre GPO - L'architecture cible correcte : FSLogix + redirection de dossiers pour les Documents (pourquoi les deux ensemble)
- Les pièges de production : perte de données avec "Move contents", profil itinérant non borné, conflits de version
.V2/.V6
Si vous ne retenez qu'une chose
La redirection de dossiers et les profils itinérants répondent à des besoins distincts. La redirection déplace des données (Documents, Desktop) vers un UNC — elles restent sur le serveur de fichiers, le profil local ne les contient pas. Le profil itinérant déplace le profil entier (NTUSER.DAT + AppData\Roaming) d'une machine à l'autre. Les deux peuvent coexister, et avec FSLogix c'est l'architecture recommandée pour les environnements multi-sessions.
CSE Folder Redirection et Offline Files¶
GUIDs et enregistrement¶
Deux CSE interviennent dans la redirection de dossiers. Elles sont distinctes et ont des rôles complémentaires.
| CSE | GUID | DLL | Rôle |
|---|---|---|---|
| Folder Redirection | {25537BA6-77A8-11D2-9B6C-0000F8080861} | fdeploy.dll | Lit la configuration XML et redirige les Shell Folders |
| Offline Files | {C631DF4C-088F-4156-B058-4375F0853CD8} | cscui.dll | Configure la mise en cache hors connexion du partage cible |
Les entrées de registre de ces CSE se trouvent sous :
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions\
{25537BA6-77A8-11D2-9B6C-0000F8080861} ← Folder Redirection
{C631DF4C-088F-4156-B058-4375F0853CD8} ← Offline Files
Format XML dans le GPT¶
La configuration de la redirection n'est pas stockée dans registry.pol. Elle est stockée dans un fichier XML dédié dans le GPT (Group Policy Template) de la GPO, au chemin :
\\<domaine>\SYSVOL\<domaine>\Policies\{GPO-GUID}\
User\Documents & Settings\fdeploy.ini ← format legacy (Windows 2000/XP)
User\Documents & Settings\<GUID>.xml ← format actuel (Vista+)
Le fichier XML est nommé avec le GUID de la CSE Folder Redirection. La CSE fdeploy.dll le lit lors du traitement User Configuration et effectue les redirections.
<GPFolderRedirectionPolicy>
<FolderRedirectionPolicy>
<Id>{FOLDERID_Documents}</Id>
<FolderRedirectionType>Basic</FolderRedirectionType>
<GrantUserExclusiveRights>true</GrantUserExclusiveRights>
<MoveContents>true</MoveContents>
<RedirectToLocal>false</RedirectToLocal>
<TargetPath>\\fileserver\redirections\%username%\Documents</TargetPath>
</FolderRedirectionPolicy>
</GPFolderRedirectionPolicy>
Interaction entre les deux CSE¶
La CSE Folder Redirection redirige le chemin. La CSE Offline Files configure la disponibilité hors ligne du chemin UNC cible.
L'interaction est importante : si Offline Files est désactivé par GPO sur le chemin cible, les dossiers redirigés ne sont disponibles que lorsque le partage réseau est accessible. Un UNC inaccessible à l'ouverture de session = profil incomplet.
Offline Files et les serveurs RDS
Sur les serveurs RDS, Offline Files doit être désactivé (GPO Computer Configuration → Administrative Templates → Network → Offline Files → Allow or Disallow use of the Offline Files feature). Les serveurs RDS n'ont pas vocation à mettre en cache des données localement. Activer Offline Files sur un RDS génère une consommation disque croissante et des conflits de synchronisation.
En résumé
La CSE Folder Redirection (fdeploy.dll) lit un fichier XML dans le GPT et réécrit les Shell Folders de l'utilisateur. La CSE Offline Files gère la disponibilité hors ligne des chemins UNC résultants. Les deux sont distinctes : l'une configure où vont les dossiers, l'autre configure si ils sont disponibles sans réseau.
Dossiers redirectibles¶
Les 9 dossiers et leurs chemins de registre¶
Windows expose neuf dossiers redirectibles via GPO. Tous écrivent leur chemin effectif sous la clé de registre HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders (et la clé miroir User Shell Folders pour les chemins persistants).
| Dossier Shell | FOLDERID | Valeur registre (Shell Folders) | Chemin par défaut |
|---|---|---|---|
| Documents | FOLDERID_Documents | Personal | %USERPROFILE%\Documents |
| Desktop | FOLDERID_Desktop | Desktop | %USERPROFILE%\Desktop |
| AppData (Roaming) | FOLDERID_RoamingAppData | AppData | %USERPROFILE%\AppData\Roaming |
| Start Menu | FOLDERID_StartMenu | Start Menu | %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu |
| Favorites | FOLDERID_Favorites | Favorites | %USERPROFILE%\Favorites |
| Music | FOLDERID_Music | My Music | %USERPROFILE%\Music |
| Pictures | FOLDERID_Pictures | My Pictures | %USERPROFILE%\Pictures |
| Videos | FOLDERID_Videos | My Video | %USERPROFILE%\Videos |
| Contacts | FOLDERID_Contacts | Contacts | %USERPROFILE%\Contacts |
Vérification des chemins effectifs après redirection
Après application de la GPO, les valeurs de HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders doivent pointer vers les UNC cibles. La clé Shell Folders est mise à jour dynamiquement par Explorer. Une discordance entre les deux clés indique un problème d'application de la CSE.
Chemin UNC cible¶
La convention recommandée est d'inclure %username% dans le chemin pour garantir l'isolation entre utilisateurs :
La variable %username% est résolue par la CSE au moment de l'application, pas par le shell. Le partage redirections doit avoir les permissions NTFS correctes.
NTFS sur \\fileserver\redirections :
Admins du domaine : Contrôle total
Utilisateurs du domaine : Lecture et exécution (sur le dossier racine uniquement)
CREATOR OWNER : Contrôle total (hérité sur sous-dossiers et fichiers)
L'option "Grant user exclusive rights" dans la GPO configure automatiquement les ACL NTFS pour que seul l'utilisateur concerné accède à son dossier. Ce mode est recommandé en production.
Redirection de base vs redirection avancée¶
La redirection de base envoie tous les utilisateurs vers le même chemin UNC (avec %username% pour l'isolation).
La redirection avancée permet de cibler un UNC différent selon le groupe de sécurité de l'utilisateur.
Groupe "Finance-Users" → \\fileserver-finance\redirections\%username%\Documents
Groupe "IT-Users" → \\fileserver-it\redirections\%username%\Documents
Groupe "Everyone else" → \\fileserver\redirections\%username%\Documents
Evaluation des groupes en redirection avancée
L'évaluation se fait côté client, au moment où la CSE s'exécute. La CSE appelle CheckTokenMembership pour chaque groupe listé dans la configuration avancée, dans l'ordre défini. Le premier groupe qui correspond est utilisé. Si aucun groupe ne correspond et qu'un fallback n'est pas configuré, le dossier n'est pas redirigé.
Migration de contenu ("Move contents")¶
L'option "Move the contents of [folder] to the new location" demande à la CSE de déplacer les fichiers existants du profil local vers le nouveau chemin UNC lors de la première application.
C'est le comportement attendu en déploiement initial. C'est aussi le piège le plus dangereux en production.
Move contents + UNC inaccessible = perte de données potentielle
Si la CSE tente de déplacer les fichiers et que le partage UNC est inaccessible ou plein, la migration peut se terminer partiellement. Des fichiers auront été supprimés du profil local mais pas copiés sur le partage. Windows ne restitue pas automatiquement les données non migrées. Avant tout déploiement avec "Move contents", vérifier que le partage est accessible, dimensionné correctement et que les permissions NTFS sont en place. Tester sur un pilote avec des comptes non critiques.
En résumé
Neuf dossiers sont redirectibles via GPO Folder Redirection. Chacun écrit son chemin effectif dans HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders. La redirection avancée permet des cibles différentes par groupe de sécurité. L'option "Move contents" migre les données existantes mais doit être testée soigneusement — un UNC inaccessible au moment de la migration peut causer une perte de données partielle.
Profils itinérants (Roaming Profiles)¶
Configuration sur l'objet utilisateur AD¶
Le profil itinérant est activé en renseignant l'attribut profilePath sur le compte utilisateur Active Directory.
# Set roaming profile path for a single user
Set-ADUser -Identity "jdupont" `
-ProfilePath "\\fileserver\profiles$\jdupont"
# Bulk configuration — all users in an OU
Get-ADUser -Filter * -SearchBase "OU=Users,DC=contoso,DC=com" | ForEach-Object {
Set-ADUser -Identity $_ -ProfilePath "\\fileserver\profiles$\$($_.SamAccountName)"
}
# Verify the attribute was written correctly
Get-ADUser -Identity "jdupont" -Properties ProfilePath | Select-Object Name, ProfilePath
# Expected output:
# Name ProfilePath
# ---- -----------
# jdupont \\fileserver\profiles$\jdupont
Extension de version du profil¶
Windows ajoute automatiquement un suffixe de version au dossier de profil sur le partage, selon la version du système d'exploitation.
| Version Windows | Extension | Dossier sur le partage |
|---|---|---|
| Windows XP / 2003 | (aucune) | jdupont |
| Windows Vista / 7 / 2008 R2 | .V2 | jdupont.V2 |
| Windows 8 / 2012 | .V3 | jdupont.V3 |
| Windows 8.1 / 2012 R2 | .V4 | jdupont.V4 |
| Windows 10 / 2016 / 2019 / 2022 | .V6 | jdupont.V6 |
| Windows 11 | .V6 | jdupont.V6 |
Piège de migration : conflit de version
Si profilePath pointe vers \\fileserver\profiles$\jdupont et que le partage contient à la fois jdupont.V2 (Windows 7) et jdupont.V6 (Windows 10), les deux coexistent sans interférence. En revanche, si un administrateur renomme manuellement un dossier .V2 en .V6 pour "récupérer" un ancien profil, les paramètres d'application incompatibles (ruches de registre différentes) corrompront la session ou provoqueront des crashs d'applications.
La ruche NTUSER.DAT¶
Le profil itinérant synchronise le dossier AppData\Roaming et le fichier NTUSER.DAT (la ruche de registre HKCU de l'utilisateur).
À l'ouverture de session, Windows charge NTUSER.DAT depuis le partage. À la fermeture de session, il copie la ruche locale modifiée vers le partage.
Le comportement en cas de conflit (même compte ouvert sur deux machines simultanément) est déterminé par le mécanisme de "last writer wins" : le dernier profil fermé écrase le profil sur le partage. Les modifications effectuées sur la première machine sont perdues.
Sessions simultanées et perte de modifications
Les profils itinérants ne gèrent pas les conflits de session multi-machine. Si un utilisateur a une session ouverte sur MACHINE-A et en ouvre une seconde sur MACHINE-B, la fermeture de MACHINE-B écrasera les modifications de MACHINE-A sur le partage. Ce problème est fondamental et ne peut pas être résolu par GPO — c'est l'une des raisons pour lesquelles FSLogix a été développé.
Exclusion de AppData\Local¶
AppData\Local n'est jamais synchronisé par les profils itinérants (par conception). En revanche, AppData\Roaming est synchronisé intégralement, ce qui peut conduire à des profils de plusieurs gigaoctets si des applications y stockent des données volumineuses.
La GPO "Exclude directories in roaming profile" permet d'exclure des sous-dossiers spécifiques de AppData\Roaming :
Computer Configuration
→ Administrative Templates
→ System
→ User Profiles
→ Exclude directories in roaming profile
Le chemin est relatif à AppData\Roaming
La GPO prend des chemins relatifs au dossier AppData\Roaming. Écrire Microsoft\Teams exclut %APPDATA%\Microsoft\Teams. Ne pas inclure AppData\Roaming\ dans la valeur.
Event IDs de profil itinérant¶
| Event ID | Source | Signification |
|---|---|---|
1500 | User Profile Service | Chargement du profil itinérant réussi |
1502 | User Profile Service | Profil itinérant chargé avec avertissements (dossier UNC inaccessible, profil temporaire utilisé) |
1504 | User Profile Service | Impossible de charger le profil itinérant — profil local temporaire créé |
1509 | User Profile Service | Certains fichiers n'ont pas pu être copiés vers le profil itinérant à la déconnexion |
1511 | User Profile Service | Profil itinérant non disponible — profil local créé |
1530 | User Profile Service | Windows a détecté que le fichier de registre est encore utilisé par d'autres applications (profil déjà ouvert) |
# Collect profile events on a remote machine — last 7 days
$computer = "WS-FINANCE-01"
Get-WinEvent -ComputerName $computer -FilterHashtable @{
LogName = "Application"
ProviderName = "Microsoft-Windows-User Profiles Service"
Id = 1500, 1502, 1504, 1509, 1511, 1530
StartTime = (Get-Date).AddDays(-7)
} | Select-Object TimeCreated, Id, Message | Format-Table -Wrap -AutoSize
# Expected on a healthy workstation: only 1500 events
# TimeCreated Id Message
# ----------- -- -------
# 2025-03-20 08:14:22 1500 Windows successfully loaded the users registry...
# 2025-03-19 08:02:11 1500 Windows successfully loaded the users registry...
# Event 1504 means a temp profile was used — investigate UNC path reachability
En résumé
Le profil itinérant synchronise NTUSER.DAT et AppData\Roaming entre le partage et la machine locale. L'extension .V6 s'applique à Windows 10 et 11. La règle "last writer wins" à la déconnexion est la limite fondamentale des profils itinérants. Les Event IDs 1500–1530 dans le journal Application sont les premiers éléments à consulter lors d'un problème de chargement de profil.
Profils obligatoires¶
Principe¶
Un profil obligatoire est un profil itinérant en lecture seule. Les modifications faites pendant la session ne sont jamais sauvegardées sur le partage à la déconnexion. L'utilisateur retrouve toujours le même état de profil à chaque connexion.
C'est la solution pour les kiosks, les postes de vote, les postes de démonstration — tout environnement où l'état de l'utilisateur ne doit pas persister.
Création d'un profil obligatoire¶
La transformation d'un profil itinérant en profil obligatoire se fait en renommant le fichier de ruche.
Étape 1 — Créer un profil de base
Ouvrir une session avec le compte modèle, configurer l'environnement (fond d'écran, applications épinglées, paramètres souhaités), fermer la session. Le profil est synchronisé sur le partage.
Étape 2 — Accéder au profil sur le partage
Étape 3 — Renommer le fichier de ruche
:: Access the profile share
pushd \\fileserver\profiles$\compte-modele.V6
:: Rename the registry hive to make the profile mandatory
ren ntuser.dat ntuser.man
:: Also rename the transaction log files
ren ntuser.dat.LOG1 ntuser.man.LOG1
ren ntuser.dat.LOG2 ntuser.man.LOG2
Les fichiers .LOG doivent aussi être renommés
Windows utilise ntuser.dat.LOG1 et ntuser.dat.LOG2 comme journaux de transaction pour la ruche NTUSER. Si ces fichiers ne sont pas renommés en .man.LOG1 et .man.LOG2, Windows tente de les créer lors de la session et génère une erreur car le profil est en lecture seule. Cela provoque des avertissements dans l'Event Log et peut empêcher le chargement correct du profil sur certaines versions.
Étape 4 — Pointer le profilePath vers le profil obligatoire
# Point kiosk users to the mandatory profile
$mandatoryProfilePath = "\\fileserver\profiles$\compte-modele.V6"
Get-ADUser -Filter * -SearchBase "OU=Kiosk-Users,DC=contoso,DC=com" | ForEach-Object {
Set-ADUser -Identity $_ -ProfilePath $mandatoryProfilePath
}
Un seul profil obligatoire pour plusieurs utilisateurs
Tous les utilisateurs kiosk peuvent pointer vers le même chemin de profil obligatoire. Comme le profil ne se modifie jamais, il n'y a pas de conflit. Les permissions NTFS doivent autoriser tous ces utilisateurs en lecture.
Permissions NTFS pour un profil obligatoire¶
\\fileserver\profiles$\compte-modele.V6 :
SYSTEM : Contrôle total
Admins du domaine : Contrôle total
Utilisateurs kiosk (groupe) : Lecture et exécution, Affichage du contenu du dossier, Lecture
→ Pas de droit d'écriture pour les utilisateurs
En résumé
Le profil obligatoire se crée en renommant ntuser.dat en ntuser.man (et les fichiers .LOG associés). Les modifications de session ne sont jamais persistées. Plusieurs utilisateurs peuvent partager le même profil obligatoire en lecture. C'est la solution de référence pour les kiosks et les postes à usage unique.
FSLogix Profile Container¶
Positionnement¶
FSLogix Profile Container n'est pas un mécanisme GPO natif. C'est un agent qui s'installe sur la machine (RDS, VDI, AVD) et qui monte un disque VHD/VHDX à l'ouverture de session, exposant le profil comme s'il était local.
Il est déployé via GPO (préférences de registre ou ADMX), mais son fonctionnement est indépendant des CSE traditionnelles.
Il a été acquis par Microsoft en 2018 et est inclus sans surcoût dans les licences Microsoft 365 E3/E5, RDS SAL et Windows Virtual Desktop.
Architecture de stockage¶
Le VHD/VHDX est stocké sur un partage réseau. À l'ouverture de session, l'agent FSLogix monte ce disque via une opération de niveau noyau (filter driver). Le profil apparaît à Windows comme un profil local sur C:\Users\<username>.
\\fileserver\fslogix\%username%\Profile_%username%.vhdx
└─ Monté sur C:\Users\<username>\ à l'ouverture de session
└─ Contient : NTUSER.DAT, AppData, Documents, Desktop, ...
Clés de registre FSLogix¶
La configuration de l'agent FSLogix se fait via des clés de registre sous HKLM\SOFTWARE\FSLogix\Profiles\. Ces clés sont typiquement déployées via une GPO de préférences de registre.
| Clé | Type | Valeur recommandée | Description |
|---|---|---|---|
Enabled | REG_DWORD | 1 | Active FSLogix Profile Container |
VHDLocations | REG_MULTI_SZ | \\server\fslogix | Chemin(s) UNC du stockage VHD |
DeleteLocalProfileWhenVHDShouldApply | REG_DWORD | 1 | Supprime les profils locaux existants si FSLogix doit s'appliquer |
SizeInMBs | REG_DWORD | 30720 | Taille max du VHD en Mo (défaut : 30 Go) |
VolumeType | REG_SZ | VHDX | Format du disque virtuel (VHDX recommandé) |
FlipFlopProfileDirectoryName | REG_DWORD | 1 | Nomme le dossier %username%_S-1-5-... au lieu de S-1-5-..._username |
ProfileType | REG_DWORD | 0 | 0 = profil normal, 3 = profil en lecture seule (Try mode) |
RoamSearch | REG_DWORD | 1 | Déplace également l'index de recherche Windows |
# These values are typically deployed via GPO Registry Preferences
# Path: Computer Configuration → Preferences → Windows Settings → Registry
$fslogixKeys = @{
"Enabled" = 1
"VHDLocations" = "\\fileserver\fslogix"
"DeleteLocalProfileWhenVHDShouldApply" = 1
"SizeInMBs" = 30720
"VolumeType" = "VHDX"
"FlipFlopProfileDirectoryName" = 1
}
$regPath = "HKLM:\SOFTWARE\FSLogix\Profiles"
foreach ($key in $fslogixKeys.GetEnumerator()) {
Set-ItemProperty -Path $regPath -Name $key.Key -Value $key.Value -Force
}
# Verify FSLogix configuration on a session host
Get-ItemProperty "HKLM:\SOFTWARE\FSLogix\Profiles" |
Select-Object Enabled, VHDLocations, SizeInMBs, VolumeType
# Expected output:
# Enabled : 1
# VHDLocations : \\fileserver\fslogix
# SizeInMBs : 30720
# VolumeType : VHDX
Coexistence avec la redirection de dossiers GPO¶
FSLogix Profile Container et la redirection de dossiers GPO peuvent coexister, et leur combinaison est l'architecture recommandée pour les environnements RDS/AVD.
Pourquoi FSLogix seul ne suffit pas pour les Documents ?
Si FSLogix porte les Documents dans le VHDX, et que l'utilisateur a des fichiers volumineux, le VHDX grossit sans limite et l'accès aux fichiers est tributaire d'un seul point de stockage. La redirection de dossiers pour Documents vers un partage DFS-N offre une meilleure résilience et une visibilité directe des fichiers dans le partage.
Architecture cible :
FSLogix Profile Container
→ Porte : NTUSER.DAT, AppData\Roaming, AppData\Local, paramètres applicatifs
→ Ne porte pas : Documents (redirigé séparément)
GPO Folder Redirection
→ Documents → \\fileserver\redirections\%username%\Documents
→ Desktop → \\fileserver\redirections\%username%\Desktop (optionnel)
Résultat : profil léger dans le VHDX, données métier sur le serveur de fichiers
Configurer FSLogix pour exclure les dossiers redirigés
Utiliser la clé RedirXMLSourceFolder ou la configuration d'exclusion FSLogix pour éviter que FSLogix ne porte les dossiers déjà redirigés par GPO. Sans cette configuration, les deux mécanismes gèrent le même dossier et peuvent créer des conflits de chemin.
En résumé
FSLogix Profile Container monte un VHDX à l'ouverture de session, résolvant les problèmes de "last writer wins" des profils itinérants et les problèmes de performance des profils locaux en VDI. Il se déploie via des clés de registre sous HKLM\SOFTWARE\FSLogix\Profiles\, typiquement poussées par GPO de préférences. L'architecture correcte combine FSLogix (pour le profil) et la redirection de dossiers GPO (pour les Documents) — les deux rôles sont distincts.
Séquence de chargement du profil — Diagramme¶
flowchart TD
A["Ouverture de session\nWinlogon démarre"] --> B{"FSLogix\nactivé ?"}
B -->|"Oui"| C["FSLogix filter driver\nmonte le VHDX"]
C --> D{"VHDX accessible\nsur le partage UNC ?"}
D -->|"Non"| E["⚠ Fallback :\nProfil local ou temporaire\nEvent Log FSLogix : erreur"]
D -->|"Oui"| F["Profil monté sur C:\\Users\\username\\\nNTUSER.DAT chargé depuis le VHDX"]
B -->|"Non"| G{"profilePath\nrenseigné dans AD ?"}
G -->|"Oui"| H["Copie du profil itinérant\ndepuis \\\\server\\profiles$\\user.V6"]
H --> I{"Partage UNC\naccessible ?"}
I -->|"Non"| J["⚠ Profil temporaire\nEvent ID 1504\nModifications perdues à la fin de session"]
I -->|"Oui"| K["NTUSER.DAT chargé\nAppData\\Roaming synchronisé"]
G -->|"Non"| L["Profil local utilisé\nou créé si première connexion"]
F --> M["GPO Computer Configuration\nappliquée — LSDOU"]
K --> M
L --> M
J --> M
M --> N["GPO User Configuration\nappliquée — LSDOU"]
N --> O{"CSE Folder Redirection\nGPO présente ?"}
O -->|"Oui"| P{"Partage UNC\ncible accessible ?"}
P -->|"Non"| Q["⚠ Dossiers non redirigés\nFonctionnement local temporaire\nMove contents annulé si premier déploiement"]
P -->|"Oui"| R["Shell Folders redirigés\nHKCU\\...\\Shell Folders mis à jour"]
O -->|"Non"| S["Dossiers restent locaux\n(profil ou VHDX)"]
R --> T["Session prête"]
S --> T
Q --> T
E --> T
T --> U["... Session active ..."]
U --> V["Fermeture de session"]
V --> W{"FSLogix\nactivé ?"}
W -->|"Oui"| X["VHDX démonté et\nverrouillage libéré\nModifications persistées dans le VHDX"]
W -->|"Non"| Y{"Profil\nitinérant ?"}
Y -->|"Oui"| Z["AppData\\Roaming + NTUSER.DAT\ncopiés vers \\\\server\\profiles$\\user.V6\n⚠ Last writer wins si session simultanée"]
Y -->|"Non"| AA["Profil local conservé\nPas de synchronisation réseau"]
style E fill:#ff6b6b,color:#fff
style J fill:#ff6b6b,color:#fff
style Q fill:#ffa94d,color:#fff
style X fill:#51cf66,color:#fff
style R fill:#51cf66,color:#fff Points de défaillance identifiés dans le diagramme :
| Point | Symptôme | Cause fréquente |
|---|---|---|
| VHDX inaccessible (FSLogix) | Profil temporaire, données perdues | Partage SMB saturé, permissions NTFS incorrectes, verrou VHDX (session zombie) |
| UNC inaccessible (profil itinérant) | Event ID 1504, profil local temporaire | Serveur de fichiers inaccessible, problème DNS, pare-feu SMB |
| CSE Folder Redirection échoue | Dossiers non redirigés silencieusement | Partage UNC inaccessible au moment de la GPO, permissions manquantes |
| Last writer wins | Données perdues pour l'utilisateur qui ferme en premier | Sessions simultanées sur plusieurs machines (profils itinérants sans FSLogix) |
En résumé
- Les principaux points de défaillance du chargement de profil sont : VHDX inaccessible (FSLogix), UNC inaccessible (profil itinérant) et CSE Folder Redirection silencieusement en échec.
- Les sessions simultanées sur plusieurs machines sans FSLogix entraînent un scénario "last writer wins" avec perte de données.
Pièges de production¶
"Move contents" avec UNC inaccessible¶
Le piège le plus courant lors d'un déploiement initial de redirection de dossiers.
La GPO est déployée avec "Move the contents of Documents to the new location". Lors de la première connexion d'un utilisateur, la CSE Folder Redirection tente de déplacer les fichiers du profil local vers \\fileserver\redirections\%username%\Documents.
Si le partage est inaccessible, ou si les permissions NTFS sont incorrectes, ou si le disque est plein, la CSE log une erreur mais ne restitue pas les fichiers au profil local. Dans le pire cas, une migration partielle a eu lieu.
# Check for folder redirection errors on pilot machines
Get-WinEvent -LogName "Application" -FilterHashtable @{
ProviderName = "Microsoft-Windows-Folder Redirection"
Level = 2, 3 # Error, Warning
StartTime = (Get-Date).AddDays(-3)
} | Select-Object TimeCreated, Id, Message | Format-Table -Wrap
Mesures préventives :
- Déployer d'abord sans "Move contents" — vérifier que la redirection fonctionne
- Activer "Move contents" en deuxième phase, sur un pilote
- Vérifier que le partage est accessible depuis toutes les machines du périmètre avant de pousser la GPO
- Avoir un snapshot ou une sauvegarde du profil local avant la migration
Profil itinérant non borné (AppData bloat)¶
Sans configuration d'exclusion, AppData\Roaming est synchronisé intégralement. Des applications comme Microsoft Teams, Zoom ou les caches d'applications web peuvent stocker des gigaoctets dans ce dossier.
Un profil de 10 Go synchronisé à chaque ouverture/fermeture de session = temps de connexion de plusieurs minutes et saturation du serveur de fichiers.
# Measure roaming profile size and identify top contributors
$profileShare = "\\fileserver\profiles$"
$username = "jdupont"
$profilePath = "$profileShare\$username.V6\AppData\Roaming"
$sizes = Get-ChildItem -Path $profilePath -ErrorAction SilentlyContinue |
ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
[PSCustomObject]@{
Folder = $_.Name
SizeMB = [math]::Round($size / 1MB, 1)
}
} | Sort-Object SizeMB -Descending
$sizes | Select-Object -First 10 | Format-Table -AutoSize
# Expected output showing bloat sources:
# Folder SizeMB
# ------ ------
# Microsoft 4521.3 ← Teams, Office cache
# Zoom 1203.8
# Code 892.1 ← VS Code extensions
# discord 445.2
# ...
Solution : configurer la GPO "Exclude directories in roaming profile" pour les dossiers identifiés comme sources de bloat.
Conflit de version .V2 / .V6¶
Une migration de Windows 7 vers Windows 10 sans nettoyage des profils laisse des dossiers .V2 et .V6 sur le partage. Windows 10 crée automatiquement un nouveau profil .V6 vide lors de la première connexion — l'utilisateur perd ses paramètres du profil .V2.
C'est le comportement attendu par conception (les ruches de registre ne sont pas rétrocompatibles). Mais sans communication préalable, les utilisateurs voient leurs paramètres disparaître.
Ne pas fusionner manuellement .V2 dans .V6
Copier le contenu d'un profil .V2 (Windows 7) dans un profil .V6 (Windows 10) copie une ruche NTUSER.DAT dont les clés de registre sont incompatibles avec les applications Windows 10. Cela provoque des crashs d'applications et un profil instable. La seule migration propre est de laisser Windows créer un profil .V6 neuf et de reconfigurer les paramètres applicatifs via GPO ou scripts.
Profil "en cours d'utilisation" (verrou VHDX)¶
Avec FSLogix, le VHDX est verrouillé pendant que la session est active. Si la session se termine anormalement (déconnexion réseau, crash), le fichier peut rester verrouillé pendant plusieurs minutes (jusqu'à ce que le timeout SMB libère le verrou).
Un utilisateur qui tente de se reconnecter immédiatement après un crash voit FSLogix échouer à monter le VHDX.
# List open SMB sessions on the file server
Get-SmbOpenFile -FileNameContains "Profile_jdupont.vhdx" |
Select-Object FileId, SessionId, Path, ClientComputerName
# Close the specific open file (use FileId from previous command)
Close-SmbOpenFile -FileId <FileId> -Force
# Alternatively, close all sessions for a specific user
Get-SmbSession | Where-Object { $_.ClientUserName -like "*jdupont*" } |
Remove-SmbSession -Force
Configurer le délai de libération du verrou FSLogix
La clé VHDLocations de type MULTI_SZ permet de lister plusieurs chemins de stockage (failover). La clé PreventLoginWithFailure (REG_DWORD = 0) permet à l'utilisateur de se connecter avec un profil local si le VHDX est inaccessible, plutôt que de bloquer complètement la connexion.
En résumé
Les quatre pièges de production sont : (1) perte de données avec "Move contents" sur UNC inaccessible — déployer en deux phases, (2) profil itinérant non borné — exclure les dossiers de cache via GPO, (3) confusion de version .V2/.V6 lors de migrations OS — ne pas fusionner manuellement, (4) verrou VHDX FSLogix après déconnexion brutale — Close-SmbOpenFile comme intervention d'urgence.
Tableau de décision : quelle solution pour quel environnement¶
| Environnement | Solution recommandée | Raison |
|---|---|---|
| Postes de travail fixes, utilisateur unique | Profil local + redirection Documents | Simple, performant, pas de synchronisation réseau superflue |
| Postes partagés (accueil, formation) | Profil obligatoire + redirection Documents | État toujours propre, données utilisateur isolées par redirection |
| RDS / Serveurs de sessions | FSLogix Profile Container + redirection Documents | Résout les conflits de session simultanée, performances I/O optimales |
| Azure Virtual Desktop (AVD) | FSLogix Profile Container + redirection Documents | Recommandation Microsoft officielle pour AVD |
| Citrix XenApp / XenDesktop | FSLogix Profile Container + redirection Documents (ou Citrix UPM) | FSLogix ou Citrix UPM — ne pas mélanger les deux |
| VDI non persistent | FSLogix Profile Container + redirection Documents | Profil reconstruit à chaque session depuis le VHDX |
| Kiosk à compte unique | Profil obligatoire (pas de redirection) | Aucune donnée à conserver entre les sessions |
En résumé
- Postes de travail fixes, utilisateur unique : Simple, performant, pas de synchronisation réseau superflue.
- Postes partagés (accueil, formation) : État toujours propre, données utilisateur isolées par redirection.
- RDS / Serveurs de sessions : Résout les conflits de session simultanée, performances I/O optimales.
- Azure Virtual Desktop (AVD) : Recommandation Microsoft officielle pour AVD.
- Cette synthèse condense tableau de décision : quelle solution pour quel environnement en aide de décision rapide.
Cross-références¶
| Sujet | Référence |
|---|---|
| Profils et sessions RDS | Gestion des profils RDS |
| Loopback et environnements multi-utilisateurs | Loopback Processing |
| Déploiement de préférences de registre via GPP | Ch. 11 — Préférences de stratégie de groupe (GPP) |
| Diagnostic RSOP et gpresult | Ch. 20 — RSOP et diagnostic |
| Filtrage de sécurité et WMI | Ch. 09 — Filtrage de sécurité et filtrage WMI |
En résumé
- À relire : Profils et sessions RDS → Gestion des profils RDS.
- À relire : Loopback et environnements multi-utilisateurs → Loopback Processing.
- À relire : Déploiement de préférences de registre via GPP → Ch. 11 — Préférences de stratégie de groupe (GPP).
- À relire : Diagnostic RSOP et gpresult → Ch. 20 — RSOP et diagnostic.
- À relire : Gestion des profils RDS.