VDIWarmUp 1.4

Reduce VDI User Logon Time - Improve UX

Download Version 1.4.7


VDIWarmUp improves logon times for users by pre-logging onto the VM at system startup.

The VDIWarmUp user connects to the VM via RDP and optionally runs a profile logon script that calls common processes to improve application launch times for subsequent users.

  • Supports pre-existing VMs
  • Supports Specialized Images
  • Supports Generalized Images
  • Supports Active Directory
  • Supports Entra ID
  • Supports AVD Session Hosts
  • Supports Citrix VDAs
  • Integrates with AVDManage
  • Digitally Signed


Watch the Video - Windows 11 Multi-User in Treacle Mode

Warning: If you run this video in Full Screen you may receive a scareware blocker warning as the video appears to be emulating your desktop while obscuring your real desktop.


Comparison

Cold Logon Seconds Cold Logon With VDIWarmUp Seconds
25/03/2026 01:18:52 : User: user1
25/03/2026 01:18:52 : Domain: DOMAIN
25/03/2026 01:18:52 : Authentication Time: 25/03/2026 01:18:20
25/03/2026 01:18:52 : RDP Session connecting: 03/25/2026 01:18:20
25/03/2026 01:18:52 : Logon Time: 03/25/2026 01:18:24
25/03/2026 01:18:52 : Winlogon: 03/25/2026 01:18:24
25/03/2026 01:18:52 : Load User Profile: 03/25/2026 01:18:26
25/03/2026 01:18:52 : FSLogix: 03/25/2026 01:18:26 - Profile load: Status: 0 Reason: 0 Error: 0
25/03/2026 01:18:52 : Loaded User Profile: 03/25/2026 01:18:26
25/03/2026 01:18:52 : Group Policy Starting: 25/03/2026 01:18:26
25/03/2026 01:18:52 : Group Policy Applied: 25/03/2026 01:18:28
25/03/2026 01:18:52 : Starting shell: 25/03/2026 01:18:34
25/03/2026 01:18:52 : RDP Session connected: 03/25/2026 01:18:34
25/03/2026 01:18:52 : Logon script starting: 03/25/2026 01:18:34
25/03/2026 01:18:52 : Logon script complete: 03/25/2026 01:18:34
25/03/2026 01:18:52 : UserInit: 25/03/2026 01:18:53
25/03/2026 01:19:08 : UserInit Complete: 25/03/2026 01:19:06
25/03/2026 01:19:08 : Duration: 45.2523156

 

 

4

6

 

8
14

 

33
46

25/03/2026 01:06:57 : User: user1
25/03/2026 01:06:57 : Domain: DOMAIN
25/03/2026 01:06:57 : Authentication Time: 25/03/2026 01:06:48
25/03/2026 01:06:57 : RDP Session connecting: 03/25/2026 01:06:48
25/03/2026 01:06:57 : Logon Time: 03/25/2026 01:06:49
25/03/2026 01:06:57 : Winlogon: 03/25/2026 01:06:49
25/03/2026 01:06:57 : Load User Profile: 03/25/2026 01:06:50
25/03/2026 01:06:57 : FSLogix: 03/25/2026 01:06:50 - Profile load: Status: 0 Reason: 0 Error: 0
25/03/2026 01:06:57 : Loaded User Profile: 03/25/2026 01:06:50
25/03/2026 01:06:57 : Group Policy Starting: 25/03/2026 01:06:50
25/03/2026 01:06:57 : Group Policy Applied: 25/03/2026 01:06:52
25/03/2026 01:06:57 : Starting shell: 25/03/2026 01:06:55
25/03/2026 01:06:57 : RDP Session connected: 03/25/2026 01:06:55
25/03/2026 01:06:57 : Logon script starting: 03/25/2026 01:06:55
25/03/2026 01:06:57 : Logon script complete: 03/25/2026 01:06:55
25/03/2026 01:06:57 : UserInit: 25/03/2026 01:06:58
25/03/2026 01:07:20 : UserInit Complete: 25/03/2026 01:07:19
25/03/2026 01:07:20 : Duration: 30.5668411

 

 

1

2

 

4
7

 

10
31


Installation

Install VDIWarmUp in your master image.

Run VDIWarmUp.msi (as Administrator)

Click Next

Agree and click Next
Click Next

Run logon script at startup. Click Next

When deploying with AVDTurbo, AVD-Config can disable the Remote Desktop Agent Bootloader service to prevent connections while VDIWarmUp is running. VDIWarmUp can enable and start the service when complete, enabling AVD logons.

If the Master Image will join Microsoft Active Directory or Entra ID, select the appropriate option. This prevents VDIWarmUp from interrupting the image deployment process. It will also prevent VDIWarmUp from running at startup when updating the Master Image.

If using Citrix PVS or MCS, you can disable the Citrix Desktop Service in the Master Image to prevent connections while VDIWarmUp is running. VDIWarmUp can enable and start the service when complete, enabling Citrix logons.
Specify a maximum session duration. This should be greater than the time required to run the logon script. Click Next
Click Close.

When installation is complete.

Modify C:\Windows\System32\Repl\Import\Scripts\VDIWarmUp.cmd based on your application environment.

Run VDIWarmUp.exe /config (as Administrator) to create the VDIWarmUpConfig user and VDIWarmUp Scheduled Tasks.

Run VDIWarmUp.exe /test (as Administrator) to launch an RDP Connection, create the VDIWarmUp user profile and validate your configuration.

Validate C:\Windows\Temp\VDIWarmUp-<USERNAME>.log.


Validate the VDIWarmUp user.

Check that VDIWarmUp is a member of Administrators and that the Profile Logon script is set correctly.

The password is rotated to a new random complex value at every launch. (Contains at least five uppercase letters, five lowercase letters, five numbers, and five special characters)

You can manually generate a new password by running VDIWarmUp.exe /config (as Administrator)

Validate the VDIWarmUpConfig scheduled task.

The VDIWarmUpConfig scheduled task runs as SYSTEM. It updates the VDIWarmup scheduled task, then starts the VDIWarmup scheduled task.

Validate the VDIWarmUp scheduled task.

You can run either task manually. No connection window will be visible however you can monitor progress by watching the Users tab in Task Manager and by reviewing the VDIWarmUp-SYSTEM.log and VDIWarmUp-VDIWarmUp.log files.

No Trigger.

The VDIWarmUpConfig scheduled task invokes the VDIWarmUp scheduled task


Silent Installation (MSI Properties)

Default Installation msiexec /i VDIWarmUp.msi /qb
Default Installation (Explicit) msiexec /i VDIWarmUp.msi RUNSCRIPT=1 RDPTIMEOUT=120 /qb
Don't Run Logon Script msiexec /i VDIWarmUp.msi RUNSCRIPT="" RDPTIMEOUT=120 /qb
Start AVD Agent if disabled msiexec /i VDIWarmUp.msi STARTAVDAGENT=1 RDPTIMEOUT=120 /qb
Start only if Active Directory Joined msiexec /i VDIWarmUp.msi WAITONAD=1 RDPTIMEOUT=120 /qb
Start only if Entra Joined msiexec /i VDIWarmUp.msi WAITONENTRA=1 RDPTIMEOUT=120 /qb
Start Citrix Desktop Service if disabled msiexec /i VDIWarmUp.msi STARTCITRIX=1 RDPTIMEOUT=120 /qb

Registry Configuration

All properties are located in HKEY_LOCAL_MACHINE\Software\Chawn\VDIWarmUp\Settings

  String
Enabled
Disabled
Run Logon Script RUNSCRIPT
1
0 or Null
Start AVD Agent if disabled STARTAVDAGENT
1
0 or Null
Start only if Active Directory Joined WAITONAD
1
0 or Null
Start only if Entra Joined WAITONENTRA
1
0 or Null
Start Citrix Desktop Service if disabled STARTCITRIX
1
0 or Null
Session Duration RDPTIMEOUT
Minimum 60 Maximum 600 Recommended 120

File Configuration

VDIWarmUp.exe and supporting files are located in C:\Program Files\Chawn\VDIWarmUp

 

The profile logon script (VDIWarmUp.cmd) is located in C:\Windows\System32\Repl\Import\Scripts

Modify VDIWarmUp.cmd based on your application environment. It is recommeded to retain the shutdown /l command for a faster log off, instead of waiting for the session duration (RDPTIMEOUT)to expire.

 

Events from the VDIWarmUpConfig scheduled task are logged to C:\Windows\Temp\VDIWarmUp-SYSTEM.log
Events from the VDIWarmUp scheduled task are logged to C:\Windows\Temp\VDIWarmUp-VDIWarmUp.log


Command line parameters

"C:\Program Files\Chawn\VDIWarmUp\VDIWarmUp.exe"

/config

Creates VDIWarmUp user, creates VDIWarmUpConfig and VDIWarmUp Scheduled Tasks. Does not connect via RDP.

/launch

Updates VDIWarmUp user and VDIWarmUp Scheduled Task. Connects via RDP and respects all configured parameters.

/test

Same as /launch except that STARTAVDAGENT, STARTCITRIX, WAITONAD and WAITONENTRA parameters are ignored.

/config may be run as an Administrator or run as a Scheduled Task as SYSTEM

/launch may be run as an Administrator or run as a Scheduled Task as VDIWarmUp. Respects all parameters.

/test may be run as an Administrator or run as a Scheduled Task as VDIWarmUp. Ignores all parameters except for RUNSCRIPT and RDPTIMEOUT.


VDIWarmUp.cmd (Profile Logon Script)

Add common and core application processes to the logon script.

Don't run processes that don't return after launching. This will pause the script indefinitely.

Use start to launch processes asynchronously

Adjust the timeout value in the script based on testing on a cold machine

Adjust the VDIWarmUp RDPTimeOut value to a greater value than is required to run the logon script

rem Chawn VDIWarmUp Logon Script
rem ------------------------------------------------------Start common apps.
start notepad
start explorer
start msedge
start taskmgr
start ms-settings:
start eventvwr

rem ------------------------------------------------------Start your apps. Edit as necessary
start winword
start excel
start outlook
start acrobat

rem ------------------------------------------------------Wait for apps to load
timeout /t 30 /nobreak

rem ------------------------------------------------------LogOff
shutdown /l


Testing

On a Multi-User operating system or Server operating system, the VDIWarmUp window will open interactively and display the logon and logoff process.

On a single user operating system, Windows will not permit more than one RDP connection so the following is displayed.

This is a successful test. You can either click OK or wait 60 seconds until disconnection.

Reboot the VM and review VDIWarmUp.log to confirm a successful configuration.

VDIWarmUp.exe /test will ignore the following parameters.

STARTAVDAGENT
WAITONAD
WAITONENTRA
STARTCITRIX


User Profile Management

To prevent logon issues with User Profile Management, ensure that VDIWarmUp or members of Administrators are excluded from User Profile Management.

e.g. With FSLogix, either add VDIWarmup or Local Account and members of Administrators group to FSLogix Profile Exclude List and FSLogix ODFC Exclude List local groups in your master image.


Integrate with AVDManage / AVD-Turbo / AVD-Config

AVD-Config may be configured to:

  • Create an Image that is configured for either Active Directory or Entra ID
  • Prevent user connections until VDIWarmUp has completed

Install VDIWarmup. During installation, set 'Start only if Active Directory joined' (WAITONAD=1), even if you intend to join Entra ID, and 'Start AVD Agent if disabled' (STARTAVDAGENT=1).

Create C:\Scripts\AVD-Config.ps1.

AVD-Turbo will run AVD-Config.ps1 after joining Active Directory or Entra ID and optionally joining an AVD Host Pool.

Add the following text to AVD-Config.ps1to stop and disable the 'Remote Desktop Agent Bootloader' service.

This will prevent user connections while VDIWarmUp is running.

Function DisService {
Param ([string]$servname)
try {
if (get-service -ServiceName $servname -ErrorAction SilentlyContinue)
{
Get-Service -ServiceName $servname | Set-Service -StartupType Disabled -ErrorAction SilentlyContinue
}
}
catch{}
}

DisService RDAgentBootLoader

# Disable Logons - we don't want users logging on until after the reboot
stop-service RDAgentBootLoader

Add the follwoing text to AVD-Config.ps1to check if the VM is Active Directory joined or Entra Joined. # Configure VDIWarmUp based on VM Join Status
Function CheckEntraID
{
try {
$dsregStatus = dsregcmd /status 2>$null
if (-not $dsregStatus) {
logwrite ("EntraJoined: NO");
}
# Parse AzureAdJoined and DomainJoined values
$Global:IsEntraJoined = ($dsregStatus | Select-String "AzureAdJoined\s*:\s*(YES|NO)").Matches.Groups[1].Value;
}
catch {}
}

# Check if VM is Entra joined
$IsEntraJoined='NO'
CheckEntraID

# Check if VM is AD joined
$DomainJoined=((gwmi win32_computersystem).partofdomain);

Add the following text to AVD-Config.ps1to configure VDIWarmup for Active Directory or for Entra ID. #Configure VDIWarmUp
if ($DomainJoined) {
Set-ItemProperty -Path "HKLM:\SOFTWARE\Chawn\VDIWarmup\Settings" -Name "WAITONAD" -Value 1 -force;
Set-ItemProperty -Path "HKLM:\SOFTWARE\Chawn\VDIWarmup\Settings" -Name "WAITONENTRA" -Value 0 -force;
}

if($IsEntraJoined -eq 'YES') {
Set-ItemProperty -Path "HKLM:\SOFTWARE\Chawn\VDIWarmup\Settings" -Name "WAITONAD" -Value 0 -force;
Set-ItemProperty -Path "HKLM:\SOFTWARE\Chawn\VDIWarmup\Settings" -Name "WAITONENTRA" -Value 1 -force;
}
Finalise your image. VDIWarmUp will start the the 'Remote Desktop Agent Bootloader' service when complete.

Legal Warnings

VDIWarmUp cannot currently handle legal warnings.
   



Cookie Policy: We do NOT use cookies.