VDI Configuration
Verified with Windows 11 25H2 — updated on July 30, 2026
Supported on: At least Windows Server 2008 R2 or Windows 7
Path in the GPO console
Computer Configuration\Administrative Templates\Windows Components\Microsoft User Experience Virtualization User Configuration\Administrative Templates\Windows Components\Microsoft User Experience Virtualization Description
This policy setting configures the synchronization of User Experience Virtualization (UE-V) rollback information for computers running in a non-persistent, pooled VDI environment. UE-V settings rollback data and checkpoints are normally stored only on the local computer. With this policy setting enabled, the rollback information is copied to the settings storage location when the user logs off or shuts down their VDI session. Enable this setting to register a VDI-specific settings location template and restore data on computers in pooled VDI environments that reset to a clean state on logout. With this policy enabled you can roll settings back to the state when UE-V was installed or to “last-known-good” configurations. Only enable this policy setting on computers running in a non-persistent VDI environment. The VDI Collection Name defines the name of the virtual desktop collection containing the virtual computers. If you enable this policy setting, the UE-V rollback state is copied to the settings storage location on logout and restored on login. If you disable this policy setting, no UE-V rollback state is copied to the settings storage location. If you do not configure this policy, no UE-V rollback state is copied to the settings storage location.
Registry
Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings Value name: VdiState
Enabled: VdiState = 1
Disabled: VdiState = 0
MDM / Intune (CSP)
./Device/Vendor/MSFT/Policy/Config/ADMX_UserExperienceVirtualization/ConfigureVdi ./User/Vendor/MSFT/Policy/Config/ADMX_UserExperienceVirtualization/ConfigureVdi Microsoft Learn documentation Mapping data: Microsoft Learn (CC BY 4.0)
Export Builder
BETAConfigure the state, scope and options, then generate .reg, PowerShell, Intune and SCCM outputs — or add the setting to a multi-setting collection.
These exports write the registry — this is not a managed GPO. ⓘ
Applying both scopes creates an ambiguous configuration (computer takes precedence over user). Only do this intentionally.
.reg file
Windows Registry Editor Version 5.00
; Exported from gporais.com
; Policy: VDI Configuration
; State: Enabled
; Scope: Computer (HKLM)
; Supported on: At least Windows Server 2008 R2 or Windows 7
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings]
"VdiState"=dword:00000001
"VdiCollectionName"="" More formats (PowerShell, Intune, SCCM)
PowerShell
# Exported from gporais.com
# Policy: VDI Configuration
# State: Enabled
# Scope: Computer (HKLM)
# Supported on: At least Windows Server 2008 R2 or Windows 7
$path = 'HKLM:\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'VdiState' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'VdiCollectionName' -Value '' -Type String Intune XML
OMA-URI: ./Device/Vendor/MSFT/Policy/Config/ADMX_UserExperienceVirtualization/ConfigureVdi
Data type: String
Value:
<enabled/>
<data id="VdiCollectionName" value=""/> Intune Remediation
# === Detection script ===
# Exported from gporais.com
# Policy: VDI Configuration
# State: Enabled
# Scope: Computer (HKLM)
# Supported on: At least Windows Server 2008 R2 or Windows 7
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings' -Name 'VdiState' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings' -Name 'VdiCollectionName' -Expected '' -Kind String)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: VDI Configuration
# State: Enabled
# Scope: Computer (HKLM)
# Supported on: At least Windows Server 2008 R2 or Windows 7
$path = 'HKLM:\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'VdiState' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'VdiCollectionName' -Value '' -Type String SCCM scripts
# Exported from gporais.com
# Policy: VDI Configuration
# State: Enabled
# Scope: Computer (HKLM)
# Supported on: At least Windows Server 2008 R2 or Windows 7
# SCCM Configuration Item guidance:
# Create a Configuration Item of type "Setting: Script".
# Discovery script: use the Detection script below.
# Remediation script: use the Remediation script below.
# Compliance rule: the Discovery script output equals 'Compliant'.
# === Detection script ===
# Exported from gporais.com
# Policy: VDI Configuration
# State: Enabled
# Scope: Computer (HKLM)
# Supported on: At least Windows Server 2008 R2 or Windows 7
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings' -Name 'VdiState' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings' -Name 'VdiCollectionName' -Expected '' -Kind String)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: VDI Configuration
# State: Enabled
# Scope: Computer (HKLM)
# Supported on: At least Windows Server 2008 R2 or Windows 7
$path = 'HKLM:\Software\Policies\Microsoft\UEV\Agent\Configuration\WindowsSettings'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'VdiState' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'VdiCollectionName' -Value '' -Type String Building a multi-setting collection? Add this setting and generate combined .reg / PowerShell / GPO scripts.