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-AppxPackageorUninstallString
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.