Windows 10

Declutter Windows 10 by Removing Built-In Store Apps



🧹 Clearing the Clutter: A Smarter Start to Windows 10

Windows 10 comes pre-installed with a large number of apps that consume system resources, use network data, update automatically, and display notifications. Many of these apps are only fully functional once Windows 10 is linked to a Microsoft account.

In this guide, we’ll use a post-installation method involving a PowerShell script (with a few minor modifications), executed under the built-in Administrator account.

To begin, we’ll first enable the Administrator account using Command Prompt:

BAT (Batchfile)
net user Administrator /active:yes

📋 Exceptions & Logging

We won’t be removing all built-in apps—specifically, essential ones like the Microsoft Store and others that are tightly integrated with the Windows GUI. These apps are necessary for system stability and usability, so we’re keeping them to preserve key interface functionality.

The PowerShell script we’ll be using was originally created by Ben Hunter. Although his original post was written for Windows 8.1, the script still works well on Windows 10. Full credit goes to him — you can find the original script here. I’ve made a few small modifications to better suit this process.


🛠️ Why These Modifications Matter

Our objective is to ensure that the unwanted apps are not reinstalled for new user accounts. To do this properly, we must remove the provisioned packages — not just the apps installed for the current user.

That’s where this script becomes powerful:
It removes each app listed in the $AppList by targeting both the current and provisioned instances.

My version of the script also adds basic logging for visibility:

  • 📁 Creates a TEMP folder on the root of the C:\ drive
  • 📝 Generates a file called AppxBefore.txt listing all installed packages before the script runs
  • 📝 Generates a second file called AppxAfter.txt listing installed packages after the script finishes

This before-and-after comparison lets you track changes and adjust the $AppList as needed.

🧾 Modifying the $AppList

Below is the PowerShell script used to remove built-in Windows 10 apps. The core of this script is the $AppList array — a list of app names you want to remove.

Feel free to customize this list to match your preferences. For example, you can add or remove specific app names to control exactly which ones are uninstalled.

✏️ How to Modify the Script

  1. Copy the script code (provided below) into Notepad or any plain text editor.
  2. Save the file with a .ps1 extension — for example:
    Win10RemoveApps.ps1
  3. Run the script using PowerShell as the built-in Administrator (after enabling the account if needed).

💡 Tip: Make sure file extensions are visible in Windows Explorer so you don’t accidentally save the file as Win10RemoveApps.ps1.txt.

Once you’ve saved and edited the script, you’re ready to run it and start removing unwanted provisioned apps from Windows 10.

PowerShell
# Create TEMP directory if it doesn't exist
$TempPath = "C:\TEMP"
if (-not (Test-Path $TempPath)) {
    New-Item -Path $TempPath -ItemType Directory | Out-Null
}

# Log installed packages before removal
Get-AppxPackage | Select-Object Name, PackageFullName | Out-File "$TempPath\AppxBefore.txt"

# List of apps to remove
$AppsList = @(
    "Microsoft.WindowsCommunicationsApps",
    "Microsoft.XboxApp",
    "Microsoft.SkypeApp",
    "Microsoft.MicrosoftSolitaireCollection",
    "Microsoft.ZuneMusic",
    "Microsoft.ZuneVideo",
    "Microsoft.MicrosoftOfficeHub",
    "Microsoft.3DBuilder",
    "king.com.CandyCrushSodaSaga",
    "9E2F88E3.Twitter",
    "Microsoft.Messaging",
    "Flipboard.Flipboard",
    "ShazamEntertainmentLtd.Shazam",
    "ClearChannelRadioDigital.iHeartRadio",
    "Microsoft.MinecraftUWP",
    "XboxOneSmartGlass"
)

foreach ($App in $AppsList) {
    # Get the installed package full name for the current user
    $Package = Get-AppxPackage -Name $App -ErrorAction SilentlyContinue
    $PackageFullName = $Package?.PackageFullName

    # Get the provisioned package full name (for all users)
    $ProPackage = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -eq $App }
    $ProPackageFullName = $ProPackage?.PackageName

    if ($PackageFullName) {
        Write-Host "Removing installed package: $App"
        try {
            Remove-AppxPackage -Package $PackageFullName -ErrorAction Stop
        } catch {
            Write-Warning "Failed to remove package $App: $_"
        }
    } else {
        Write-Host "Installed package not found: $App"
    }

    if ($ProPackageFullName) {
        Write-Host "Removing provisioned package: $ProPackageFullName"
        try {
            Remove-AppxProvisionedPackage -Online -PackageName $ProPackageFullName -ErrorAction Stop
        } catch {
            Write-Warning "Failed to remove provisioned package $ProPackageFullName: $_"
        }
    } else {
        Write-Host "Provisioned package not found: $App"
    }
}

# Log installed packages after removal
Get-AppxPackage | Select-Object Name, PackageFullName | Out-File "$TempPath\AppxAfter.txt"

📜 Script Summary & Breakdown

What this script does:

  • Creates a TEMP folder: Ensures C:\TEMP exists to store log files.
  • Logs installed apps before removal: Saves a snapshot of all installed AppX packages to AppxBefore.txt.
  • Defines apps to remove: Uses the $AppsList array to specify unwanted built-in apps.
  • Removes installed packages: For each app in the list, uninstalls it from the current user.
  • Removes provisioned packages: Also deletes the provisioned packages so new users won’t get them.
  • Logs installed apps after removal: Saves a second snapshot of remaining AppX packages to AppxAfter.txt.
  • Error handling: Includes warnings if any package removal fails or packages aren’t found.

This script helps you clean up Windows 10 by removing unnecessary built-in apps both for the current user and all future users on the machine.

🗑️ Uninstalling Store Apps with PowerShell

Now that you’ve saved the script locally on the machine you want to clean up, you’re ready to run it. Follow these steps carefully to ensure a smooth execution.


⚙️ Step 1: Run PowerShell as Administrator

  • Open Windows PowerShell (⚠️ not PowerShell ISE).
  • Right-click and choose “Run as Administrator.”

Before you can run scripts, you need to allow script execution by changing the PowerShell execution policy.

Run the following command:

PowerShell
Set-ExecutionPolicy Unrestricted

🛡️ Note: This temporarily allows all scripts to run. We’ll reset it afterward.

📂 Step 2: Navigate to the Script Location

Use the cd command to move to the folder where you saved the script. For example:

PowerShell
cd C:\Scripts

Once you’re in the correct directory, run the script like this:

PowerShell
./Win10RemoveApps.ps1

🔐 Step 3: Restore Script Execution Policy

After the script completes, it’s good practice to restore your previous execution policy:

PowerShell
Set-ExecutionPolicy Restricted

🧹 Post-Run Notes

Because this is a post-install method, you may encounter a few visual leftovers in the Start Menu:

  • Some removed apps may leave behind blank icons or names.
  • You can usually remove these manually by right-clicking and selecting Uninstall.
  • If no option appears, they are simply visual remnants — not active apps.

If this bothers you, there’s a more complete cleanup method:

👤 Delete and recreate the user profile.
When you log in again, the Start Menu will be clean, and the removed apps won’t return (thanks to the removal of provisioned packages).

⚠️ Make sure to back up all user data before deleting a user profile.

🛠️ Fixing AppX Package Issues After Username Change

If a user account has been renamed in Active Directory, and the user logs into a Windows 10 machine joined to the organization’s domain, they may encounter issues with built-in Windows Store Apps — such as apps failing to start, crashing, or not opening at all.

This is a common issue tied to AppX packages and how they’re associated with the user profile.


✅ Solution: Re-register AppX Packages

To resolve this, follow the steps below:

Open PowerShell as Administrator and run the following command:

Add the affected user to the Local Administrators group on the client machine.

Have the user log in directly to the machine with their domain credentials.

PowerShell
Get-AppxPackage | ForEach-Object { Add-AppxPackage -DisableDevelopmentMode -Register ($_.InstallLocation + 'AppxManifest.xml')}

If the above command does not work, try this other variation of it below:

PowerShell
Get-AppxPackage | ForEach-Object { Add-AppxPackage -DisableDevelopmentMode -Register ($_.InstallLocation + '\AppxManifest.xml')}

Here is one from ChatGPT:

PowerShell
Get-AppxPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}

Try each one if they don’t work, I’ve found some machines one or the others work.

✅ Conclusion

And there you have it — a cleaner, leaner Windows 10 setup without all the unnecessary bloat.

Now, just unpin any remaining unwanted shortcuts from the Start Menu and arrange things the way you like. You’ll be left with a much more streamlined interface and fewer distractions.

💡 Pro Tip:
This script can also be used as part of a Task Sequence in MDT (Microsoft Deployment Toolkit) when imaging multiple machines. However, an even more robust approach is to remove the default apps before the OS installs by modifying the install.wim file within your Windows installation media.

Whether you’re applying this post-installation or integrating it into your deployment workflow, removing unneeded apps gives users a faster and more focused Windows experience.

🌿 Final Thoughts

Taking control of the default Windows 10 experience not only improves performance and usability but also gives you — and your users — a system that’s tailored, efficient, and free of distractions. Whether you’re managing one machine or hundreds, a little cleanup goes a long way.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

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