Back to Resources

Level Verified

Remove Bloatware Windows PowerShell Script

Created by

Level

Type

Script

Category

General

Platforms
WindowsApple iOSLinux

Problem Overview

Many Windows devices come preloaded with unnecessary applications (bloatware) that consume storage, clutter the Start menu, and sometimes run in the background, impacting system performance. Manually removing these apps can be time-consuming and error-prone, with the risk of accidentally uninstalling critical components.

Description

This PowerShell script automates the removal of pre-installed and unwanted Microsoft Store applications while ensuring essential business and system-critical apps remain untouched. It leverages a predefined whitelist to protect necessary applications and allows users to extend this list with custom entries.

The script works in two main stages:

  1. Provisioned Package Removal – Ensures that unwanted apps do not reinstall for new user profiles.
  2. User Account App Removal – Deletes existing instances of these applications from all user accounts.

It also creates a dedicated folder (C:\ProgramData\Debloat) for logging, ensuring an audit trail of every removal operation.

Script

<#
This resource is provided as a convenience for Level users. We cannot 
guarantee it will work in all environments. Please test before deploying 
to your production environment. We welcome contributions to our community 
library

Level Library
https://level.io/library/script-remove-bloatware-windows-powershell
#>

param (
    [string[]]$customwhitelist
)

#no errors throughout
$ErrorActionPreference = 'silentlycontinue'

#Create Folder
$DebloatFolder = "C:\ProgramData\Debloat"
If (Test-Path $DebloatFolder) {
    Write-Output "$DebloatFolder exists. Skipping."
}
Else {
    Write-Output "The folder '$DebloatFolder' doesn't exist. This folder will be used for storing logs created after the script runs. Creating now."
    Start-Sleep 1
    New-Item -Path "$DebloatFolder" -ItemType Directory
    Write-Output "The folder $DebloatFolder was successfully created."
}

Start-Transcript -Path "C:\ProgramData\Debloat\Debloat.log"

############################################################################################################
#                                        Remove AppX Packages                                              #
############################################################################################################

$WhitelistedApps = @(
    'Microsoft.WindowsNotepad',
    'Microsoft.CompanyPortal',
    'Microsoft.ScreenSketch',
    'Microsoft.Paint3D',
    'Microsoft.WindowsCalculator',
    'Microsoft.WindowsStore',
    'Microsoft.Windows.Photos',
    'CanonicalGroupLimited.UbuntuonWindows',
    'Microsoft.MicrosoftStickyNotes',
    'Microsoft.MSPaint',
    'Microsoft.WindowsCamera',
    '.NET Framework',
    'Microsoft.HEIFImageExtension',
    'Microsoft.ScreenSketch',
    'Microsoft.StorePurchaseApp',
    'Microsoft.VP9VideoExtensions',
    'Microsoft.WebMediaExtensions',
    'Microsoft.WebpImageExtension',
    'Microsoft.DesktopAppInstaller',
    'WindSynthBerry',
    'MIDIBerry',
    'Slack',
    'Microsoft.SecHealthUI',
    'WavesAudio.MaxxAudioProforDell2019',
    'Dell Optimizer Core',
    'Dell SupportAssist Remediation',
    'Dell SupportAssist OS Recovery Plugin for Dell Update',
    'Dell Pair',
    'Dell Display Manager 2.0',
    'Dell Display Manager 2.1',
    'Dell Display Manager 2.2',
    'Dell Peripheral Manager',
    'MSTeams',
    'Microsoft.Paint',
    'Microsoft.OutlookForWindows',
    'Microsoft.WindowsTerminal',
    'Microsoft.MicrosoftEdge.Stable'
)

##If $customwhitelist is set, split on the comma and add to whitelist
if ($customwhitelist) {
    $customWhitelistApps = $customwhitelist -split ","
    foreach ($whitelistapp in $customwhitelistapps) {
        ##Add to the array
        $WhitelistedApps += $whitelistapp
    }
}

$NonRemovable = @(
    '1527c705-839a-4832-9118-54d4Bd6a0c89',
    'c5e2524a-ea46-4f67-841f-6a9465d9d515',
    'E2A4F912-2574-4A75-9BB0-0D023378592B',
    'F46D4000-FD22-4DB4-AC8E-4E1DDDE828FE',
    'InputApp',
    'Microsoft.AAD.BrokerPlugin',
    'Microsoft.AccountsControl',
    'Microsoft.BioEnrollment',
    'Microsoft.CredDialogHost',
    'Microsoft.ECApp',
    'Microsoft.LockApp',
    'Microsoft.MicrosoftEdgeDevToolsClient',
    'Microsoft.MicrosoftEdge',
    'Microsoft.PPIProjection',
    'Microsoft.Win32WebViewHost',
    'Microsoft.Windows.Apprep.ChxApp',
    'Microsoft.Windows.AssignedAccessLockApp',
    'Microsoft.Windows.CapturePicker',
    'Microsoft.Windows.CloudExperienceHost',
    'Microsoft.Windows.ContentDeliveryManager',
    'Microsoft.Windows.Cortana',
    'Microsoft.Windows.NarratorQuickStart',
    'Microsoft.Windows.ParentalControls',
    'Microsoft.Windows.PeopleExperienceHost',
    'Microsoft.Windows.PinningConfirmationDialog',
    'Microsoft.Windows.SecHealthUI',
    'Microsoft.Windows.SecureAssessmentBrowser',
    'Microsoft.Windows.ShellExperienceHost',
    'Microsoft.Windows.XGpuEjectDialog',
    'Microsoft.XboxGameCallableUI',
    'Windows.CBSPreview',
    'windows.immersivecontrolpanel',
    'Windows.PrintDialog',
    'Microsoft.VCLibs.140.00',
    'Microsoft.Services.Store.Engagement',
    'Microsoft.UI.Xaml.2.0',
    'Microsoft.AsyncTextService',
    'Microsoft.UI.Xaml.CBS',
    'Microsoft.Windows.CallingShellApp',
    'Microsoft.Windows.OOBENetworkConnectionFlow',
    'Microsoft.Windows.PrintQueueActionCenter',
    'Microsoft.Windows.StartMenuExperienceHost',
    'MicrosoftWindows.Client.CBS',
    'MicrosoftWindows.Client.Core',
    'MicrosoftWindows.UndockedDevKit',
    'NcsiUwpApp',
    'Microsoft.NET.Native.Runtime.2.2',
    'Microsoft.NET.Native.Framework.2.2',
    'Microsoft.UI.Xaml.2.8',
    'Microsoft.UI.Xaml.2.7',
    'Microsoft.UI.Xaml.2.3',
    'Microsoft.UI.Xaml.2.4',
    'Microsoft.UI.Xaml.2.1',
    'Microsoft.UI.Xaml.2.2',
    'Microsoft.UI.Xaml.2.5',
    'Microsoft.UI.Xaml.2.6',
    'Microsoft.VCLibs.140.00.UWPDesktop',
    'MicrosoftWindows.Client.LKG',
    'MicrosoftWindows.Client.FileExp',
    'Microsoft.WindowsAppRuntime.1.5',
    'Microsoft.WindowsAppRuntime.1.3',
    'Microsoft.WindowsAppRuntime.1.1',
    'Microsoft.WindowsAppRuntime.1.2',
    'Microsoft.WindowsAppRuntime.1.4',
    'Microsoft.Windows.OOBENetworkCaptivePortal',
    'Microsoft.Windows.Search'
)

$appstoignore = $WhitelistedApps += $NonRemovable
$Bloatware = @("*ActiproSoftwareLLC*", "*AdobeSystemsIncorporated.AdobePhotoshopExpress*", "*BubbleWitch3Saga*", "*CandyCrush*", "*DevHome*", "*Disney*", "*Dolby*", "*Duolingo-LearnLanguagesforFree*", "*EclipseManager*", "*Facebook*", "*Flipboard*", "*gaming*", "*Minecraft*", "*Office*", "*PandoraMediaInc*", "*Royal Revolt*", "*Speed Test*", "*Spotify*", "*Sway*", "*Twitter*", "*Wunderlist*", "AD2F1837.HPPrinterControl", "AppUp.IntelGraphicsExperience", "C27EB4BA.DropboxOEM*", "Disney.37853FC22B2CE", "DolbyLaboratories.DolbyAccess", "DolbyLaboratories.DolbyAudio", "E0469640.SmartAppearance", "Microsoft.549981C3F5F10", "Microsoft.AV1VideoExtension", "Microsoft.BingNews", "Microsoft.BingSearch", "Microsoft.BingWeather", "Microsoft.GetHelp", "Microsoft.Getstarted", "Microsoft.GamingApp", "Microsoft.HEVCVideoExtension", "Microsoft.Messaging", "Microsoft.Microsoft3DViewer", "Microsoft.MicrosoftEdge.Stable", "Microsoft.MicrosoftJournal", "Microsoft.MicrosoftOfficeHub", "Microsoft.MicrosoftSolitaireCollection", "Microsoft.MixedReality.Portal", "Microsoft.MPEG2VideoExtension", "Microsoft.News", "Microsoft.Office.Lens", "Microsoft.Office.OneNote", "Microsoft.Office.Sway", "Microsoft.OneConnect", "Microsoft.OneDriveSync", "Microsoft.People", "Microsoft.PowerAutomateDesktop", "Microsoft.PowerAutomateDesktopCopilotPlugin", "Microsoft.Print3D", "Microsoft.RemoteDesktop", "Microsoft.SkypeApp", "Microsoft.StorePurchaseApp", "Microsoft.SysinternalsSuite", "Microsoft.Teams", "Microsoft.Todos", "Microsoft.Whiteboard", "Microsoft.Windows.DevHome", "Microsoft.WindowsAlarms", "Microsoft.WindowsCamera", "Microsoft.windowscommunicationsapps", "Microsoft.WindowsFeedbackHub", "Microsoft.WindowsMaps", "Microsoft.WindowsSoundRecorder", "Microsoft.WindowsStore", "Microsoft.Xbox.TCUI", "Microsoft.XboxApp", "Microsoft.XboxGameOverlay", "Microsoft.XboxGamingOverlay", "Microsoft.XboxGamingOverlay_5.721.10202.0_neutral_~_8wekyb3d8bbwe", "Microsoft.XboxIdentityProvider", "Microsoft.XboxSpeechToTextOverlay", "Microsoft.YourPhone", "Microsoft.ZuneMusic", "Microsoft.ZuneVideo", "MicrosoftCorporationII.MicrosoftFamily", "MicrosoftCorporationII.QuickAssist", "MicrosoftWindows.Client.WebExperience", "MicrosoftWindows.CrossDevice", "MirametrixInc.GlancebyMirametrix", "MSTeams", "RealtimeboardInc.RealtimeBoard", "SpotifyAB.SpotifyMusic")

$provisioned = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -in $Bloatware -and $_.DisplayName -notin $appstoignore -and $_.DisplayName -notlike 'MicrosoftWindows.Voice*' -and $_.DisplayName -notlike 'Microsoft.LanguageExperiencePack*' -and $_.DisplayName -notlike 'MicrosoftWindows.Speech*' }
foreach ($appxprov in $provisioned) {
    $packagename = $appxprov.PackageName
    $displayname = $appxprov.DisplayName
    write-output "Removing $displayname AppX Provisioning Package"
    try {
        Remove-AppxProvisionedPackage -PackageName $packagename -Online -ErrorAction SilentlyContinue
        write-output "Removed $displayname AppX Provisioning Package"
    }
    catch {
        write-output "Unable to remove $displayname AppX Provisioning Package"
    }
}
$appxs = Get-AppxPackage -AllUsers | Where-Object { $_.Name -in $Bloatware -and $_.Name -notin $appstoignore -and $_.Name -notlike 'MicrosoftWindows.Voice*' -and $_.Name -notlike 'Microsoft.LanguageExperiencePack*' -and $_.Name -notlike 'MicrosoftWindows.Speech*' }

foreach ($appx in $appxs) {
    $packagename = $appx.PackageFullName
    $displayname = $appx.Name
    write-output "Removing $displayname AppX Package"
    try {
        Remove-AppxPackage -Package $packagename -AllUsers -ErrorAction SilentlyContinue
        write-output "Removed $displayname AppX Package"
    }
    catch {
        write-output "Unable to remove $displayname AppX Package"
    }
}

############################################################################################################
#                                     End of AppX Packages Removal                                          #
############################################################################################################

Stop-Transcript

Use Cases

  • IT Administrators: Quickly remove bloatware across multiple systems in a corporate environment.
  • MSPs (Managed Service Providers): Automate Windows cleanup for client devices.
  • System Optimizers: Improve performance on personal or business computers by eliminating unnecessary apps.
  • Deployment Teams: Streamline new system rollouts by ensuring a clean, consistent software environment.

Recommendations

  • Test Before Deployment: Run the script on a test machine to verify the whitelist settings.
  • Customize the Whitelist: If specific applications are needed, add them to the $customwhitelist parameter.
  • Review Logs: Check C:\ProgramData\Debloat\Debloat.log to confirm which applications were removed.
  • Scheduled Use: Consider running the script as a scheduled task to maintain clean systems over time.

FAQ

  • Can I undo the removal of an application?
    The script does not have a built-in undo function, but you can reinstall applications via the Microsoft Store or PowerShell commands.
  • Will this remove Microsoft Office or other critical applications?
    No, the script includes a carefully curated whitelist to prevent the removal of essential business apps.
  • How do I add an application to the whitelist?
    Use the $customwhitelist parameter when running the script or modify the $WhitelistedApps section directly.
  • Can I use this script on Windows 10 and Windows 11?
    Yes, the script is compatible with both Windows 10 and Windows 11.
  • What happens if an application is removed but needed later?
    You can reinstall any removed app from the Microsoft Store or by using the Get-AppxPackage and Add-AppxPackage PowerShell commands.

Included with this Script:

Below is a list of what you can expect to find when importing this Script.

Script details:

The following data and settings will be imported with your script.

Script Name

Remove Bloatware on Windows

Description

Remove unnecessary apps on Windows while preserving essential packages. This script uses a whitelist, logs every step at C:\ProgramData\Debloat, and reduces clutter with minimal effort. Use the custom whitelist to tailor removal.

Language

PowerShell

Timeout (In Seconds)

500

Run As

Local system

Import into Level

Related resources

Explore more automations, scripts, and policies to further enhance your IT operations.

View all resources