Improve AVD User Experience: Warm-Up to decreas User login time

Note: This post and the scripts was updated to run after some changes coming with a Windows Update in February 2026

If you are running Azure Virtual Desktop with FSLogix, the first login to a host takes longer than the following logins. I also wrote about this effect (I call is Cold vs. Warm start) a few weeks ago here: https://lnkd.in/eEQHP5gA and https://www.linkedin.com/posts/marcelmeurer_azurevirtualdesktop-coldstart-warmstart-activity-7227298731124019200--nsM

In short, If a VM is started in Azure, the first login of a user takes much longer than the login of the following users to this VM. And: It makes no difference if the first user logs in one or 30 minutes after starting the VM. I did a lot of tests by running ProcMon, FileActivityWatch, and RegistryChangesView in the system context to capture events during the first login 🤓. I can clearly see dependencies to AppX packages on the VM. In my tests, processing of AppX packages for the first user took 120 seconds, and for the next user, only a few seconds. Right now, I cannot reproduce the first AppX processing without a user logging into the host (but I'm working on that). The first user will also see a black screen during the login.

Therefore, I did another test: Create a temporary local user on the VM directly after the start and make a login (autogenerated passwords and direct deletion of the users after the login).

The result is as expected: After the start of the VM, the warmup user triggers the AppX processing and other "initializations." The next - regular - user experiences a much faster login while that is technically the second login for the VM.

I wrote a script to automate a local logon after each VM/host's start. That may not be the best way to handle this solution, but it is a workaround until I find a more pragmatic solution without a warm-up user.

How does it work? Link

The script is started directly after the start of a VM/host and runs in the context of the computer. The following steps happen: - Temporarily, allow RDS logon without validation computer certificates (only for the system account) - Generate a local user (warm-up user) with a random password. The account automatically expires after 10 minutes - Add the user to the Remote Desktop User Group - Configure the sign-on via RDS to localhost - The warm-up user connects via RDS to localhost (the first user logon) - Wait 5 minutes - Logoff the user - Remove the user account - Remove the user profile from disk

There are some additional error-handling routines in the script.

Pro tip: If you ever search for a way to get session information with PowerShell without parsing qwinsta.exe or quser.exe, check the script. It also contains a PowerShell method to log off a specific session.

Install the warm-up user script Link

You can install the script on an existing host or on your Golden Master / Template VM (which you hopefully capture loss-less with WVDAdmin or Hydra for Azure Virtual Desktop). Copy the script to the VM and run the following command in an administrative PowerShell:

.\WarmUp.ps1 -Mode Install

This copies the script to C:\windows\WarmUp.ps1 and creates a scheduled task to start the script automatically with the computer.

Download the script Link

The script is available here