How to Set a Default Windows 11 Wallpaper Without Locking It Down


Introduction

After spending some time on Reddit and various IT communities, I noticed the same question coming up repeatedly.

How can I set a custom wallpaper in Windows 11 via OSD without locking it down?

Most of the answers point people toward Group Policy or Intune wallpaper policies. Those work, but they permanently enforce the wallpaper and remove the user’s ability to personalize their desktop.

If your goal is to provide a default corporate wallpaper while still allowing users to choose their own background later, Windows themes are a much better solution.

This article walks through the process I use during Operating System Deployment (OSD) to configure a default Windows 11 wallpaper that applies to every new user profile without locking anything down.


Why Group Policy Isn’t Always the Right Choice

When you configure a wallpaper through:

  • Group Policy
  • Group Policy Preferences
  • Intune Personalization CSP
  • Settings Catalog wallpaper policies

Windows enforces the configured image.

Some organizations simply want new devices to have a branded appearance when users sign in for the first time.

After that, they don’t care.


How Windows Themes Handle Wallpapers

Windows stores wallpaper settings inside theme files.

A theme can contain:

  • Wallpaper configuration
  • Color settings
  • Sounds
  • Mouse pointers
  • Other desktop personalization settings

When a user signs in for the first time, Windows applies the theme referenced in that user’s profile.

By configuring the Default User profile during OSD, every future user receives the same theme automatically.

Because Windows treats the wallpaper as part of a theme instead of a policy, users remain free to change it later.


Create the Theme

Step 1: Open Classic Theme Settings

Launch:

shell:::{ED834ED6-4B5A-4bfe-8F11-A626DCB6A921}

Step 2: Select Your Wallpaper

Choose the wallpaper you want users to receive by default.

For this example:

CorporateWallpaper.jpg

Step 3: Save the Theme

Save the theme as:

CorporateDefault.theme

Step 4: Edit the Theme File

Open the .theme file in Notepad.

Saved .theme files can be found at:

%localappdata%\Microsoft\Windows\Themes

Locate the wallpaper path.

You’ll typically see something similar to:

Wallpaper=%USERPROFILE%\Pictures\CorporateWallpaper.jpg

Update it to the final deployment location:

Wallpaper=%SystemRoot%\Web\Wallpaper\Windows\CompanyName\CorporateWallpaper.jpg

Save the file.


Folder Structure

The deployment copies files to:

C:\Windows\Web\Wallpaper\Windows\CompanyName

Wallpaper:

C:\Windows\Web\Wallpaper\Windows\CompanyName\CorporateWallpaper.jpg

Theme:

C:\Windows\Resources\Themes\CorporateDefault.theme

Result:

C:\Windows
├─ Resources
│ └─ Themes
│ └─ CorporateDefault.theme

└─ Web
└─ Wallpaper
└─ Windows
└─ CompanyName
└─ CorporateWallpaper.jpg

Configure the Default User Profile

The key to making this work during OSD is modifying the Default User profile.

Every future user profile is created from this template.

Load the Default User Hive

& reg.exe load "HKLM\TempDefault" "C:\Users\Default\NTUSER.DAT"

Configure the Theme

$ThemeKey = "Registry::HKEY_LOCAL_MACHINE\TempDefault\Software\Microsoft\Windows\CurrentVersion\Themes"
$ThemeDestination = Join-Path $ThemeFolder "CorporateDefault.theme"

Set-ItemProperty `
    -Path $ThemeKey `
    -Name "CurrentTheme" `
    -Value $ThemeDestination `
    -ErrorAction Stop

Set-ItemProperty `
    -Path $ThemeKey `
    -Name "ThemeFile" `
    -Value $ThemeDestination `
    -ErrorAction Stop

Configure the Wallpaper

$DesktopKey = "Registry::HKEY_LOCAL_MACHINE\TempDefault\Control Panel\Desktop"
$WallpaperDestination = Join-Path $WallpaperFolder "CorporateWallpaper.jpg"

Set-ItemProperty `
    -Path $DesktopKey `
    -Name "Wallpaper" `
    -Value $WallpaperDestination `
    -ErrorAction Stop

Notice that we’re modifying the loaded Default User hive and not HKCU.

At this stage there isn’t a logged-on user.


Disable Windows Spotlight

Windows Spotlight can replace your wallpaper after profile creation.

To prevent that:

$SpotlightKey = "Registry::HKEY_LOCAL_MACHINE\TempDefault\Software\Microsoft\Windows\CurrentVersion\DesktopSpotlight\Settings"

New-ItemProperty `
    -Path $SpotlightKey `
    -Name "EnabledState" `
    -PropertyType DWord `
    -Value 0 `
    -Force `
    -ErrorAction Stop | Out-Null

Unload the Hive

[GC]::Collect()
[GC]::WaitForPendingFinalizers()

& reg.exe unload "HKLM\TempDefault"

Full PowerShell Script

The full PowerShell script can be downloaded from my GitHub at the following link:

SetDefaultTheme.ps1


Usage

Place the following files in the same folder as the script:

  • CorporateWallpaper.jpg
  • CorporateDefault.theme

Your folder structure should look similar to this:

SetDefaultTheme\
├── SetDefaultTheme.ps1
├── CorporateWallpaper.jpg
└── CorporateDefault.theme

Run the script from an elevated PowerShell session:

.\SetDefaultTheme.ps1

If you’d like additional status information displayed during execution, run it with the -Verbose parameter:

.\SetDefaultTheme.ps1 -Verbose

The -Verbose parameter is optional. It displays detailed information about what the script is doing which can be useful for troubleshooting or validating the deployment during testing.

The script copies the wallpaper and theme files to their permanent Windows locations, updates the Default User profile so future users receive the corporate theme automatically, and disables Windows Spotlight to prevent it from replacing the configured wallpaper.


Adding the Script to an OSD Task Sequence

I like to run the script after Windows Setup and ConfigMgr after app installs or near the end of the Task Sequence:

Install Operating System
Apply Drivers
Setup Windows and ConfigMgr
Install Applications
Apply Corporate Wallpaper Theme

Deploying the Wallpaper During Intune Autopilot

If you’re using Intune and Windows Autopilot instead of ConfigMgr OSD, you can deploy this solution during device provisioning and achieve the same result.

Package the wallpaper file, theme file, and PowerShell script into a Win32 application using the Microsoft Win32 Content Prep Tool. This creates an .intunewin package that Intune can deploy during enrollment.

When creating the Win32 app:

  • Upload the .intunewin package.
  • Configure the install command to run the PowerShell script silently.
  • Run the app in the System context.
  • Create a detection rule that verifies successful installation. For example, check for the theme file in C:\Windows\Resources\Themes or verify the registry values created by the script.

Assign the application to the device group used for Autopilot deployments and add it to the Enrollment Status Page (ESP) as a blocking application.

This ensures the script runs before the user reaches the desktop for the first time.

This approach works particularly well for organizations moving away from traditional imaging. You get consistent corporate branding during enrollment without maintaining a custom reference image or enforcing a wallpaper through Group Policy or Device Configuration policies.


Verification

After imaging completes:

  1. Log in with a test account that has never signed into the device.
  2. Confirm the corporate wallpaper appears.
  3. Open Personalization settings.
  4. Change the wallpaper.
  5. Sign out and back in.

The wallpaper should remain user configurable.