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.
<#
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
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:
- Provisioned Package Removal – Ensures that unwanted apps do not reinstall for new user profiles.
- 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.
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.