Wednesday, June 3, 2026

Deploy Custom Teams Background Images Using Intune (No Teams Premium Required)

For organizations looking to deploy custom or branded background images to Microsoft Teams, the official method requires Teams Premium licenses. However, there’s a cost-effective alternative that leverages Microsoft Intune and PowerShell to achieve the same result without the premium licensing requirement.

This guide will walk you through deploying custom Teams background images using Intune Win32 apps, making branded backgrounds available to all users in your organization.

Why This Solution?

Previously, with older versions of Teams, deploying custom backgrounds was straightforward – simply drop image files into a specific directory. With the “new” Teams (now standard), backgrounds require specific formatting:

  • Specific resolution and sizing requirements
  • Filenames must contain a GUID
  • Proper metadata for compatibility

While the Teams Admin Console can deploy images for users with Teams Premium, this solution provides a workaround for organizations without premium licenses by automating the deployment process through Intune.

Prerequisites

Before starting, ensure you have:

  • Microsoft Intune subscription and administrative access with rights to create and deploy Win32 apps
  • Target devices enrolled in Microsoft Intune
  • PowerShell access on a local windows machine (without execution policy restrictions)
  • Custom background images in .jpg format
  • Permissions to create and deploy Win32 applications in Intune

Deployment Overview

Target Path: %LocalAppData%\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\Backgrounds\Uploads

The process involves:

  1. Preparing images in a working directory
  2. Running a PowerShell script to create the Intune package
  3. Uploading and configuring the Win32 app in Intune
  4. Deploying to user groups

Understanding the Deployment Process

The solution uses a PowerShell script that:

  1. Checks for and installs the ResizeImageModule if needed
  2. Processes your custom background images
  3. Resizes images to meet Teams requirements
  4. Generates properly formatted filenames with GUIDs
  5. Creates an .intunewin package for Intune deployment
  6. Deploys images to the Teams Backgrounds folder on user devices

The images are deployed to: %LocalAppData%\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\Backgrounds\Uploads

Step 1: Prepare Your Background Images

Place your chosen images into a working folder (e.g., C:\Program Files (x86)\Microsoft\Temp). Ensure:

Image Requirements:

  • Format: .jpg only
  • Resolution: 1920×1080 (16:9 ratio recommended)
  • Size: Under 2-5MB per image (recommended for faster deployment)
  • Location: Place all .jpg files in your working directory

Teams expects both a full-resolution image and a thumbnail version, but our automation script will generate these for you in the correct format (GUID-based file names) compatible with the Teams client.

Step 2: Prepare the PowerShell Script

Create the script manually by saving the code below as CustomTeamsBg.ps1 in your working directory or click on the Download Script

<#
.SYNOPSIS
    Generate Microsoft Teams custom background files and Intune Win32 App package.

.DESCRIPTION
    Automates the creation of Teams-compatible background images and packages them
    into an Intune Win32 application for enterprise deployment.

.NOTES
    File Name      : CustomTeamsBg.ps1
    Author         : Malav Lakhani
    Prerequisite   : PowerShell 5.1 or higher
    Requirements   : ResizeImageModule and IntuneWinAppUtil (auto-installed if missing)
    
.EXAMPLE
    .\CustomTeamsBg.ps1
#>

Write-Host "`nTeams Background Generator for Intune" -ForegroundColor Cyan
Write-Host "======================================`n" -ForegroundColor Cyan

# Check and install ResizeImageModule if needed
Write-Host "[1/4] Checking ResizeImageModule..." -ForegroundColor Yellow
if (!(Get-InstalledModule -Name ResizeImageModule -ErrorAction SilentlyContinue)) {
    Write-Host "      Installing ResizeImageModule..." -ForegroundColor Yellow
    Install-Module -Name ResizeImageModule -Scope CurrentUser -Force -AllowClobber
    Write-Host "      Installed" -ForegroundColor Green
}
if (!(Get-Module -Name ResizeImageModule)) {
    Import-Module ResizeImageModule -ErrorAction Stop
}
Write-Host "      Ready" -ForegroundColor Green

# Get user input
Write-Host "`n[2/4] Configuration..." -ForegroundColor Yellow
$ImageLocation = Read-Host "      Enter path to your background images folder"
$ImageName = Read-Host "      Enter description for backgrounds"

# Validate input
if (!(Test-Path -Path $ImageLocation -PathType Container)) {
    Write-Error "Path does not exist: $ImageLocation"
    exit 1
}

$jpgFiles = Get-ChildItem -Path $ImageLocation -Filter "*.jpg" -File
if (!$jpgFiles) {
    Write-Error "No .jpg files found in $ImageLocation"
    exit 1
}

Write-Host "      Found $($jpgFiles.Count) image(s)" -ForegroundColor Green

$OutputPath = "$ImageLocation\Intune"
if (!(Test-Path -Path $OutputPath)) {
    New-Item -Path $OutputPath -ItemType Directory -Force | Out-Null
}

# Create deployment script with install/uninstall support
$ScriptContent = @'
# Teams Background Deployment Script
param([switch]$Uninstall)

$TargetPath = "$env:LOCALAPPDATA\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\Backgrounds\Uploads"
$ScriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path

# Auto-restart Teams if running
$TeamsRunning = Get-Process -Name "ms-teams" -ErrorAction SilentlyContinue
if ($TeamsRunning) {
    Stop-Process -Name "ms-teams" -Force
    $RestartTeams = $true
}

if ($Uninstall) {
    # Remove deployed backgrounds
    Get-ChildItem "$ScriptDirectory\*.jpg" | ForEach-Object {
        Remove-Item "$TargetPath\$($_.Name)" -ErrorAction SilentlyContinue
    }
    Write-Host "Backgrounds uninstalled successfully"
    exit 0
} else {
    # Create directory if it doesn't exist, then deploy backgrounds
    if (!(Test-Path -Path $TargetPath)) {
        New-Item -Path $TargetPath -ItemType Directory -Force | Out-Null
        Write-Host "Created directory: $TargetPath"
    }
    Copy-Item -Path "$ScriptDirectory\*.jpg" -Destination $TargetPath -Force -ErrorAction Stop
    Write-Host "Backgrounds deployed successfully"
    exit 0
}

# Restart Teams if it was running
if ($RestartTeams) {
    Start-Sleep -Seconds 2
    Start-Process "shell:AppsFolder\MSTeams_8wekyb3d8bbwe!MSTeams"
}
'@

# Process images
Write-Host "`n[3/4] Processing images..." -ForegroundColor Yellow
foreach ($image in $jpgFiles) {
    $guid = New-Guid
    Write-Host "      Processing: $($image.Name)" -ForegroundColor Gray
    
    # Create background (1920x1080)
    Resize-Image -InputFile $image.FullName -Width 1920 -Height 1080 `
                 -ProportionalResize $true -OutputFile "$OutputPath\$guid$ImageName.jpg"
    
    # Create thumbnail (220x158)
    Resize-Image -InputFile $image.FullName -Width 220 -Height 158 `
                 -ProportionalResize $true -OutputFile "$OutputPath\$guid$ImageName`_thumb.jpg"
}
Write-Host "      Complete" -ForegroundColor Green

# Download IntuneWinAppUtil if needed
Write-Host "`n[4/4] Creating Intune package..." -ForegroundColor Yellow
$IntuneWinUtil = "$ImageLocation\IntuneWinAppUtil.exe"

if (!(Test-Path -Path $IntuneWinUtil)) {
    Write-Host "      Downloading IntuneWinAppUtil.exe..." -ForegroundColor Yellow
    $DownloadUrl = "https://github.com/microsoft/Microsoft-Win32-Content-Prep-Tool/raw/refs/heads/master/IntuneWinAppUtil.exe"
    Invoke-WebRequest -Uri $DownloadUrl -OutFile $IntuneWinUtil -UseBasicParsing
    Start-Sleep -Seconds 2
}

# Save deployment script
$ScriptPath = "$OutputPath\DeployTeamsBg.ps1"
$ScriptContent | Out-File -FilePath $ScriptPath -Encoding UTF8 -Force

# Create .intunewin package
$ProcessArgs = "-c `"$OutputPath`" -s `"DeployTeamsBg.ps1`" -o `"$OutputPath`" -q"
Start-Process -FilePath $IntuneWinUtil -ArgumentList $ProcessArgs -NoNewWindow -Wait

# Verify completion
if (Test-Path "$OutputPath\DeployTeamsBg.intunewin") {
    Write-Host "      Package created successfully!" -ForegroundColor Green
    Write-Host "`n======================================" -ForegroundColor Cyan
    Write-Host "COMPLETE!" -ForegroundColor Green
    Write-Host "======================================" -ForegroundColor Cyan
    Write-Host "`nPackage location:" -ForegroundColor Yellow
    Write-Host "$OutputPath\DeployTeamsBg.intunewin`n" -ForegroundColor White
    Write-Host "Intune Commands:" -ForegroundColor Yellow
    Write-Host "  Install:   powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -File DeployTeamsBg.ps1 " -ForegroundColor Gray
    Write-Host "  Uninstall: powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -File DeployTeamsBg.ps1 -Uninstall`n" -ForegroundColor Gray
    exit 0
} else {
    Write-Error "Failed to create package"
    exit 1
}

Step 3: Run the Script

Open PowerShell as Administrator and execute:

cd "full path to your working directory" 
 
.\CustomTeamsBg.ps1 

When prompted:

  1. Enter path: full path to your working directory
  2. Enter description: HCMGRTeamsBG (or your preferred text)

The script will:

  • Install ResizeImageModule (if needed)
  • Resize images and create thumbnails
  • Generate GUID-based filenames
  • Download IntuneWinAppUtil.exe (if needed)
  • Create the .intunewin package

Output Location: to the path you specified as the script input

Step 4: Create Win32 App in Intune

Upload .intunewin Package

  1. Navigate to Intune Admin Center
  2. Go to Apps > Windows > + Create
  3. Select Windows app (Win32)
  4. Click Select app package file
  5. Browse to the Intune folder created by the script in your working directory and select DeployTeamsBg.intunewin

App Information

Field Value
Name Custom Teams Backgrounds
Description Deploys custom branded background images for Microsoft Teams
Publisher Your Organization Name

Program Configuration

Install Command:
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -File DeployTeamsBg.ps1
Uninstall Command:
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -File DeployTeamsBg.ps1 -Uninstall 
Settings:
  • Install behavior: User
  • Device restart behavior: No specific action

Requirements

  • Operating system architecture: 64-bit
  • Minimum operating system: Windows 10 1809 (or your requirement)

Detection Rules

Rules Format: Custom Detection Script

Create the script manually by saving the code below as AppDetectionScript.ps1 in your working directory or click Download Script:

# Teams Background file name
$FileName = "ef2a3506-c38a-4217-867a-f5e8e09256acHCMGR.jpg"

# Build full path dynamically
$FilePath = Join-Path $env:LOCALAPPDATA `
"Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\Backgrounds\Uploads\$FileName"

if (Test-Path $FilePath) {
    Write-Host "Found ($FileName) image(s)" -ForegroundColor Green
    exit 0
} else {
    Write-Host "No Image(s) found" -ForegroundColor yellow
    exit 1
}
  • Uses a lightweight PowerShell script to verify successful deployment
  • Checks if the Teams background image exists in the user’s LocalAppData Teams Uploads folder
  • Returns exit code 0 if the file is found (Installation Successful)
  • Returns exit code 1 if the file is missing (Installation Not Detected)

Assignments

  • Assign as Required to your target user groups
  • Click Create to finalize.

Step 5: Monitor and Verify

Check Deployment Status

  1. Go to Apps > All apps > HCMGR  Custom Teams Backgrounds
  2. View Device install status or User install status
  3. Monitor for successful installations

Verify User Experience

On a deployed device:

  1. Open Microsoft Teams
  2. Start or join a meeting
  3. Click three dots (…) > Video effects and settings 
  4. Select Video effects
  5. Custom backgrounds should appear in the list

Note: Users may need to restart Teams if it was running during installation.

Troubleshooting

Common Issues

  1. Installation Shows “Failed”
  • Check detection rule configuration (verify path and filename)
  • Ensure install behavior is set to “User” not “System”
  • Review IntuneManagementExtension.log on the device
  1. Backgrounds Don’t Appear
  • Restart Teams completely (close from system tray)
  • Verify files exist in: %LocalAppData%\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\Backgrounds\Uploads
  • Check file permissions
  1. “Not Applicable” Status
  • Teams not installed on device
  • Device doesn’t meet requirements
  • Device not properly enrolled in Intune

Conclusion

With this Intune-based deployment method, you can centrally roll out branded Microsoft Teams background images to your Windows devices without purchasing Teams Premium. The steps above leverage community scripting and common Intune packaging techniques to deliver a scalable and manageable solution.

Happy deploying!

Author

  • I specialize in cloud infrastructure and modern endpoint management, helping organizations build secure, scalable, and data-driven IT environments. With hands-on expertise in Microsoft Intune, MECM, Jamf, ManageEngine, and Azure, I ensure seamless device, application, and policy management across hybrid workplaces. Certified as a Microsoft Endpoint Administrator, Fabric Analytics Engineer, and Google Cloud Associate Cloud Engineer, I bring a blend of cloud, analytics, and automation skills to optimize IT operations. I’m passionate about driving efficiency, strengthening security, and transforming data into actionable business insights with tools like Power BI.

11 COMMENTS

  1. Followed all of yours steps but the detection script isn’t detecting the background in the specified folder. I’ve changed the $filename variable to the corresponding filename but not result.

    • In most cases, detection fails because of a context or path mismatch: if the Win32 app runs in SYSTEM, $env:LOCALAPPDATA resolves to the system profile, so backgrounds get copied there instead of the signed-in user profile where Teams actually looks. Also, the target path is specific to the new Teams client, if the device is still on classic Teams, detection will always return “not found” (though classic is phased out in most tenants by now).
      Teams version check – Run Get-AppxPackage *MSTeams*. If you see MSTeams_8wekyb3d8bbwe, you’re on New Teams and the path is correct.

      Quick checklist to verify against the guide:
      1. Confirm Install behavior in Intune is set to User.
      2. Confirm the $FileName in the detection script to match the actual GUID+description filename generated by your script run (e.g., xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxHCMGR.jpg).
      3. Consider detecting the file(s) by a wildcard pattern instead of a hardcoded name like “*.jpg”.
      4. Run the detection script manually on the target device under the user context (not elevated) to validate it resolves the path and finds the file correctly.
      5. Review IME logs on a target device at C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension.log – filter for your app name to see what exit code the detection script is actually returning.

      If all of the above checks out, detection should report correctly – happy to help dig deeper if needed.

  2. When I run the script manually on the device where the background is actually working and present in the location it’s giving me
    “No Image(s) found”.

    But I found that the app wasn’t applied to a user group, but a device group. Could that be the issue?

    • Have you tried using a wildcard (e.g., *.jpg) instead of hardcoding the GUID filename? If it still shows “No Image(s) found” when run manually, the script is likely running in a different user session, for example installed under one user but executed under another, or from an elevated powershell with a different profile loaded.

      And yes, assigning the app to a device group can cause this issue as intune typically runs detection in SYSTEM context even when the install behavior is set to User.

      Fix: Reassign to a User Group, Confirm Install behavior is set to “User” both the deployment and detection scripts will resolve $env:LOCALAPPDATA to the correct profile, and detection should work as expected.

  3. I’ve just tried with the wildcard and it seems to be working. The company portal shows me “Installed”.
    Since the filename matched 100% the filename in the detection script so it’s a bit weird. Either way it’s working now, thank you for you support Malav!
    Keep posting blogs like this 🙂

    • Glad to hear it’s working now, happy to help.
      Thanks for the feedback and for trying it out!
      Keep following the blog, I’ve got more exciting practical tips and deep dives coming soon…

  4. Hi Malav

    Thank you so much for your script works really well? For this part

    $ImageName = Read-Host ” Enter description for backgrounds”

    I just gave it a short 3 letter name and added the following example in the detection script “*ABC.jpg”

    Thank you

    • Glad it worked well for you! 👍

      Yes, using a short prefix like that is a great approach and it keeps the detection script simple and reliable. Your wildcard idea (*ABC.jpg) is exactly how I’d recommend handling it.

      Thanks for sharing your tweak!

    • Hi, thanks for the question!
      Yes, a single Intune app can handle multiple images! Just place all your .jpg files in the working directory before running CustomTeamsBg.ps1, it’ll process every image at once, generate the GUID-based filenames and thumbnails for each, and bundle everything into one .intunewin package.
      For the detection script, just use a wildcard like *YourDescription*.jpg instead of a hardcoded filename so it picks up all deployed backgrounds correctly.
      Hope that helps! 😊

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest posts