Direkt zum Hauptinhalt

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

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



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



Freigabeberechtigungen: Jeder → Vollzugriff (NTFS regelt den Rest)

5.3 Schritt 2: FSLogix Agent installieren

Download: https://aka.ms/fslogix-latest



Auf dem Terminalserver/Client die Datei FSLogixAppsSetup.exe ausführen. Standard-Installation reicht aus.

5.4 Schritt 3: Konfiguration per Registry

Speichere folgenden Inhalt als .reg-Datei und importiere sie:



Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SOFTWARE\FSLogix\Profiles]
"Enabled"=dword:00000001
"VHDLocations"="\\\\fileserver\\FSLogix\\Profiles"
"DeleteLocalProfileWhenVHDShouldApply"=dword:00000001
"FlipFlopProfileDirectoryName"=dword:00000001
"SizeInMBs"=dword:00007530
"VolumeType"="VHDX"



Erklärung der Werte:

  

Wert

Bedeutung

Enabled = 1

FSLogix aktivieren

VHDLocations

Pfad zur Freigabe (doppelte Backslashes in .reg!)

DeleteLocalProfileWhenVHDShouldApply = 1

Lokales Profil löschen wenn FSLogix greift

FlipFlopProfileDirectoryName = 1

Ordnername: username_SID statt SID_username

SizeInMBs = 30000

Maximale Größe 30 GB (0x7530 hex)

VolumeType = VHDX

VHDX statt VHD (moderner, besser)

Hier ein kleines Script zum Umrechnen von Gigabyte2Hex

# GB zu Hex Konverter für FSLogix SizeInMBs
# Verwendung: .\GB-to-Hex.ps1 30
#             .\GB-to-Hex.ps1 -GB 50

param(
    [Parameter(Position=0, Mandatory=$true)]
    [int]$GB
)

$MB = $GB * 1024
$Hex = "{0:X8}" -f $MB

Write-Host ""
Write-Host "Eingabe:       $GB GB" -ForegroundColor Cyan
Write-Host "In MB:         $MB MB" -ForegroundColor Cyan
Write-Host "Hex-Wert:      $Hex" -ForegroundColor Green
Write-Host ""
Write-Host "Registry-Eintrag:" -ForegroundColor Yellow
Write-Host '"SizeInMBs"=dword:' -NoNewline
Write-Host $Hex.ToLower() -ForegroundColor Green
Write-Host ""

gigabyte2hex_converter.ps1 download

5.5 Schritt 4: Testen

  1. Server neu starten (oder Dienst frxsvc neu starten)

  2. Mit einem Testuser anmelden

  3. 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 = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
        body { 
            font-family: 'Segoe UI', Arial, sans-serif; 
            margin: 20px;
            background-color: #f5f5f5;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            background-color: white;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        h2 { 
            color: #333; 
            border-bottom: 2px solid #4472C4;
            padding-bottom: 10px;
        }
        h3 {
            margin-top: 25px;
        }
        table { 
            border-collapse: collapse; 
            width: 100%; 
            margin-bottom: 20px; 
        }
        th, td { 
            border: 1px solid #ddd; 
            padding: 10px 12px; 
            text-align: left; 
        }
        th { 
            background-color: #4472C4; 
            color: white; 
        }
        tr:nth-child(even) { 
            background-color: #f9f9f9; 
        }
        tr:hover {
            background-color: #f1f1f1;
        }
        .warning { 
            background-color: #fff3cd !important; 
        }
        .error { 
            background-color: #f8d7da !important; 
        }
        .success { 
            background-color: #d4edda !important; 
        }
        .info-box {
            background-color: #e7f3ff;
            border-left: 4px solid #4472C4;
            padding: 10px 15px;
            margin-bottom: 20px;
        }
        .footer {
            margin-top: 30px;
            padding-top: 15px;
            border-top: 1px solid #ddd;
            font-size: 12px;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2>🗄️ FSLogix Auto-Resize Report</h2>
        
        <div class="info-box">
            <strong>Server:</strong> $env:COMPUTERNAME<br>
            <strong>Zeitpunkt:</strong> $(Get-Date -Format "dd.MM.yyyy HH:mm:ss")<br>
            <strong>Profilpfad:</strong> $ProfilePath
        </div>
"@

    # Zusammenfassung
    $html += "<p><strong>Zusammenfassung:</strong> "
    $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 " | ") + "</p>"

    # Vergrößerte Profile
    if ($Resizes.Count -gt 0) {
        $html += @"
        <h3>✅ Automatisch vergrößerte Profile</h3>
        <table>
            <tr>
                <th>Profil</th>
                <th>Alte Größe</th>
                <th>Neue Größe</th>
                <th>Belegt</th>
            </tr>
"@
        foreach ($r in $Resizes) {
            $html += "<tr class='success'><td>$($r.Name)</td><td>$($r.OldSize) GB</td><td>$($r.NewSize) GB</td><td>$($r.UsedPercent)%</td></tr>"
        }
        $html += "</table>"
    }

    # Warnungen
    if ($Warnings.Count -gt 0) {
        $html += @"
        <h3>⚠️ Maximum erreicht - Manuelle Prüfung erforderlich!</h3>
        <p style="color: #856404;">Diese Profile haben die maximale Größe von $MaxSizeGB GB erreicht und können nicht weiter automatisch vergrößert werden.</p>
        <table>
            <tr>
                <th>Profil</th>
                <th>Aktuelle Größe</th>
                <th>Belegt</th>
            </tr>
"@
        foreach ($w in $Warnings) {
            $html += "<tr class='warning'><td>$($w.Name)</td><td>$($w.Size) GB</td><td>$($w.UsedPercent)%</td></tr>"
        }
        $html += "</table>"
    }

    # Fehler
    if ($Errors.Count -gt 0) {
        $html += @"
        <h3>❌ Fehler bei der Verarbeitung</h3>
        <table>
            <tr>
                <th>Profil</th>
                <th>Fehlermeldung</th>
            </tr>
"@
        foreach ($e in $Errors) {
            $html += "<tr class='error'><td>$($e.Name)</td><td>$($e.Error)</td></tr>"
        }
        $html += "</table>"
    }

    # Footer
    $html += @"
        <div class="footer">
            Diese E-Mail wurde automatisch generiert vom FSLogix Auto-Resize Script.<br>
            Schwellwert: ${ThresholdPercent}% | Vergrößerung: +${GrowByGB} GB | Maximum: ${MaxSizeGB} GB
        </div>
    </div>
</body>
</html>
"@

    return $html
}
#endregion

#region Hauptlogik
Write-Log "=== Starte FSLogix Auto-Resize ===" 

# Prüfen ob Profilpfad erreichbar
if (-not (Test-Path $ProfilePath)) {
    Write-Log "Profilpfad nicht erreichbar: $ProfilePath" -Level "ERROR"
    
    $errorBody = Get-HtmlReport -Warnings @() -Resizes @() -Errors @(@{
        Name  = "Profilpfad"
        Error = "Der Pfad $ProfilePath ist nicht erreichbar. Bitte Netzwerkverbindung und Berechtigungen prüfen."
    })
    Send-AlertMail -Subject "FSLogix FEHLER: Profilpfad nicht erreichbar" -Body $errorBody
    exit 1
}

# Arrays für Report
$warnings = @()
$resizes = @()
$errors = @()

# Alle VHDX-Dateien finden
$vhdxFiles = Get-ChildItem -Path $ProfilePath -Recurse -Filter "*.vhdx" -ErrorAction SilentlyContinue

Write-Log "Gefundene Profile: $($vhdxFiles.Count)"

foreach ($vhdx in $vhdxFiles) {
    try {
        # VHDX mounten (readonly) um Größe zu prüfen
        $mount = Mount-VHD -Path $vhdx.FullName -ReadOnly -Passthru -ErrorAction Stop
        $partition = Get-Partition -DiskNumber $mount.DiskNumber | Where-Object { $_.Type -eq "Basic" }
        
        if ($partition) {
            $volume = Get-Volume -Partition $partition
            $usedPercent = [math]::Round((($volume.Size - $volume.SizeRemaining) / $volume.Size) * 100, 1)
            $currentSizeGB = [math]::Round($volume.Size / 1GB, 1)
            
            Write-Log "Prüfe: $($vhdx.Name) - $usedPercent% belegt ($currentSizeGB GB)"
            
            # Dismounten vor möglichem Resize
            Dismount-VHD -Path $vhdx.FullName
            
            # Prüfen ob Schwellwert überschritten
            if ($usedPercent -ge $ThresholdPercent) {
                $currentMaxGB = [math]::Round((Get-VHD -Path $vhdx.FullName).Size / 1GB, 1)
                $newSizeGB = $currentMaxGB + $GrowByGB
                
                if ($newSizeGB -le $MaxSizeGB) {
                    # Vergrößern
                    Write-Log "RESIZE: $($vhdx.Name) von $currentMaxGB GB auf $newSizeGB GB" -Level "RESIZE"
                    Resize-VHD -Path $vhdx.FullName -SizeBytes ($newSizeGB * 1GB)
                    
                    $resizes += @{
                        Name        = $vhdx.Name
                        OldSize     = $currentMaxGB
                        NewSize     = $newSizeGB
                        UsedPercent = $usedPercent
                    }
                }
                else {
                    # Maximum erreicht
                    Write-Log "WARNUNG: $($vhdx.Name) hat Maximum ($MaxSizeGB GB) erreicht!" -Level "WARNING"
                    
                    $warnings += @{
                        Name        = $vhdx.Name
                        Size        = $currentMaxGB
                        UsedPercent = $usedPercent
                    }
                }
            }
        }
        else {
            Dismount-VHD -Path $vhdx.FullName
            Write-Log "Keine gültige Partition gefunden in: $($vhdx.Name)" -Level "WARNING"
        }
    }
    catch {
        Write-Log "FEHLER bei $($vhdx.Name): $_" -Level "ERROR"
        
        # Sicherstellen dass VHD dismounted ist
        Dismount-VHD -Path $vhdx.FullName -ErrorAction SilentlyContinue
        
        $errors += @{
            Name  = $vhdx.Name
            Error = $_.Exception.Message
        }
    }
}

# Mail senden wenn es was zu berichten gibt
if ($warnings.Count -gt 0 -or $resizes.Count -gt 0 -or $errors.Count -gt 0) {
    
    # Betreff zusammenbauen
    $subject = "FSLogix Report: "
    $parts = @()
    
    if ($resizes.Count -gt 0) { $parts += "$($resizes.Count) vergrößert" }
    if ($warnings.Count -gt 0) { $parts += "$($warnings.Count) Warnungen" }
    if ($errors.Count -gt 0) { $parts += "$($errors.Count) Fehler" }
    
    $subject += $parts -join ", "
    
    # HTML-Report erstellen und senden
    $body = Get-HtmlReport -Warnings $warnings -Resizes $resizes -Errors $errors
    Send-AlertMail -Subject $subject -Body $body
}
else {
    Write-Log "Keine Aktionen erforderlich - alle Profile im grünen Bereich"
}

Write-Log "=== Durchlauf beendet ==="
#endregion

Das Skript:

  • Prüft alle Profile auf Füllstand

  • Vergrößert automatisch wenn über Schwellwert (Standard: 85%)

  • Sendet E-Mail-Benachrichtigung bei Aktionen oder Fehlern

  • Loggt alle Aktivitäten



Einrichtung als Scheduled Task:

$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

FSLogix-AutoResize.ps1 download

7. Bestehende Profile migrieren

7.1 Option A: Sauber neu anfangen

User meldet sich an, neues Profil wird erstellt. Outlook, Netzlaufwerke etc. müssen neu eingerichtet werden. Bei wenigen Usern vertretbar.

7.2 Option B: Profil übernehmen mit frx copy-profile

Das FSLogix-Tool kann bestehende lokale Profile in den Container kopieren:

frx copy-profile -filename "\\fileserver\FSLogix\Profiles\user_SID\Profile_user.VHDX" -username "DOMAIN\username" -size-mbs 30000

7.3 Option C: Migration mit Transwiz (Drittanbieter)

Für einfache GUI-basierte Migration:

  1. Am alten Server Profil exportieren (.zip)

  2. Am neuen Server importieren und User zuweisen

  3. Danach FSLogix aktivieren


8. Troubleshooting

8.1 User kann sich nicht anmelden

  • Freigabe erreichbar? Test: dir \\fileserver\FSLogix\Profiles

  • VHDX voll? Manuell vergrößern (siehe Kapitel 6.1)

  • VHDX bereits gemountet? Anderer Server/PC hält Container offen

  • Berechtigungen korrekt? Creator Owner muss Vollzugriff haben

8.2 Profil wird nicht geladen (lokales Profil statt Container)

  • Registry prüfen: Enabled = 1?

  • Dienst läuft? services.msc → FSLogix Apps Services

  • Logs prüfen: C:\ProgramData\FSLogix\Logs

8.3 Anmeldung sehr langsam

  • Netzwerk zum Fileserver prüfen (Latenz, Bandbreite)

  • Antivirus-Ausnahmen für VHDX-Dateien?

  • Storage-Performance (IOPS) ausreichend?

8.4 Nützliche Befehle

# Status prüfen
frx list-redirects


# Logs anzeigen
Get-Content C:\ProgramData\FSLogix\Logs\Profile*.log -Tail 50


# VHDX-Info abrufen
Get-VHD -Path "\\server\share\user_SID\Profile_user.VHDX"


9. Checkliste für die Einrichtung

Zum Abhaken:



  

Schritt

Erledigt

Lizenzierung geklärt (RDS-CAL, M365, etc.)

Freigabe erstellt mit korrekten Berechtigungen

FSLogix Agent installiert

Registry-Konfiguration importiert

Server/Client neu gestartet

Test-Anmeldung erfolgreich

VHDX auf Freigabe vorhanden

frx list-redirects zeigt gemountetes Profil

Monitoring-Skript eingerichtet

Scheduled Task für Auto-Resize erstellt

Bei RDS-Farm: Verbindungsbroker konfiguriert

Bei RDS-Farm: GPO für Single-Session aktiviert





Stand: Januar 2026 | Erstellt mit Claude