Removing Bloatware and Useless Apps from Windows Using PowerShell

New Windows computers often come with unnecessary applications preinstalled. These apps take up disk space, slow down startup, and clutter the system. Some appear under Apps & Features, others under Programs and Features, and many are hidden as provisioned apps that reinstall for new users.

PowerShell gives administrators a clean and repeatable way to remove this bloatware in one pass.

This post covers:

  • What types of apps are considered bloatware
  • The difference between installed apps and provisioned apps
  • A PowerShell script that removes both safely

What Counts as Bloatware

Bloatware typically includes:

  • Manufacturer apps (OEM utilities, trial software)
  • Consumer Microsoft apps (games, media, promotions)
  • Unused preinstalled tools that aren’t business-critical

Examples:

  • Xbox apps
  • Candy Crush and similar games
  • OEM support hubs
  • Trial antivirus software
  • Consumer media apps

This script does not remove critical Windows components such as:

  • Microsoft Store
  • Windows Security
  • .NET, Visual C++ runtimes
  • Core system UI apps

Types of Apps in Windows

Windows apps fall into two main categories:

Installed Apps (Per User or System)

  • Visible in Apps & Features
  • Removed with Get-AppxPackage or UninstallString

Provisioned Apps

  • Automatically install for new user profiles
  • Removed with Get-AppxProvisionedPackage
  • Must be removed separately to prevent reinstallation

To truly clean a system, both must be handled.


PowerShell Script to Remove Bloatware and Useless Apps

Important notes before running:

  • Run PowerShell as Administrator
  • Test on a non-production machine first
  • Review the app list and customize as needed

What this script does

  • Removes common Microsoft consumer apps
  • Removes OEM and trial software (when possible)
  • Removes provisioned apps so they don’t come back
  • Logs actions to the console for visibility

PowerShell Script

# ==========================================
# Windows Bloatware Removal Script
# Run as Administrator
# ==========================================

Write-Host "Starting bloatware removal..." -ForegroundColor Cyan

# List of AppX package names to remove
$BloatwareApps = @(
    "Microsoft.3DBuilder"
    "Microsoft.BingNews"
    "Microsoft.BingWeather"
    "Microsoft.GetHelp"
    "Microsoft.Getstarted"
    "Microsoft.MicrosoftOfficeHub"
    "Microsoft.MicrosoftSolitaireCollection"
    "Microsoft.MixedReality.Portal"
    "Microsoft.Office.OneNote"
    "Microsoft.People"
    "Microsoft.SkypeApp"
    "Microsoft.Todos"
    "Microsoft.XboxApp"
    "Microsoft.XboxGameOverlay"
    "Microsoft.XboxGamingOverlay"
    "Microsoft.XboxIdentityProvider"
    "Microsoft.XboxSpeechToTextOverlay"
    "Microsoft.YourPhone"
    "Microsoft.ZuneMusic"
    "Microsoft.ZuneVideo"
    "Microsoft.WindowsFeedbackHub"
    "Microsoft.WindowsMaps"
    "MicrosoftTeams"
    "Clipchamp.Clipchamp"
)

# Remove installed AppX packages for all users
foreach ($App in $BloatwareApps) {
    Write-Host "Removing installed app: $App"
    Get-AppxPackage -AllUsers -Name $App -ErrorAction SilentlyContinue |
        Remove-AppxPackage -ErrorAction SilentlyContinue
}

# Remove provisioned AppX packages so they don't reinstall
foreach ($App in $BloatwareApps) {
    Write-Host "Removing provisioned app: $App"
    Get-AppxProvisionedPackage -Online |
        Where-Object { $_.DisplayName -eq $App } |
        Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue
}

# ==========================================
# Remove traditional desktop programs
# (Programs and Features)
# ==========================================

$UnwantedPrograms = @(
    "McAfee"
    "Norton"
    "WildTangent"
    "HP Support Assistant"
    "Dell SupportAssist"
    "Lenovo Vantage"
)

$RegistryPaths = @(
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)

foreach ($Path in $RegistryPaths) {
    Get-ItemProperty $Path -ErrorAction SilentlyContinue | ForEach-Object {
        foreach ($Program in $UnwantedPrograms) {
            if ($_.DisplayName -and $_.DisplayName -like "*$Program*") {
                Write-Host "Uninstalling program: $($_.DisplayName)"
                if ($_.UninstallString) {
                    Start-Process "cmd.exe" -ArgumentList "/c $($_.UninstallString) /quiet" -Wait
                }
            }
        }
    }
}

Write-Host "Bloatware removal completed." -ForegroundColor Green

Customizing the Script

You should tailor the app lists for your environment.

To see all installed AppX apps:

Get-AppxPackage -AllUsers | Select Name

To see provisioned apps:

Get-AppxProvisionedPackage -Online | Select DisplayName

Add or remove entries from the $BloatwareApps array as needed.


When to Use This Script

This script is ideal for:

  • New computer deployments
  • Post-imaging cleanup
  • IT admin workstation prep
  • Performance optimization on personal machines

For domain environments, this script can also be deployed via:

  • Group Policy startup scripts
  • Intune remediation scripts
  • Configuration Manager task sequences

Final Thoughts

Windows bloatware is more than an annoyance—it impacts performance, storage, and user experience. With a single PowerShell script, you can standardize cleanup, reduce manual effort, and keep systems lean.

Leave a Reply

Your email address will not be published. Required fields are marked *