AVD + FSLogix = Bonnes pratiques

La mise en place d’Azure Virtual Desktop s’accompagne de bonnes pratiques, dont une concerne tout particulièrement la gestion des profils utilisateurs. Dans cet article, nous allons détailler l’installation de la solution FSLogix sur Azure Virtual Desktop, avec différentes options possibles pouvant améliorer l’expérience utilisateur.

Les profils des utilisateurs Windows

Un profil utilisateur contient des éléments de données sur une personne, notamment des informations de configuration comme les paramètres du poste de travail, les connexions réseaux persistantes ou les paramètres d’application. Par défaut, Windows crée un profil utilisateur local qui est étroitement intégré au système d’exploitation. Dans le cadre d’un environnement multiutilisateurs, il est important de rappeler l’importance des profils utilisateurs Windows :

  • Profil utilisateur : Un profil utilisateur Windows est un ensemble de paramètres qui personnalisent l’environnement de l’utilisateur. Chaque compte utilisateur dispose d’un profil qui inclut un ensemble de fichiers et de dossiers qui leurs sont propres, comme le bureau, les documents, les téléchargements, la musique, les images, …
  • Profil itinérant : Un profil itinérant est une fonctionnalité qui permet aux utilisateurs, à partir d’un poste implémenté dans un domaine, de se connecter à n’importe quel ordinateur du même réseau du même domaine et de retrouver leur environnement « personnalisé » décrit ci-dessus. Sans la fonctionnalité de base des profils itinérants, les utilisateurs perdraient leurs paramètres et leurs documents locaux lorsqu’ils se connecteraient à différents ordinateurs du domaine.

Les produits Microsoft fonctionnent avec plusieurs technologies pour les profils utilisateurs distants, notamment :

  • Profil utilisateur itinérants (RUP, Roaming user profiles)
  • Disque de profil utilisateur (UPD, User profile disks)
  • Enterprise State Roaming (ESR)

UPD et RUP sont les technologies les plus fréquemment utilisées pour les profils utilisateur dans les environnements Hôte de session Bureau à distance (RDSH) et Disque dur virtuel (VHD).

La solution FSLogix

Azure Virtual Desktop recommande les conteneurs de profil FSLogix. FSLogix est société acquise par Microsoft en novembre 2018. Elle propose une solution de conteneurisation des profils utilisateurs en itinérance, utilisable dans une large gamme de scénarios sous format VHD ou VHDX. Avec FSLogix, vous allez pouvoir réaliser les actions suivantes pour vos utilisateurs :

  • Centralisation des profils utilisateurs Azure Virtual Desktop
  • Dissociation possible entre les conteneurs Office365 avec les conteneurs profils utilisateurs
  • Gestion des applications visibles ou non via la fonction AppMasking
  • Contrôle des versions JAVA
  • Customisation de l’installation via de nombreuses règles ou via GPO
  • Sans les conteneurs de profil FSLogix, OneDrive Entreprise n’est pas pris en charge dans les environnements RDSH ou VDI non persistants
Merci à Dean pour cette vidéo explicative 😎

Scénarios de stockage FSLogix

Comme toute donnée devant être migrée ou installée dans le Cloud, plusieurs scénarios techniques sont possibles pour héberger ces dernières. Dans le cadre des profils FSLogix , nous pourrions envisager les solutions suivantes :

  • Stockage sur un compte de stockage partagé
  • Stockage sur un serveur de fichiers
  • Stockage sur un NetApp File
Intégration des profils utilisateurs d’AVD, stockés sur un Azure File share.

Peu importe la solution choisie, vous devez également décider du format du profil : VHD / VHDX.

Au travers de cette vidéo, Dean nous montre comment estimer la taille du stockage FSLogix.

OS compatibles avec FSLogix

FSLogix est compatible avec une gamme étendue de systèmes d’exploitation, en 32 ou 64 bit :

  • Windows 7 ou plus récent
  • Windows Server 2008 R2 ou plus récent

Licences FSLogix

Il n’existe pas de licence spécifique pour FSLogix mais un droit d’utilisation intégré dans un grand nombre de licence Microsoft 365. Voici la liste des licences comprenant cette éligibilité :

  • Microsoft 365 E3/E5
  • Microsoft 365 A3/A5/ Student Use Benefits
  • Microsoft 365 F1/F3
  • Microsoft 365 Business
  • Windows 10 Enterprise E3/E5
  • Windows 10 Education A3/A5
  • Windows 10 VDA per user
  • Remote Desktop Services (RDS) Client Access License (CAL)
  • Remote Desktop Services (RDS) Subscriber Access License (SAL)

Expérience utilisateur

Lors de la connexion de l’utilisateur, un conteneur est dynamiquement attaché à l’environnement en utilisant le disque dur virtuel et le disque dur virtuel Hyper-V, pris en charge nativement. Le profil utilisateur est donc immédiatement disponible et apparaît dans le système exactement comme un profil utilisateur local.

Installation de la solution FSLogix

Comme indiqué précédemment, l’installation de la solution FSLogix est possible sur plusieurs système de stockage. Dans cet article, nous allons nous intéresser à l’installation de la solution sur un compte de stockage Azure. Avant d’aller plus loin, l’installation de la solution FSLogix va légèrement différer selon le type de domaine mis en place pour votre environnement Azure Virtual Desktop. A ce jour, la solution fonctionne avec 2 types de domaine :

  • Azure Active Directory Domain Services (Azure AD DS) : Azure AD DS fournit des services de domaine managé avec un sous-ensemble de fonctionnalités AD DS traditionnelles, comme la jonction de domaine, la stratégie de groupe, le protocole LDAP et l’authentification Kerberos/NTLM.
Azure Virtual Desktop reposant sur une gestion d’identité gérée par Azure AD et synchronisé avec Azure AD DS.
  • Active Directory Domain Services (AD DS) : serveur LDAP (Lightweight Directory Access Protocol) qui fournit des fonctionnalités clés telles que l’identité et l’authentification, la gestion des objets, la stratégie de groupe et les approbations.
Azure Virtual Desktop reposant sur une gestion d’identité gérée par AD DS et synchronisé avec Azure AD.

Etape I : Création du compte de stockage

Peu importe l’architecture d’identité choisie, le création d’un compte de stockage est identique dans les deux cas. Plusieurs options existent lors sa création dans un objectif d’augmenter sa résilience :

  • Redondance sur la région Azure paire (GRS)
  • Utilisation de la fonctionnalité Cloud cache via la création de 2 comptes de stockage dans des régions Azure différentes
Attention à la longueur du nom du compte de stockage !
Celui-ci doit être inférieur à 15 caractères, au risque de bloquer la jointure du compte au domaine AD DS.

La sécurité a toute sa place dans un projet Azure Virtual Desktop. Je vous conseille donc de limiter la porter de votre compte de stockage au seul réseau v-net de votre architecture.

L’accès publique reste malgré tout sécurisé.

Etape II : Ajout du compte de stockage au domaine

Une fois la création de votre compte de stockage terminée, vous allez pouvoir le paramétrer pour le joindre à votre domaine. Juste avant cette configuration, pensez également à ajouter votre adresse IP publique dans la configuration réseau du compte de stockage, afin de ne pas être bloqué par la suite :

Comme nous avons filtré la méthode de connectivité, nous devons rajouter notre adresse IP publique comme exception d’accès au compte de stockage.

En fonction du type de domaine présent dans votre projet, je vous invite à suivre la procédure de configuration correspondante à votre cas :

  • Scenario A : domaine managé Azure AD DS
  • Scenario B : domaine Active Directory Domain Services (AD DS)
Dans mon exemple, deux comptes de stockage sont créés pour vous montrer le paramétrage pour les 2 types de domaine.

Scenario A : Ajout du compte de stockage au domaine managé Azure AD DS

Il s’agit de la jointure la plus facile à réaliser, puisqu’elle peut se faire directement depuis le portail Azure. Pour cela, vous n’avez qu’à rentrer dans votre compte de stockage et vous rendre sur l’option suivante :

Quelques secondes après l’activation de l’option, tout est bon 😋

Une fois le compte de stockage associé au domaine managé, il ne reste qu’à ajouter les rôles RBAC Azure et les droits NTFS Windows aux utilisateurs d’AVD. Pour cela, nous allons procéder de la façon suivante :

  • Azure RBAC : droits d’accès via le rôle Storage File Data SMB Share Contributor via le portail Azure
  • Windows NTFS : droits de modification via la commande icacls

L’ajout de rôle RBAC se fait assez facilement via le portail Azure ou aussi via des commandes en PowerShell. Voici les rôles nécessaires sur le partage de fichier fslogix du compte de stockage :

L’ajout des droits NTFS demande un peu plus d’effort et doit se réaliser obligatoirement via des commandes depuis une machine jointe au domaine Azure AD DS. Pour cela, il est nécessaire de créer une machine virtuelle sur Azure et de la joindre au domaine Azure AD DS. A terme cette machine virtuelle peut être éteinte et conservée pour gérer d’autres options du domaine managé.

Une fois la machine virtuelle créée et jointe, Alexandre nous simplifie la vie avec son script ici. Pour vous aider, je vous ai préparé une découpe de ce dernier en dessous :

Rappel Important concernant le script d’ajout des droits NTFS

  • Avoir créé au préalable un domaine managé Azure AD DS
  • Avoir joint le compte de stockage au domaine managé Azure AD DS
  • Avoir ajouté au préalable un partage de fichier sur le compte de stockage
  • Disposer d’un compte ayant des droits de propriétaire sur la souscription Azure
  • Lancer le script depuis un compte administrateur local aussi présent dans le domaine Azure AD DS

Script PowerShell

La partie 1 du script sert à initialiser un certain nombre de variables pour la suite des prochaines commandes PowerShell. Certains éléments sont à créer manuellement avant de pouvoir les renseigner :

  • $SubscriptionId : ID de la souscription Azure
  • $ResourceGroupName : nom du groupe de ressources du compte de stockage
  • $StorageAccountName : nom du compte de stockage
  • $AzufileShareName : nom du partage de fichier créé pour FSLogix
  • $StorageAccountKey : clef d’accès du compte de stockage
  • $ADDSname : nom du domaine managé Azure AD DS
  • $UserGroupName : nom du groupe d’utilisateurs d’AVD
  • $AdminGroupName : nom du groupe d’administration d’AVD
  • $DirectoryID : chemin local du sous-répertoire dans le partage de fichier fslogix
  • $Directory : sous-répertoire dans le partage de fichier fslogix
$SubscriptionId = ""
$ResourceGroupName = ""
$StorageAccountName = ""
$AzufileShareName = ""
$StorageAccountKey = ""
$ADDSname = ""
$UserGroupName = ""
$AdminGroupName = ""
$DirectoryID = "T:\Profiles"
$Directory = "Profiles"

Le partie 2 monte un lecteur réseau dans l’explorateur en utilisant une clef du compte de stockage comme identifiant. Si votre session utilisateur n’est pas administrateur, je vous conseille de lancer cette commande via une fenêtre PowerShell non-administrateur également, sous peine de ne pas voir apparaitre le lecteur réseau dans votre explorateur de fichier :

$connectTestResult = Test-NetConnection -ComputerName "$StorageAccountName.file.core.windows.net" -Port 445
if ($connectTestResult.TcpTestSucceeded)
{
  net use T: "\\$StorageAccountName.file.core.windows.net\$AzufileShareName" /user:Azure\$StorageAccountName $StorageAccountKey
} 
else 
{
  Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN,   Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}

La partie 3 créée le sous-dossier dédié aux profils et ajoute les droits NTFS pour que FSLogix puisse travailler correctement :

New-Item -Path $DirectoryID -ItemType Directory

icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /inheritance:d
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /remove "Creator Owner"
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /grant 'CREATOR OWNER:(OI)(CI)(IO)(M)'
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /remove "Authenticated Users" 
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /remove "Builtin\Users"
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /grant $ADDSname\"$UserGroupName":M
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /grant $ADDSname\"$AdminGroupName":F

Scenario B : Ajout du compte de stockage au domaine Active Directory Domain Services (AD DS)

Vous l’aurez compris si vous avez lu le paragraphe précédent, cette jointure nécessite un peu plus de manipulations et ne peut se faire directement depuis le portail Azure. Vous trouverez le lien vers la documentation officielle ici. Au final, les commandes d’ajout vont se faire en PowerShell. Pour aller plus vite, Alexandre nous a encore préparé un script PowerShell, disponible sur son GitHub. Ce script est téléchargeable ici, il effectue les actions suivantes :

  1. Téléchargement et installation et lancement du module Azure
  2. Téléchargement et installation et lancement du module Azure AD
  3. Connection à Azure et Azure AD
  4. Téléchargement, extraction et installation et lancement du module AzFilesHybrid
  5. Jointure du compte de stockage au domaine AD DS
  6. Ajout des rôles Azure RBAC sur le partage de fichier FSLogix
  7. Ajout des droits NTFS sur le partage de fichier FSLogix

Rappel important le script ci-dessous

  • Avoir synchronisé au préalable votre domaine à Azure AD via l’installation d’Azure AD Connect
  • Disposer d’un compte ayant des droits de propriétaire sur la souscription Azure
  • Rajouter au prélable un partage de fichier sur le compte de stockage
  • Lancer ce script sur un compte de domaine AD DS et disposant des droits administrateur local

Script PowerShell

La partie 1 du script sert à initialiser les variables pour les prochaines commandes PowerShell. Certains éléments sont à créer manuellement avant de pouvoir les renseigner dans les variables :

  • $SubscriptionId : ID de la souscription hébergeant le compte de stockage
  • $ResourceGroupName : nom du groupe de ressources hébergeant le compte de stockage
  • $StorageAccountName : nom du compte de stockage
  • $AzufileShareName : nom du partage de fichier créé pour FSLogix
  • $StorageAccountKey : clef d’accès du compte de stockage
  • $domainname : nom du domaine AD DS
  • $OrganizationalUnitDistinguishedName : nom de l’OU du domaine AD DS
  • $UserGroupName : nom du groupe d’utilisateurs d’AVD
  • $AdminGroupName : nom du groupe d’administration d’AVD
  • $DirectoryID : chemin local du sous-répertoire dans le partage de fichier fslogix
  • $Directory : sous-répertoire dans le partage de fichier fslogix
$SubscriptionId = ""
$ResourceGroupName = ""
$StorageAccountName = ""
$AzufileShareName = ""
$StorageAccountKey = ""
$domainname = ""
$OrganizationalUnitDistinguishedName = ""
$folder = "C:\AzFileHybrid"
$UserGroupName = ""
$AdminGroupName = ""
$DirectoryID= "T:\Profiles"
$Directory= "Profiles"

La partie 2 du script télécharge, installe et lance les modules PowerShell Azure avec l’identifiant Azure AD :

Install-Module AZ
Import-Module AZ
Install-Module azuread
Import-Module azuread
Connect-AzAccount
Select-AzSubscription -SubscriptionId $SubscriptionId
Connect-AzureAD

La partie 3 télécharge les éléments de jointure depuis GitHub et prépare les variables de rôles RBAC :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$AzFileSource = "https://github.com/Azure-Samples/azure-files-samples/releases/download/v0.2.3/AzFilesHybrid.zip"
$locationAzFiledownload = "C:\AzFilesHybrid.zip"
$ObjectIDGroupUser = (Get-AzADGroup -DisplayName $UserGroupName).id
$ObjectIDGroupAdmin = (Get-AzADGroup -DisplayName $AdminGroupName).id
$rolenameAdmin = "Storage File Data SMB Share Elevated Contributor"
$rolenameUser = "Storage File Data SMB Share Contributor"
$AccountType = "ComputerAccount"

La partie 4 décompresse l’archive ZIP et importe le module de jointure AzFilesHybrid :

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
New-Item -Path $folder -ItemType Directory

Invoke-WebRequest -Uri $AzFileSource -OutFile $locationAzFiledownload
Expand-Archive C:\AzFilesHybrid.zip -DestinationPath C:\AzFileHybrid
cd C:\AzFileHybrid
.\CopyToPSPath.ps1
Import-Module -Name AzFilesHybrid

La partie 5 effectue la commande de jointure du compte de stockage avec le domaine AD DS :

Join-AzStorageAccountForAuth `
-ResourceGroupName $ResourceGroupName `
-Name $StorageAccountName `
-DomainAccountType $AccountType `
-OrganizationalUnitDistinguishedName $OrganizationalUnitDistinguishedName
Cette commande est THE commande du script 😉
Copie d’écran d’un compte de stockage correctement joint au domaine AD DS.

La partie 6 affecte les rôles RBAC d’Azure sur le partage de fichier du compte de stockage avec les 2 groupes d’utilisateurs créés pour AVD :

$FileShareContributorRole = Get-AzRoleDefinition $rolenameAdmin 

$scope = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Storage/storageAccounts/$StorageAccountName/fileServices/default/fileshares/$AzufileShareName"

New-AzRoleAssignment -ObjectId $ObjectIDGroupAdmin -RoleDefinitionName $FileShareContributorRole.Name -Scope $scope

$FileShareContributorRole = Get-AzRoleDefinition $rolenameUser

$scope = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Storage/storageAccounts/$StorageAccountName/fileServices/default/fileshares/$AzufileShareName"

New-AzRoleAssignment -ObjectId $ObjectIDGroupUser -RoleDefinitionName $FileShareContributorRole.Name -Scope $scope

La partie 7 utilise la clef d’accès du compte de stockage pour monter un disque réseau. Cela sert à appliquer les droits NTFS juste après.

$connectTestResult = Test-NetConnection -ComputerName "$StorageAccountName.file.core.windows.net" -Port 445
if ($connectTestResult.TcpTestSucceeded)
{
  net use T: "\\$StorageAccountName.file.core.windows.net\$AzufileShareName" /user:Azure\$StorageAccountName $StorageAccountKey
} 
else 
{
  Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN,   Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}

La partie 8 utilise la commande ICACLS pour modifier les droits en adéquation avec les besoins FSLogix :

New-Item -Path $DirectoryID -ItemType Directory

icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /inheritance:d
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /remove "Creator Owner"
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /grant 'CREATOR OWNER:(OI)(CI)(IO)(M)'
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /remove "Authenticated Users" 
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /remove "Builtin\Users"
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /grant $domainname\"$UserGroupName":M
icacls \\$StorageAccountName.file.core.windows.net\$AzufileShareName\$Directory /grant $domainname\"$AdminGroupName":F

Etape III : Installation de la solution FSLogix

Peu important le type de jointure faite durant l’étape II, l’installation de la solution FSLogix sur Windows 10 reste la même. Cette installation est généralement lancée sur une machine virtuelle servant d’image pour votre environnement Azure Virtual Desktop. Il faut donc créer, au prélable de ce script d’installation, une nouvelle machine virtuelle sur Azure avec l’OS Windows 10 multisessions.

Script PowerShell

Le script PowerShell ci-dessous installe et configure FSLogix sur votre Windows 10. Comme à chaque fois, vous pouvez lancer le script d’un seul bloc ou partie après partie. La partie 1 du script sert à initialiser les variables pour la suite des prochaines commandes PowerShell. Seule la variable ci-dessous est à renseigner :

  • $connectionString : Il s’agit ici du chemin complet du partage de fichier créé sur le compte de stockage. Il se découpe toujours de la façon suivante :

\\”nom du compte de stockage”.file.core.windows.net\”nom du partage”\”sous-dossier”

$LocalWVDpath = "c:\temp\wvd\"
$FSLogixURI  = "https://aka.ms/fslogix_download"
$FSInstaller = "FSLogixAppsSetup.zip"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$connectionString = "" 

Dans mon cas, la variable est la suivante :

\\jloaaddssa2.file.core.windows.net\fslogix\Profiles

La partie 2 créé l’arborescence temporaire pour installer FSLogix sur l’image Windows 10 :

if((Test-Path c:\temp) -eq $false) {
    Add-Content -LiteralPath C:\New-WVDSessionHost.log "Create C:\temp Directory"
    Write-Host `
        -ForegroundColor Cyan `
        -BackgroundColor Black `
        "creating temp directory"
    New-Item -Path c:\temp -ItemType Directory
}
else {
    Add-Content -LiteralPath C:\New-WVDSessionHost.log "C:\temp Already Exists"
    Write-Host `
        -ForegroundColor Yellow `
        -BackgroundColor Black `
        "temp directory already exists"
}
if((Test-Path $LocalWVDpath) -eq $false) {
    Add-Content -LiteralPath C:\New-WVDSessionHost.log "Create C:\temp\WVD Directory"
    Write-Host `
        -ForegroundColor Cyan `
        -BackgroundColor Black `
        "creating c:\temp\wvd directory"
    New-Item -Path $LocalWVDpath -ItemType Directory
}
else {
    Add-Content -LiteralPath C:\New-WVDSessionHost.log "C:\temp\WVD Already Exists"
    Write-Host `
        -ForegroundColor Yellow `
        -BackgroundColor Black `
        "c:\temp\wvd directory already exists"
}
Add-Content `
-LiteralPath C:\New-WVDSessionHost.log `
"
ProfilePath       = $connectionString
"

La partie 3 télécharge la dernière version de la solution FSLogix :

Add-Content -LiteralPath C:\New-WVDSessionHost.log "Downloading FSLogix"
Invoke-WebRequest -Uri $FSLogixURI -OutFile "$LocalWVDpath$FSInstaller"

La partie 4 extrait de l’archive FSLogix :

Add-Content -LiteralPath C:\New-WVDSessionHost.log "Unzip FSLogix"
Expand-Archive `
-LiteralPath "C:\temp\wvd\$FSInstaller" `
-DestinationPath "$LocalWVDpath\FSLogix" `
-Force `
-Verbose
cd $LocalWVDpath
Add-Content -LiteralPath C:\New-WVDSessionHost.log "UnZip FXLogix Complete"

La partie 5 lance l’installation de FSLogix :

Add-Content -LiteralPath C:\New-WVDSessionHost.log "Installing FSLogix"
$fslogix_deploy_status = Start-Process `
-FilePath "$LocalWVDpath\FSLogix\x64\Release\FSLogixAppsSetup.exe" `
-ArgumentList "/install /quiet" `
-Wait `
-Passthru

Presque toutes les options de configurations FSLogix se font via des clefs de registre. Vous pouvez retrouver toutes les options ici. Voici un script PowerShell reprenant les plus intéressantes :


Add-Content -LiteralPath C:\New-WVDSessionHost.log "Configure FSLogix Profile Settings"
Push-Location 
Set-Location HKLM:\SOFTWARE\
New-Item `
    -Path HKLM:\SOFTWARE\FSLogix `
    -Name Profiles `
    -Value "" `
    -Force
New-Item `
    -Path HKLM:\Software\FSLogix\Profiles\ `
    -Name Apps `
    -Force
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "Enabled" `
    -Type "Dword" `
    -Value "1"
New-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "VHDLocations" `
    -Value $connectionString `
    -PropertyType MultiString `
    -Force
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "SizeInMBs" `
    -Type "Dword" `
    -Value "30720"
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "IsDynamic" `
    -Type "Dword" `
    -Value "1"
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "VolumeType" `
    -Type String `
    -Value "vhdx"
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "ConcurrentUserSessions" `
    -Type "Dword" `
    -Value "1"
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "FlipFlopProfileDirectoryName" `
    -Type "Dword" `
    -Value "1" 
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "SIDDirNamePattern" `
    -Type String `
    -Value "%username%%sid%"
Set-ItemProperty `
    -Path HKLM:\Software\FSLogix\Profiles `
    -Name "SIDDirNameMatch" `
    -Type String `
    -Value "%username%%sid%" 
New-ItemProperty `
    -Path HKLM:\SOFTWARE\FSLogix\Profiles `
    -Name "DeleteLocalProfileWhenVHDShouldApply" `
    -PropertyType "DWord" `
    -Value 1
Pop-Location

Enfin la partie 7 ci-dessous redémarre la machine virtuelle pour appliquer toute la configuration FSLogix.

Add-Content -LiteralPath C:\New-WVDSessionHost.log "Process Complete - REBOOT"
Restart-Computer -Force

Etape IV : Préparation de l’image + création d’AVD

Je ne passerai pas plus de temps du la gestion de l’image car ce n’est pas l’objectif principal de cet article. Néanmoins, les grandes étapes pour réutiliser cette image Windows 10 dans Azure Virtual Desktop sont :

  • Sysprep de l’image
  • Désallocation de la machine virtuelle
  • Capture de la machine virtuelle

L’article suivant, écrit par Robin Hobo explique tous les étapes l’ensemble du processus.

Etape V : Test de la solution FSLogix

Encore une fois, le fonctionnement de la solution FSLogix est identique, que vous soyez en domaine managé Azure AD DS ou en domaine AD DS. Un test de la solution est possible une fois l’image Windows 10 utilisée dans un environnement Azure Virtual Desktop.

Environnement de départ

La copie d’écran ci-dessous montre deux AVD : un géré par AADDS et l’autre par un AD DS.

Une fois l’environnement AVD déployé sur votre souscription Azure, vous pouvez assigner un groupe d’utilisateurs pour tester FSLogix :

L’assignement d’utilisateurs ou de groupes d’utilisateurs doit se faire pour chaque pool d’hôtes AVD, au niveau du groupe d’applications.

Une fois l’assignement effectué, le lancement du client Remote Desktop fait apparaitre le ou les environnements Azure Virtual Desktop :

Scenario A : Vérification FSLogix du domaine managé Azure AD DS

Avant le premier lancement de la session utilisateur, un tour rapide dans le partage de fichier du compte de stockage ne montre aucun profil FSLogix :

FSLogix contenant aucun profil pour l’environnement Azure AD DS, avant l’ouverture de session.

Au moment où l’utilisateur AVD s’authentifie pour la première fois sur une machine virtuelle d’AVD, le dossier se créé automatiquement sur le compte de stockage :

FSLogix contenant le profil pour l’environnement Azure AD DS après l’ouverture de session.

Scenario B : Vérification FSLogix du domaine AD DS

Avant le premier lancement de la session utilisateur, un tour rapide dans le partage de fichier du compte de stockage ne montre aucun profil FSLogix :

FSLogix contenant aucun profil pour l’environnement AD DS, avant l’ouverture de session.

Au moment où l’utilisateur AVD s’authentifie pour la première fois sur une machine virtuelle d’AVD, le dossier se créé automatiquement sur le compte de stockage :

FSLogix contenant le profil pour l’environnement AD DS, après l’ouverture de session.

L’ouverture du dossier montre bien le profil de profil de l’utilisateur au format VHDX :

Conclusion

Au final, FSLogix reste une solution pratique et performante pour la gestion des profils utilisateurs pour les environnements Azure Virtual Desktop. Sa relative facilité d’installation, ses performances et ses possibilités de personnalisation font le succès de cette solution dans un grand nombre de scénarios. Comme à chaque fois, pensez également à partager dans les commentaires vos propres expériences sur Azure Virtual Desktop 😋

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *