MS FSLogix-Profile 1. Was ist FSLogix Profilmanagement für Windows-Umgebungen ? FSLogix ist eine Microsoft-Lösung, die Benutzerprofile in virtuelle Festplatten (VHDX) auslagert. Beim Login wird der Container gemountet – das Profil ist sofort vollständig verfügbar, unabhängig vom Server. Dadurch werden Anmeldezeiten drastisch verkürzt und Serverumzüge zum Kinderspiel. 1.1 Hauptfunktionen Profile Container: Komplettes Benutzerprofil in einer VHDX-Datei Office Container: Separater Container für Outlook-Cache, Teams, OneDrive Application Masking: Anwendungen pro Benutzer/Gruppe ein-/ausblenden Java Version Control: Verschiedene Java-Versionen pro Anwendung 2. Vorteile und Nachteile 2.1 Vorteile Vorteil Beschreibung Schnelle Anmeldung Profil wird gemountet statt kopiert – Login in Sekunden statt Minuten Serverunabhängigkeit User kann sich an beliebigem Server anmelden, Profil folgt automatisch Einfache Migration Serverwechsel ohne Profilmigration – Container bleibt gleich Vollständiges Profil Im Gegensatz zu Roaming Profiles wird ALLES gespeichert Outlook-Performance OST-Datei bleibt erhalten, kein Neuaufbau bei jedem Login Einfaches Backup Eine VHDX-Datei pro User = einfache Sicherung Dynamische Größe VHDX wächst nur bei Bedarf, belegt nicht sofort Maximalgröße 2.2 Nachteile Nachteil Beschreibung Single-Session Standardmäßig nur eine gleichzeitige Anmeldung pro User Storage-Abhängigkeit Netzwerkfreigabe muss hochverfügbar und performant sein Keine echte Synchronisation Bei gleichzeitiger Anmeldung an zwei Geräten keine Zusammenführung (letze Abmeldung gewinnt) VHDX-Verwaltung Monitoring für Füllstand erforderlich (siehe Kapitel 6) Lizenzierung Nicht für alle Szenarien kostenlos (siehe Kapitel 3) 3. Lizenzierung und Kosten 3.1 Kostenlos enthalten bei Lizenz/Produkt Anmerkung RDS-CALs Remote Desktop Services – der klassische Terminalserver VDA-Lizenzen Virtual Desktop Access für VDI-Umgebungen Microsoft 365 E3/E5 Enterprise-Pläne Microsoft 365 A3/A5 Education-Pläne Microsoft 365 Business Premium Für KMU mit bis zu 300 Usern Windows 10/11 Enterprise Per User oder Device Windows 10/11 Education Bildungseinrichtungen 3.2 Nicht kostenlos / Nicht lizenziert Szenario Status Windows Pro ohne M365 Nicht lizenziert – auch nicht für Domänen-Clients Standalone-PCs ohne Domäne/Azure AD Nicht offiziell unterstützt Reine File-Server-Nutzung Nicht lizenziert 3.3 Wo erwerben? FSLogix selbst ist kostenlos – du benötigst lediglich eine der oben genannten Lizenzen. Der Download erfolgt direkt bei Microsoft: https://aka.ms/fslogix-latest Hinweis für Server + Clients: Wenn du normale Server mit Clients (nicht RDS) betreibst und keine M365 Business Premium oder Enterprise-Lizenzen hast, ist FSLogix nicht lizenziert. Alternative: Microsoft 365 Business Premium enthält FSLogix-Rechte. 4. Szenarien und gleichzeitige Anmeldung 4.1 Terminalserver (RDS) – Einzelner Server Bei einem einzelnen Terminalserver gibt es keine Probleme mit Doppel-Anmeldungen. Windows lässt standardmäßig nur eine Session pro User zu. Meldet sich ein User erneut an, landet er in seiner bestehenden Session. 4.2 Terminalserver-Farm (mehrere Server) Bei mehreren Terminalservern muss verhindert werden, dass ein User sich parallel an verschiedenen Servern anmeldet. Das regelt der RD-Verbindungsbroker (Connection Broker): Der Broker merkt sich, wo jeder User angemeldet ist Bei erneuter Verbindung wird der User zu seinem bestehenden Server geleitet Zusätzlich per GPO absichern: Computerkonfiguration → Administrative Vorlagen → Windows-Komponenten → Remotedesktopdienste → Remotedesktop-Sitzungshost → Verbindungen: Remotedesktopbenutzer auf eine Sitzung beschraenken -> Aktiviert Wichtig: FSLogix selbst regelt KEINE Sessions – das ist Aufgabe von Windows/RDS. FSLogix kümmert sich nur um das Profil. 4.3 Normale Server mit Clients (kein RDS) Hier gibt es keinen zentralen Broker. Wenn ein User sich an PC-A anmeldet und dann an PC-B: FSLogix Standard-Modus: Der erste Rechner hat den Container exklusiv. Am zweiten Rechner wird ein temporäres lokales Profil erstellt – Änderungen gehen verloren. Read-Only Modus (ProfileType=3): Beide können gleichzeitig arbeiten, aber Änderungen werden nicht zurückgeschrieben. Für echtes gleichzeitiges Arbeiten mit Synchronisation ist FSLogix nicht gedacht. Hierfür eignet sich eher: Klassische Ordnerumleitung auf Netzlaufwerk OneDrive Known Folder Move Kombination aus beidem 5. Installation und Konfiguration 5.1 Voraussetzungen Windows Server 2016 oder neuer / Windows 10/11 Dateifreigabe für Profile (SMB) Ausreichend Storage (ca. 5-30 GB pro User, dynamisch) Hyper-V-Rolle oder integrierte VHD-Unterstützung 5.2 Schritt 1: Freigabe vorbereiten Erstelle eine Freigabe auf deinem Fileserver, z.B.: \\fileserver\FSLogix\Profiles Man kann auch gleich auf Profiles den Namen legen, wenn man möchte ;-) NTFS-Berechtigungen: Benutzer/Gruppe Berechtigung Anwenden auf SYSTEM Vollzugriff Diesen Ordner, Unterordner und Dateien Domain Admins Vollzugriff Diesen Ordner, Unterordner und Dateien Domain Users Ändern Nur diesen Ordner Creator Owner Vollzugriff Nur Unterordner und Dateien Beispiel Screenshot: Freigabeberechtigungen: Jeder → Vollzugriff (NTFS regelt den Rest) 5.3 Schritt 2: FSLogix Agent installieren https://aka.ms/fslogix-latest Auf dem Terminalserver/Remotedesktop Client die Datei FSLogixAppsSetup.exe ausführen. Standard-Installation reicht aus. 5.4 Schritt 3: Konfiguration per Registry (Ich würde aber Schritt 5.5 per GPO bevorzugen) wurde gelöscht, GPO ist einfacher, deswegen bei 5.5 weiter machen. 5.5 Konfiguration per GPO (Alternative zur Registry empfohlen) Statt der Registry-Konfiguration kannst du FSLogix auch zentral per Gruppenrichtlinie steuern. Das ist besonders bei mehreren Servern praktisch. GPO-Vorlagen installieren Die ADMX-Vorlagen liegen nach der FSLogix-Installation unter: C:\Program Files\FSLogix\Apps\fslogix.admx C:\Program Files\FSLogix\Apps\fslogix.adml Kopiere die Dateien in den Central Store (falls vorhanden) oder lokal: # Central Store (empfohlen, denn bei mehren DCs wirds automatisch Synchroniert) \\domain.local\SYSVOL\domain.local\Policies\PolicyDefinitions\fslogix.admx \\domain.local\SYSVOL\domain.local\Policies\PolicyDefinitions\de-DE\fslogix.adml Falls die Verzeichnisse nicht bestehen manuell anlegen Einfach den Ordner manuell erstellen: \\domain.local\SYSVOL\domain.local\Policies\PolicyDefinitions Dann noch den Sprachordner: \\domain.local\SYSVOL\domain.local\Policies\PolicyDefinitions\de-DE Oder lokal auf dem DC (Ich würde Central Store bevorzugen siehe oben) C:\Windows\PolicyDefinitions\fslogix.admx C:\Windows\PolicyDefinitions\de-DE\fslogix.adml Nachdem die Dateien kopiert sind (lokal oder Central Store) GPO erstellen und verknuepfen Group Policy Management oeffnen (nicht gpedit.msc, das ist lokal, nicht Domänenbezogen) Neue GPO erstellen, z.B. "FSLogix Profile Container" GPO mit der OU verknuepfen, in der die Terminalserver liegen, in unserem Fall eine neue OU Rechtsklick auf die Dömäne dann neue Organistaioneinheit Nun unsere Gruppenrichtline auf Terminalserver ziehen Nun auf OK klicken GPO bearbeiten GPO-Einstellungen bearbeiten Rechtsklick auf die GPO und bearbeiten auswählen: Navigiere zu: Computer Configuration -> Richtlinienen -> Administrative Templates -> FSLogix -> Profile Containers Folgende Einstellungen konfigurieren: Einstellung Wert Beschreibung Enabled Enabled + Dropdown auf "Enabled" Aktiviert FSLogix (WICHTIG: Beides setzen!) Aber erst wenn die Profile migriert sind. Erstmal auf 0 lassen also Disabled, wenn Benutzer migriert werden sollen VHD Locations \\fileserver\FSLogix\Profiles Pfad zur Freigabe Delete Local Profile When VHD Should Apply Disabled Lokales Profil loeschen wenn FSLogix greift: Auf Disabled setzen Ganz wichtig, damit vorhandene Profile nicht gelöscht werden: Sind lokale Profile vorhanden wir auch keine VHDX angelegt. Also verhalten so als gäbe es FSLogix gar nicht. Size In MBs 30000 Maximale Groesse in MB (30 GB) Prevent Login With Failure Enabled Anmeldung verhindern wenn Container nicht geladen werden kann Prevent Login With Temp Profile Enabled Anmeldung mit temporaerem Profil verhindern, wenn schon woanders angemeldet ist NoProfileAvailableMessage Dein Profil ist bereits in Benutzung. Bitte melde dich zuerst am anderen Computer/Terminalserver ab Nachricht für Prevent Login With Temp Profile, ansonsten kommt ne riesen Fehlerbox. Muss als Reg Key erstellt werden. VolumeWaitTimeMS 20000 Legt fest, wie lange FSLogix maximal wartet, bis die VHDX-Datei verfügbar ist. Ist die Datei nach Ablauf der Zeit nicht verfügbar (z.B. weil sie von einem anderen Computer verwendet wird), schlägt der Login fehl. Default : 20000 (20 seconds) RoamIdentity Enabled Speichert die Authentifizierungs-Tokens für Microsoft 365 im FSLogix-Container statt lokal. Ohne diese Einstellung werden die Anmeldedaten lokal auf dem Server gespeichert – der User muss dann auf jedem Server sein Passwort neu eingeben. RoamCredentials nur Per Reg hinzufügbar und das aus gutem Grund! Speichert klassische Windows-Anmeldeinformationen (Benutzername/Passwort) im FSLogix-Container statt lokal. Diese Einstellung ist für ältere Authentifizierungsmethoden gedacht. Wann aktivieren Bei lokalem Exchange Server (On-Premises), IMAP/POP3 Konten, älteren Outlook-Versionen Registry HKLM\SOFTWARE\FSLogix\Profiles\RoamCredentials Wert 1 = Aktiviert, 0 = Deaktiviert GPO Nicht verfügbar – nur per Registry konfigurierbar Hinweis: Diese Einstellung gilt als veraltet. Die meisten modernen Umgebungen nutzen Microsoft 365 mit Web Account Manager (WAM) – dort ist stattdessen RoamIdentity die richtige Einstellung. RoamCredentials wird nur noch für Legacy-Umgebungen mit klassischer Authentifizierung benötigt. Sicherheitswarnung: Bei aktiviertem RoamCredentials werden Passwörter im Netzwerk-Container gespeichert. Bei Diebstahl der VHDX-Datei könnten diese kompromittiert werden. Powershell Befehl: Enable: New-ItemProperty -Path "HKLM:\SOFTWARE\FSLogix\Profiles" -Name "RoamCredentials" -Value 1 -PropertyType DWord -Force Disable: New-ItemProperty -Path "HKLM:\SOFTWARE\FSLogix\Profiles" -Name "RoamCredentials" -Value 0 -PropertyType DWord -Force NoProfileAvailableMessage nur Per Reg hinzufügbar Oder per GPO Registry Preferences verteilen: gpmc.msc → deine FSLogix GPO bearbeiten Computerkonfiguration → Einstellungen → Windows-Einstellungen → Registrierung Rechtsklick → Neu → Registrierungselement Eintragen: Aktion: Erstellen Struktur: HKEY_LOCAL_MACHINE Schlüsselpfad: SOFTWARE\FSLogix\Profiles Wertname: NoProfileAvailableMessage Werttyp: REG_SZ Wertdaten: Dein Profil ist bereits in Benutzung. Bitte melde dich zuerst am anderen Computer/Terminalserver ab. Wichtig: Bei "Enabled" muss sowohl der Status auf "Enabled" gesetzt werden ALS AUCH im Dropdown darunter nochmal "Enabled" ausgewaehlt werden. Sonst greift FSLogix nicht! Optionale Einstellungen Unter Profile Containers -> Container and Directory Naming: Einstellung mpfehlung Beschreibung Flip Flop Profile Directory Name Enabled Ordner heissen username_SID statt SID_username Virtual Disk Type VHDX Moderneres Format, besser fuer PowerShell-Verwaltung Nun noch im Active Directory Benutzer und Computer die Terminalserver auf unsere OU Terminal ziehen GPO aktualisieren Nach dem Konfigurieren auf dem DC und Terminalserver(n) die GPO aktualisieren oder Server neu starten.: gpupdate /force Nun können wir überpüfen ob die Gruppenrichtlinie auch drin ist. Auf den Terminalserver(n) überprüfen. gpresult /r Ausgabe: Betriebssystem Microsoft (R) Windows (R) Gruppenrichtlinienergebnis-Tool v2.0 © Microsoft Corporation. Alle Rechte vorbehalten. Am 25.01.2026 um 15:05:48 erstellt RSOP-Daten für HACKER-TEST\administrator auf TERM-TEST: Protokollmodus ----------------------------------------------------------------------- Betriebssystemkonfiguration: Mitgliedsserver Betriebssystemversion: 10.0.26100 Standortname: Default-First-Site-Name Roamingprofil:Nicht zutreffend Lokales Profil: C:\Users\administrator.HACKER-TEST Langsame Verbindung? Nein COMPUTEREINSTELLUNGEN ---------------------- CN=TERM-TEST,OU=Terminalserver,DC=hacker-test,DC=local Letzte Gruppenrichtlinienanwendung: 25.01.2026, um 15:05:33 Gruppenrichtlinieanwendung von: DC01-test.hacker-test.local Schwellenwert für langsame Verbindung:500 kbps Domänenname: HACKER-TEST Domänentyp: Windows 2008 oder höher Angewendete Gruppenrichtlinienobjekte -------------------------------------- FSLogix Profile Container Default Domain Policy Richtlinien der lokalen Gruppe Der Computer ist Mitglied der folgenden Sicherheitsgruppen ---------------------------------------------------------- Administratoren Jeder Benutzer NETZWERK Authentifizierte Benutzer Diese Organisation TERM-TEST$ Domänencomputer Von der Authentifizierungsstelle bestätigte ID Systemverbindlichkeitsstufe BENUTZEREINSTELLUNGEN ---------------------- CN=Administrator,CN=Users,DC=hacker-test,DC=local Letzte Gruppenrichtlinienanwendung: 25.01.2026, um 15:05:34 Gruppenrichtlinieanwendung von: DC01-test.hacker-test.local Schwellenwert für langsame Verbindung:500 kbps Domänenname: HACKER-TEST Domänentyp: Windows 2008 oder höher Angewendete Gruppenrichtlinienobjekte -------------------------------------- Nicht zutreffend Folgende herausgefilterte Gruppenrichtlinien werden nicht angewendet. ---------------------------------------------------------------------- Richtlinien der lokalen Gruppe Filterung: Nicht angewendet (Leer) Der Benutzer ist Mitglied der folgenden Sicherheitsgruppen ---------------------------------------------------------- Domänen-Benutzer Jeder Benutzer Administratoren INTERAKTIVE REMOTEANMELDUNG INTERAKTIV Authentifizierte Benutzer Diese Organisation LOKAL Richtlinien-Ersteller-Besitzer Domänen-Admins Organisations-Admins Schema-Admins Von der Authentifizierungsstelle bestätigte ID Abgelehnte RODC-Kennwortreplikationsgruppe Hohe Verbindlichkeitsstufe Der entscheidene Teil: Nun testen der Einstellungen: Get-ItemProperty -Path "HKLM:\SOFTWARE\FSLogix\Profiles" Ausgabe: Enabled : 1 VHDLocations : \\dateiserv-test\Profiles SizeInMBs : 30000 VolumeType : VHDX FlipFlopProfileDirectoryName : 1 DeleteLocalProfileWhenVHDShouldApply : 0 PreventLoginWithFailure : 1 PreventLoginWithTempProfile : 1 PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\FSLogix\Profiles PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\FSLogix PSChildName : Profiles PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry Hinweis: Registry und GPO koennen parallel existieren. GPO-Einstellungen ueberschreiben Registry-Werte. Fuer Konsistenz empfiehlt sich EINE Methode. 5.6 Schritt 4: Testen Server neu starten (oder Dienst frxsvc neu starten) Mit einem Testuser anmelden Auf der Freigabe prüfen ob VHDX erstellt wurde Kontrolle am Client per CMD: frx list-redirects Zeigt an, ob das Profil korrekt gemountet ist. 6. Profilgröße überwachen und automatisch vergrößern Ein volles Profil verhindert die Anmeldung! Daher ist Monitoring wichtig. 6.1 Manuelle Vergrößerung User muss abgemeldet sein. Dann per PowerShell: # VHDX auf 50 GB vergrößern Resize-VHD -Path "\\fileserver\FSLogix\Profiles\user_SID\Profile_user.VHDX" -SizeBytes 50GB Die Partition wächst beim nächsten Login automatisch mit. 6.2 Standardgröße für neue Profile ändern Registry-Wert anpassen (Beispiel 50 GB = 50000 MB = 0xC350): "SizeInMBs"=dword:0000c350 6.3 Automatisches Monitoring und Resize Siehe beiliegendes PowerShell-Skript: FSLogix-AutoResize.ps1 download FSLogix-AutoResize.ps1 # FSLogix VHDX Auto-Resize Script mit Mail-Benachrichtigung # Prüft alle Profile und vergrößert automatisch wenn > 85% voll # # Einrichtung: # 1. Skript anpassen (Pfade, Mail-Einstellungen) # 2. Speichern unter C:\Scripts\FSLogix-AutoResize.ps1 # 3. Log-Ordner anlegen: mkdir C:\Logs # 4. Scheduled Task erstellen (siehe unten) # # Scheduled Task per PowerShell erstellen: # $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\FSLogix-AutoResize.ps1" # $trigger = New-ScheduledTaskTrigger -Daily -At "06:00" # $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest # Register-ScheduledTask -TaskName "FSLogix AutoResize" -Action $action -Trigger $trigger -Principal $principal #region Konfiguration # ============================================================================ # HIER ANPASSEN # ============================================================================ # Pfad zu den FSLogix Profilen $ProfilePath = "\\fileserver\FSLogix\Profiles" # Ab welchem Füllstand vergrößern (in Prozent) $ThresholdPercent = 85 # Um wie viel GB vergrößern $GrowByGB = 10 # Maximale Größe (Obergrenze) $MaxSizeGB = 100 # Log-Datei $LogFile = "C:\Logs\FSLogix-AutoResize.log" # Mail-Konfiguration $MailSettings = @{ SmtpServer = "mail.example.de" # SMTP-Server Port = 587 # 587 für STARTTLS, 465 für SSL, 25 für unverschlüsselt UseSsl = $true # SSL/TLS verwenden Username = "monitoring@example.de" # SMTP-Benutzername Password = "DEIN-PASSWORT-HIER" # SMTP-Passwort From = "monitoring@example.de" # Absender To = "admin@example.de" # Empfänger (mehrere: "a@x.de","b@x.de") } # ============================================================================ # AB HIER NICHTS MEHR ÄNDERN # ============================================================================ #endregion #region Funktionen function Write-Log { param( [string]$Message, [string]$Level = "INFO" ) # Log-Verzeichnis erstellen falls nicht vorhanden $logDir = Split-Path -Path $LogFile -Parent if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $logEntry = "[$Level] $timestamp - $Message" # In Datei schreiben $logEntry | Out-File -FilePath $LogFile -Append -Encoding UTF8 # Auch auf Konsole ausgeben switch ($Level) { "ERROR" { Write-Host $logEntry -ForegroundColor Red } "WARNING" { Write-Host $logEntry -ForegroundColor Yellow } "RESIZE" { Write-Host $logEntry -ForegroundColor Green } default { Write-Host $logEntry } } } function Send-AlertMail { param( [string]$Subject, [string]$Body ) try { $securePassword = ConvertTo-SecureString $MailSettings.Password -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential ($MailSettings.Username, $securePassword) $mailParams = @{ SmtpServer = $MailSettings.SmtpServer Port = $MailSettings.Port UseSsl = $MailSettings.UseSsl Credential = $credential From = $MailSettings.From To = $MailSettings.To Subject = $Subject Body = $Body BodyAsHtml = $true Encoding = [System.Text.Encoding]::UTF8 } Send-MailMessage @mailParams Write-Log "Mail erfolgreich gesendet: $Subject" } catch { Write-Log "Mail-Versand fehlgeschlagen: $_" -Level "ERROR" } } function Get-HtmlReport { param( [array]$Warnings, [array]$Resizes, [array]$Errors ) $html = @"
Zusammenfassung: " $summaryParts = @() if ($Resizes.Count -gt 0) { $summaryParts += "✅ $($Resizes.Count) Profile vergrößert" } if ($Warnings.Count -gt 0) { $summaryParts += "⚠️ $($Warnings.Count) Warnungen" } if ($Errors.Count -gt 0) { $summaryParts += "❌ $($Errors.Count) Fehler" } $html += ($summaryParts -join " | ") + "
" # Vergrößerte Profile if ($Resizes.Count -gt 0) { $html += @"| Profil | Alte Größe | Neue Größe | Belegt |
|---|---|---|---|
| $($r.Name) | $($r.OldSize) GB | $($r.NewSize) GB | $($r.UsedPercent)% |
Diese Profile haben die maximale Größe von $MaxSizeGB GB erreicht und können nicht weiter automatisch vergrößert werden.
| Profil | Aktuelle Größe | Belegt |
|---|---|---|
| $($w.Name) | $($w.Size) GB | $($w.UsedPercent)% |
| Profil | Fehlermeldung |
|---|---|
| $($e.Name) | $($e.Error) |