The FSLogix 2201 Public Preview is now available

Microsoft

FSLogix 2201 Public Preview Update 1 has been published to address the issue outlined below. Please read details here.

 

FSLogix 2201 is now available in Public Preview.  This public preview is not recommended for production workloads. Please leverage your standard Microsoft support channels to report issues with this public preview release.

 

ISSUE IDENTIFIED IN THIS PUBLIC PREVIEW RELEASE:

We discovered an issue with the 2201 public preview that is impacting customers with session hosts configured to allow users to have more than one Windows session per user per host. In those situations, only that user's first session to a host will connect. Additional connections for that user to that host will fail to login.

 

Your environment is impacted by this bug if you have the "Restrict Remote Desktop Services users to a single Remote Desktop Services Session" group policy set to disabled or the HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services\fSingleSessionPerUser regkey value is set to 0.

 

We recommend impacted customers not install this public preview or revert back to the current generally available release. We are validating a fix for the issue and will publish an update to the public preview when it is available. Customers not impacted by this issue can continue validating this public preview release.

 

Preview Details

You can sign up here to participate in the Public Preview:

https://aka.ms/fslogix/preview

 

This release can be installed over all existing versions of FSLogix or you can perform a fresh install without a pre-existing FSLogix version.

 

Here's what's new in this release:

  • Fixed issue where the FSLogix Profile Service would crash if it was unable to communicate with the FSLogix Cloud Cache Service.
  • The OfficeFileCache folder located at %LOCALAPPDATA%\Microsoft\Office\16.0\OfficeFileCache is now machine specific and encrypted so we now exclude it from FSLogix containers. Office files located outside this folder are not impacted by this update.
  • Windows Server 2019 version 1809, and newer versions of Windows Server, natively support per-user search indexes and we recommend you leverage that native search index capability. FSLogix Search Indexing is no longer available on those versions of Windows Server.
  • Windows 10 Enterprise Multi-session and Windows 11 Enterprise Multi-session natively support per-user search indexes and FSLogix Search Indexing is no longer available on those operating systems.
  • FSLogix now correctly handles cases where the Windows Profile Service refCount registry value is set to an unexpected value.
  • Over 30 accessibility related updates have been made to the FSLogix installer and App Rules Editor.
  • A Windows event now records when a machine locks a container disk with a message that looks like "This machine '[HOSTNAME]' is using [USERNAME]'s (SID=[USER SID]) profile disk. VHD(x): [FILENAME]."
  • Resolved an issue where the DeleteLocalProfileWhenVHDShouldApply registry setting was sometimes ignored.
  • Fixed an issue where active user session settings where not retained if the FSLogix service was restarted. This was causing some logoffs to fail.
  • FSLogix will no longer attempt to reattach a container disk when the user session is locked.
  • Fixed an issue that caused the FSLogix service to crash when reattaching container disks.
  • Fixed a Cloud Cache issue that caused IO failures if the session host's storage blocksize was smaller than a cloud provider's. For optimal performance, we recommend the session host disk hosting the CCD proxy directory has a physical block size greater than or equal to the CCD storage provider with the largest blocksize size.
  • Fixed a Cloud Cache issue where a timed out read request (network outage, storage outage, etc.) was not handled properly and would eventually fail.
  • Reduced the chance for a Cloud Cache container disk corruption if a provider is experiencing connection issues.
  • Resolved an issue where temporary rule files were not deleted if rule compilation failed.
  • Previously, the Application masking folder was only created for the user who ran the installer. With this update, the rules folder is created when the Rules editor is launched.
  • Resolved an interoperability issue with large OneDrive file downloads that was causing some operations to fail.
  • Fixed an issue where per-user and per-group settings did not apply if the Profile or ODFC container was not enabled for all users.
  • Resolved an issue where the Office container session configuration was not cleaned up if a profile fails to load.
  • Fixed an issue where HKCU App Masking rules leveraging wildcards would fail to apply.
  • Fixed an issue where FSLogix did not properly handle logoff events if Profile or ODFC containers were disabled during the session or per-user/per-group filters were applied mid-session that excluded the user from the feature. Now FSLogix logoff related events will always occur if FSLogix loaded a container for the user.
  • Fixed an issue that caused some sessions configured with an ODFC container to fail to login.
  •  Resolved an issue where the rule editor would crash if there were no assignments configured.

 

81 Replies

@StephanstokeDid you solve this issue? I've exact same issue. Was wondering how to fix this issue. Thanks!

What's new? You fixed a critical problem with RefCount. We are waiting for the same with local_folders. Why is it taking so long?@Steve Downs 

Hi Sjaak,

Microsoft is still working on it. Are you experiencing the same problem in a server 2019 enviroment? I just sent some extra log files to Microsoft. I'll keep you and this forum informed.

Our environment:

- Windows server 2019 + latest updates.
- FsLogix Preview update 1 (fix a lot of bugs and is running stable).
- OneDrive latest update (no preview).

@vara93 We were finally able to troubleshoot this issue thanks to customers opening tickets and providing logs. We believe the issue is related to third-party software and are working with them to investigate.

When will we be able to see this preview version ?

@StephanstokeHi Stephan,

Yes almost same environment;

- Server 2019 RDS

- FSLogix 2.9.7979.62170

- Onedrive 22.033.0213.0002

@Sjaak null @Stephanstoke 

We have same issue on azure w10 multisession 21h2, with every version fslogix I tried and with the latest onedrive, some older version and deferred ring latest version. I tried it on w11, and there is too. I contacted O365 support, but they solved anything. Its very annoying...

As it is not only impacted preview version, there is another topis with this problem https://techcommunity.microsoft.com/t5/azure-virtual-desktop/onedrive-in-avd/m-p/3250770/highlight/f...

 

E: I tried to install iton clean image 21h2 without any updates ant it works, but If I install teams and some other apps VLC(don't ask, customer want it), total commander and so, it fails again, so its not linked to specific update...

@Stephanstoke 

 

Hi, i have exactly the same. I can reproduce this also on other environments with 2019 RDS.

 

When you use in onedrive the free/cleanup space (remove cached files). Only on the first time you open a file you got error 0x8007047c. If you got the error, and trie to open the file again, it is working.

When you place you onedrive folder outsite the fslogix problem than everything works fine. Did you find a solutions for this, rather than scripting and setting attributes on folders/files?

Also when using storage sense, you have the same error after cached files are removed.

 

 

@Steve Downs is there an update on the local_ folders?

@vara93 No significant update to date as we are dependent on other third parties for the existing investigation. Thanks for checking back and I'll be sure to provide more information as it becomes available.
@Jason_Parker, Is it possible to make a temporary fix using PowerShell ?
Any update on this? We have the same problem with local profiles not being removed. The files are in use by the Windows Kernel (PID 4). Cannot be released, only a reboot will release the handles.

The funny thing is this problem does not always reappear of a reboot. I can take some time to remanifest.
@gtiele When an application or process besides FSLogix is not properly releasing the open handles to the local_username folder, there is little FSLogix can do.

System reboots will release the open handles and should clean up the folders, but it does not mitigate the issue from reoccurring. We are still gathering evidence in order to determine if there is anything we can do, but no updates to report.

If we find a solution, there will for sure be a blog post about it.

It seems to be tied to a later (latest?) version of FSLogix since these errors are a relatively new occurrence for my clients.

The only other culprit I could think of that can hold files on driver/kernel level would be the antivirus software. We are using WithSecure (formerly F-secure) maybe other people are using the same?

Since it's a Kernel process there is no way of determining what process opened the file.

 

@Jason_Parker can you elaborate what 3rd party software was involved in other occurrences?

For us the folders that are left in use (access denied) are mainly:

 

  • AppData\Roaming\Adobe\Acrobat\DC
  • AppData\Roaming\Downloaded Installations
  • AppData\Roaming\Google\Chrome
  • AppData\Roaming\Microsoft
  • AppData\Roaming\Microsoft Teams\Logs
  • AppData\Roaming\Slack

 

Since it's such a variety of files it's probably FSLogix itself or a virusscanner. I would like to trial running without AntiVirus but the issue only occurs every so often so that could take a long time to determine for sure if the issue stays away or not.

In the end, our workaround is:

- Schedule a reboot of servers during Maintenance hours

- Run a delprof2 afterwards

 

That's it really. 

 

In the end I've built a script that is scheduled on the RD Broker to check the RD Session Hosts during the night (the script is tied to a scheduled task that runs every 30 minutes between 03:00 AM and 05:00 AM) to reboot and cleanup the server whenever no users are connected (or are disconnected for at least 10 minutes). It also does some Client Side Rendering cleanups.

 

Hope this script might help out some of you people out there:

 

$Computers = (Get-RDSessionCollection | Get-RDSessionHost).SessionHost
$ScriptFolder = "C:\Scripts"
$LogFolder = "C:\Scripts\Logs"
$MinimumDisconnctedTimeInMinutes = 10

#Creating logoutput and filenames
$LogFile = $LogFolder + "\" + (Get-Date -UFormat "%d-%m-%Y") + " Maintain RDS Nodes.txt"

Function Write-Log
{
	param (
        [Parameter(Mandatory=$True)]
        [array]$LogOutput
	)
	$currentDate = (Get-Date -UFormat "%d-%m-%Y")
	$currentTime = (Get-Date -UFormat "%T")
	$logOutput = $logOutput -join (" ")
	"[$currentDate $currentTime] $logOutput" | Out-File $Logfile -Append
}

# Reboot where possible
Write-Log -LogOutput "Starting stage Reboot"
$rdUserSessions = Get-RdUserSession
$RebootedComputers = @()

Foreach($computer in $Computers)
{
    Write-Log -LogOutput "- Validating $($computer)"

    # Check if the server is online:
    If (Test-Path "\\$($computer)\\c$")
    {
        $noRdSessionBlock = $True
        $rdSessionCount = ($rdUserSessions | Where-Object { $_.HostServer -eq $computer}).Count

        # If there are sessions, see if they are a reason NOT to reboot:
        If ($rdSessionCount -gt 0)
        {
            # Walk through sessions on this computer:
            ForEach($rdUserSession in ($rdUserSessions | Where-Object { $_.HostServer -eq $computer}))
            {
                # Check if the session was active:
                If ($rdUserSession.SessionState -eq "STATE_ACTIVE") 
                { 
                    $noRdSessionBlock = $False 
                }

                # Check if the session is disconncted LESS than it should:
                ElseIf ($rdUserSession.DisconnectTime -gt (Get-Date).AddMinutes(0 - $MinimumDisconnctedTimeInMinutes))
                {
                    $noRdSessionBlock = $False 
                }
            }
        }

        # Check if we're OK to reboot:
        If ( $noRdSessionBlock )
        {
            # Test if the server has been 'up' for at least 16 hours:
            If ((Get-CimInstance -ComputerName $computer -ClassName Win32_OperatingSystem).LastBootUpTime -le (Get-Date).AddHours(-16))
            {
                # Reboot the server:
                Try
                {
                    Restart-Computer -ComputerName $computer -Force -Confirm:$False
                    $RebootedComputers += $computer
                    Write-Log -LogOutput "-> Server is rebooted"
                }
                Catch
                {
                    Write-Log -LogOutput "-> Failed to reboot Server"
                }
            }
            Else { Write-Log -LogOutput "-> Server was recently rebooted already" }
        }
        Else { Write-Log -LogOutput "-> Server still has active or recently disconnected sessions" }
    }
    Else { Write-Log -LogOutput "-> Server is not accessible" }
}

Write-Log -LogOutput "Sleeping 5 minutes to start-up"
Start-Sleep -Seconds 300

# Cleanup old profiles
Write-Log -LogOutput "Starting stage Cleanup"

Foreach($computer in $RebootedComputers)
{
    Write-Log -LogOutput "- Cleaning $($computer)"

    # Prepare request
    $arguments = ""
    $arguments += " /c:\\" + $computer;
    $arguments += " /u /ed:vt.admin* /ed:SVC-NW-PRTGServices";
    $finalcommand = ".\DelProf2.exe" + $arguments
                
    # Run request
    Push-Location $ScriptFolder
    $result = Invoke-Expression $finalcommand 
    Pop-Location
    Write-Log -LogOutput "-> Profiles Cleaned"

    # Also Cleanup the Printer Client Side Rendering:
    Invoke-Command -Computer $computer -ScriptBlock {
        $RegPath = "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider"
        If (Test-Path $RegPath) 
        { 
            Remove-Item $RegPath -Recurse -Force -Confirm:$False
            Restart-Service Spooler -Force
        }
    }
    Write-Log -LogOutput "-> Spooler Cleaned"
}

 

We have cases where the following applications or processes have open handles:
- WebSocketService.exe (Citrix)
- PolicyPak
- Credential Manager
- AntiVirus without exclusions
Thank you for the information.

In my case we are not using the first 2 applications, so they are not exclusively to blame! 'Credential Manager' is the manager from Microsoft itself I assume? Can't call that 3rd party.

Something else I don't understand. Why would these locks be generated when you logoff? If for example the Google folder is locked during normal usage the user would be unable to use Google Chrome. But that is not the case!

Also some other behavior I observed. As soon as the problem occurs for one user. All user that logoff after that exhibit the same behavior. But once again, only when they logoff, during operation no error occurs. To me that seems to indicate that Fslogix itself does something upon user logoff causing certain files to blocked on kernel level.

If it was a virus scanner it would be hit and miss, it's not logical that all the same directories for every user just happened to be scanned the moment a user logs off each and every time.
Hi Vissersh,

There is currently no solution and I am still working with Microsoft to solve the problem and provide logs for research.
At the moment we have disabled files-on-demand to avoid the error.
In your enviroment, do you have ivanti workspace running?

Hi @Steve Downs

we recommend the session host disk hosting the CCD proxy directory has a physical block size greater than or equal to the CCD storage provider with the largest blocksize size.

 

Does this belong to the block size of NTFS or ReFS volumes where Profile or Office Containers are saved to?

 

What are the recommendations on this block size?

 

well, you dont ask me, but I reply, none of my troubled environments use ivanti, but I can ask a colleague to test it there....
my environments use citrix, but I test it without it and it behave same. I test it on clean OS only with all updates onedrive and fslogix and error came up