How to identify and remove bloatware from Windows 11

Brock Bingham candid headshot
Brock Bingham|June 14, 2023
Illustration of computer desk and monitor with PDQ logo
Illustration of computer desk and monitor with PDQ logo

Let me start by saying I like Windows 11. I’ve used it as my daily driver, and it’s installed on several of my test machines. It’s reliable, I like the UI, and the Settings menu has really matured compared to Windows 10. However, it’s got a bit of a bloatware problem. Fortunately, I ain’t afraid of no bloat. Here’s everything you need to know about removing Windows 11 bloatware.

The Windows 11 bloatware problem

If there’s one thing every Windows sysadmin loves, it’s bloatware. Who doesn’t appreciate having Instagram, TikTok, and ESPN installed on their freshly imaged endpoints? Okay, okay — I take back what I said. Please don’t leave me a bad Yelp review.

All jokes aside, bloatware in Windows is nothing new. And maybe we’ve come to expect it from OEMs, but finding unnecessary third-party apps on our fresh OS installs is disappointing. However, bloatware isn’t even the root of the issue. The real problem is the lack of communication and transparency from Microsoft.

If you’ve done enough research, you’ll quickly realize that Microsoft doesn’t provide adequate documentation regarding this topic. Most of the relevant information on the web is from sysadmins documenting their process through trial and error, which shouldn’t be the case. Hopefully, Microsoft will step up and provide better insights for the community since they should be the ultimate authority on the topic.

How to identify bloatware

Bloatware is unnecessary and unwanted software that’s included with an operating system. While I wish I could give you a list of all the bloatware included with Windows 11, I can't. Bloatware is subjective. Just because I don't want Microsoft Clipchamp on my workstations doesn't mean that you agree. I recommend thoroughly inspecting a fresh installation of your version of Windows 11 and making a list of applications you don't want included with your OS. Keep in mind that preinstalled software may vary between Windows 11 Home, Pro, and Enterprise editions.

How to manually remove bloatware in Windows 11

While I could drone on about Microsoft’s foibles of late, I’ll save it for my imaginary dissertation. Instead, let me focus on the topic at hand. Here’s how to manually remove bloatware from Windows 11.

  1. Click the Start button to open the Start menu.

  2. Right-click on the offending bloatware, then click Uninstall.

    Right-click and uninstall the unwanted application.

This surefire method gets that Bloaty McBloatware off your computer super quick. However, there are a few things I should point out.

First, this method removes the bloatware only from the current user profile. Anyone else using that device will have to remove their own bloatware.

Another helpful bit of information I should point out is that many — but not all — “bloatware” apps aren’t actually installed. Many apps on the Start menu, including ESPN, Instagram, and TikTok, are just links to installers. I’ve heard them referred to as “quick installers” and “ghost apps.” You can test this for yourself by just clicking on the app icon. You’ll notice an installer progress bar appears under the icon. Once the installation finishes, you’ll receive a notification that the app has been installed.

The last thing I want to mention is that since many of these apps aren’t installed, you won’t find them in the All apps menu. Also, they won’t appear as an installed app when you search for them. They reside solely as a link pinned to the Start menu. However, if you click on them and go through the installation process, they appear in the All apps menu and search results.

Remove Windows 11 bloatware with Local Group Policy

If uninstalling apps one by one doesn’t impress you, I don’t blame you. It’s not the most efficient method, nor does it divulge where these apps or links are coming from in the first place. To get to the root of our bloatware problem, we’ll use Local Group Policy along with some other IT foolery.

  1. Enter group policy into the Windows 11 search field, then click on the Edit group policy app.

    Open the group policy editor.

  2. Navigate to Computer Configuration > Administrative Templates > Windows Components > Cloud Content.

  3. Double-click the Turn off cloud optimized content policy.

    Open the "Turn off cloud optimized content" policy.

  4. Select Enabled, then click OK to save and close the policy.

    Enable the policy then click OK.

  5. Open File Explorer and navigate to C:\Users\<current_user>\AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy. You will need to show hidden items to navigate to this directory.

  6. Delete the LocalState folder. You can move this folder to a different directory if you’d rather save it, just in case.

    Delete the LocalState folder.

  7. Restart the PC.

Once the computer reboots and you log back in, your Start menu should be bloatware free. Remember that this removes only the bloatware links, such as ESPN, Spotify, and Messenger. This process won’t remove other APPX packages you may or may not want installed on your system. Also, this process only works for the current user and new user account. Other existing users will still be infected with Microsoft’s approved bloatware.

One last caveat I should mention before moving on: These changes may or may not last forever. Windows updates have a way of restoring things we’d rather not restore. While this is usually the case only with Windows feature updates, I’ve heard rumors that regular cumulative updates can also revert some of these changes, so keep an eye on your config settings after installing updates.

Using PowerShell to remove Windows 11 bloatware

While everyone agrees that bloatware is annoying, there are several other default Windows 11 settings that are just as problematic. If you’re looking for an easy way to remove bloatware and configure all these changes, PowerShell’s the answer.

There’s not much that PowerShell can’t do, so it’s no surprise that it can efficiently configure Windows 11 for you. Here are some of the changes these PowerShell scripts can make.

  • Remove bloatware (both quick installers and APPX packages)

  • Disable Teams

  • Disable Cortana

  • Disable news and interests

  • Disable cloud content

  • Disable consumer experiences

  • Disable Windows Spotlight

Ensure you review and test these scripts to understand all the changes being made. If there are changes you’d rather not implement, feel free to modify these scripts to meet your users needs.

This first script removes APPX packages that many users consider bloatware. It uses an allow list to ensure necessary apps, like Notepad and Calculator, are not removed. Add any other APPX packages you want to keep to the allow list.

##Get appx Packages $Packages = Get-AppxPackage ##Create Your allowlist $AllowList = @( '*WindowsCalculator*', '*Office.OneNote*', '*Microsoft.net*', '*MicrosoftEdge*', '*WindowsStore*', '*WindowsTerminal*', '*WindowsNotepad*', '*Paint*' ) ###Get All Dependencies ForEach($Dependency in $AllowList){ (Get-AppxPackage -Name “$Dependency”).dependencies | ForEach-Object{ $NewAdd = "*" + $_.Name + "*" if($_.name -ne $null -and $AllowList -notcontains $NewAdd){ $AllowList += $NewAdd } } } ##View all applications not in your allowlist ForEach($App in $Packages){ $Matched = $false Foreach($Item in $AllowList){ If($App -like $Item){ $Matched = $true break } } ###Nonremovable attribute does not exist before 1809, so if you are running this on an earlier build, remove “-and $app.NonRemovable -eq $false” rt; it attempts to remove everything if($matched -eq $false -and $app.NonRemovable -eq $false){ Get-AppxPackage -AllUsers -Name $App.Name -PackageTypeFilter Bundle | Remove-AppxPackage -AllUsers } }

This second script removes the quick installer bloatware and configures several Windows 11 settings that are more appropriate for business use.

# modified from https://gist.github.com/redlttr/8b95df51fd472d459b5c3a3ae6c8f5ad #region install the PolicyFileEditor module to update local group policy Try { $null = Get-InstalledModule PolicyFileEditor -ErrorAction Stop } Catch { if ( -not ( Get-PackageProvider -ListAvailable | Where-Object Name -eq "Nuget" ) ) { $null = Install-PackageProvider “Nuget” -Force } $null = Install-Module PolicyFileEditor -Force } $null = Import-Module PolicyFileEditor -Force # help about_registryvaluesforadmintemplates # #endregion # Variables $ComputerPolicyFile = Join-Path $env:SystemRoot '\System32\GroupPolicy\Machine\registry.pol' $UserPolicyFile = Join-Path $env:SystemRoot '\System32\GroupPolicy\User\registry.pol' $WinVer = Get-CimInstance win32_operatingsystem # Define policies $ComputerPolicies = @( [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Communications'; ValueName = 'ConfigureChatAutoInstall'; Data = '0'; Type = 'Dword' } # Disable Teams (personal) auto install (W11) [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Chat'; ValueName = 'ChatIcon'; Data = '2'; Type = 'Dword' } # Hide Chat icon by default (W11) [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Search'; ValueName = 'AllowCortana'; Data = '0'; Type = 'Dword' } # Disable Cortana [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Feeds'; ValueName = 'EnableFeeds'; Data = '0'; Type = 'Dword' } # Disable news/interests on taskbar [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Search'; ValueName = 'DisableWebSearch'; Data = '1'; Type = 'Dword' } # Disable web search in Start [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\Windows Search'; ValueName = 'AllowCloudSearch'; Data = '0'; Type = 'Dword' } # Disable web search in Start [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableCloudOptimizedContent'; Data = '1'; Type = 'Dword' } # Disable cloud consumer content [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableConsumerAccountStateContent'; Data = '1'; Type = 'Dword' } # Disable cloud consumer content [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableWindowsConsumerFeatures'; Data = '1'; Type = 'Dword' } # Disable Consumer Experiences ) $UserPolicies = @( [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced'; ValueName = 'TaskbarMn'; Data = '0'; Type = 'Dword' } # Disable Chat Icon [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'; ValueName = 'HideSCAMeetNow'; Data = '1'; Type = 'Dword' } # Disable Meet Now icon (W10) [PSCustomObject]@{Key = 'Software\Microsoft\Windows\CurrentVersion\Search'; ValueName = 'SearchboxTaskbarMode'; Data = '1'; Type = 'Dword' } # Set Search in taskbar to show icon only [PSCustomObject]@{Key = 'Software\Policies\Microsoft\Windows\CloudContent'; ValueName = 'DisableWindowsSpotlightFeatures'; Data = '1'; Type = 'Dword' } # Disable Windows Spotlight ) # Set group policies try { Write-Output 'Setting local group policies...' $ComputerPolicies | Set-PolicyFileEntry -Path $ComputerPolicyFile -ErrorAction Stop $UserPolicies | Set-PolicyFileEntry -Path $UserPolicyFile -ErrorAction Stop gpupdate /force /wait:0 | Out-Null Write-Output 'Group policies set.' } catch { Write-Warning 'Unable to apply group policies.' Write-Output $_ } # Cleanup start menu & taskbar try { if ($WinVer.Caption -like '*Windows 11*') { # Reset existing start menu layouts $Layout = 'AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState' Get-ChildItem 'C:\Users' | ForEach-Object { Remove-Item "C:\Users\$($_.Name)\$Layout" -Recurse -Force -ErrorAction Ignore } } # Restart Explorer if ($env:USERNAME -ne 'defaultuser0') { Get-Process -Name Explorer -ErrorAction SilentlyContinue | Stop-Process -Force } } catch { Write-Warning 'Unable to complete start menu & taskbar cleanup tasks.' Write-Output $_ } <# Report on configured policies Get-PolicyFileEntry -Path $ComputerPolicyFile -All Get-PolicyFileEntry -Path $UserPolicyFile -All remove the policies Get-PolicyFileEntry -Path $ComputerPolicyFile -All | Remove-PolicyFileEntry -Path $ComputerPolicyFile Get-PolicyFileEntry -Path $UserPolicyFile -All | Remove-PolicyFileEntry -Path $UserPolicyFile #>

As I mentioned in the previous section, Windows updates have a way of reverting changes made to the OS. To ensure these changes endure, you may consider configuring these scripts to run every time users log on. Keep in mind that it may take a few minutes for these scripts to run the first time you execute them. However, each subsequent run should execute almost immediately.

Other resources to help manage bloatware

While the methods we’ve covered effectively remove bloatware in Windows 11, the best strategy is to start with an image that already has bloatware removed and the correct settings configured. A properly configured OS image ensures all user profiles get the necessary settings and apps. Check out our guide on configuring default profiles in Windows 11 to build the best image for your users.

If you’re more of a visual learner, our Windows 11 bloatware webcast walks you through removing Windows 11 bloatware and answers many common questions about the process.

Lastly, if you’re looking for a way to deploy the scripts used in this article, check out PDQ Deploy. If most of your devices are remote, PDQ Connect, our agent-based solution, can deploy PowerShell scripts to devices anywhere in the world with an internet connection. You can try both products free for 14 days.

Brock Bingham candid headshot
Brock Bingham

Born in the '80s and raised by his NES, Brock quickly fell in love with everything tech. With over 15 years of IT experience, Brock now enjoys the life of luxury as a renowned tech blogger and receiver of many Dundie Awards. In his free time, Brock enjoys adventuring with his wife, kids, and dogs, while dreaming of retirement.

Related articles