rss logo

How to Remove WinApps from Windows 10 & 11

Illustration symbolizing the removal of unwanted WinApps from Windows using PowerShell

Since Windows 10, Microsoft has unfortunately filled the Start Menu and the system with a number of unnecessary applications, often referred to as WinApps or WinAppx. While it is possible to remove them using PowerShell, Microsoft tends to reinstall these apps automatically — either when a new user logs in or during regular system updates.

In this guide, I’ll show you a simple and reliable method to automatically remove these unwanted apps every time a user logs into their session. This approach combines a PowerShell script with a scheduled task in Windows Task Scheduler. Each time a user signs in, the PowerShell script will run automatically and clean up the preinstalled apps.

PowerShell Script

We will create a PowerShell script named remove_winapps.ps1 inside the C:\ProgramData\Scripts\ directory so that it’s available for all users on the system. This script will remove most of the unnecessary preinstalled WinApps (or WinAppx packages) from Windows.

###########################
# Author : std.rocks
# Version : 1.0
# Date : 2025.10
# Role : Remove unwanted WinApps (AppX packages)
# Updates :
#   - 1.0 (2025/10) : First Version

# Core system apps removal examples:
Get-AppxPackage -AllUsers | ? { $_.Name -match "windowsalarms" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "windowscommunicationsapps" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "windowscamera" } | Remove-AppxPackage -AllUsers
# Get-AppxPackage -AllUsers | ? { $_.Name -match "windowsCalculator" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "officehub" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "getstarted" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "zunemusic" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "windowsmaps" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "solitairecollection" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "zunevideo" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "bingnews" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.People" } | Remove-AppxPackage -AllUsers
# Get-AppxPackage -AllUsers | ? { $_.Name -match "photos" } | Remove-AppxPackage -AllUsers
# Get-AppxPackage -AllUsers | ? { $_.Name -match "windowsstore" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "soundrecorder" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "bingweather" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.MicrosoftOfficeHub" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.WindowsFeedbackHub" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "YourPhone" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxGamingOverlay" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "gethelp" } | Remove-AppxPackage -AllUsers

# Additional package names (explicit matches)
Get-AppxPackage -AllUsers *WINDOWSMAPS* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.BINGNEWS* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFTCORPORATIONII.QUICKASSIST* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.GETSTARTED* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.ZUNEVIDEO* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.WINDOWSFEEDBACKHUB* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.ZUNEMUSIC* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *RIVETNETWORKS.KILLERCONTROLCENTER* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.TODOS* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *CLIPCHAMP.CLIPCHAMP* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.WIDGETSPLATFORMRUNTIME* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.MICROSOFTSOLITAIRECOLLECTION* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.GETHELP* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.BINGWEATHER* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.COPILOT* | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *MICROSOFT.OUTLOOKFORWINDOWS* | Remove-AppxPackage -AllUsers

# Xbox-related apps
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.Xbox.TCUI" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxGameOverlay" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxIdentityProvider" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxSpeechToTextOverlay" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers | ? { $_.Name -match "xbox" } | Remove-AppxPackage -AllUsers
Get-AppxPackage -AllUsers *Microsoft.GamingApp* | Remove-AppxPackage -AllUsers
foreach ($app in (Get-AppxPackage -AllUsers | ? { $_.Name -match "xbox" })) { $app | Remove-AppxPackage -AllUsers }

You can customize this script by commenting out any line corresponding to apps you want to keep. Once saved, we’ll can configure a scheduled task to run it automatically at every user logon.

Scheduled Task

In this section, you'll learn how to create a new scheduled task that automatically runs your PowerShell script at user logon. This ensures the unwanted WinApps are removed every time someone signs in to Windows.

  • First, open the Windows Task Scheduler:
Run window showing the taskschd.msc command to open Windows Task Scheduler
Press Windows + R to open the Run dialog box, then type taskschd.msc and click OK to launch the Windows Task Scheduler.
  • Create a new task in the Task Scheduler:
Windows Task Scheduler window showing the Create Task option selected to automate WinApps removal using PowerShell.
In the Task Scheduler, right-click on Task Scheduler (Local) and select Create Task....
  • Enter a name for the task, for example RemoveWinapps.
  • Click Change User or Group... and set the user to SYSTEM so that the task runs with elevated privileges.
  • Select Run only when user is logged on to ensure the script executes during each user session.
  • Check the option Hidden to keep the task invisible to standard users.
  • In the Configure for dropdown, choose Windows 10 or your corresponding version.
Screenshot showing the Task Scheduler Create Task window where the RemoveWinapps task is configured under the General tab
In the General tab, name the task RemoveWinapps, set the user to SYSTEM, select Run only when user is logged on, and check Hidden for a cleaner setup.
  • Go to the Triggers tab and click on New....
  • In the Begin the task dropdown, select At log on.
  • Choose Any user so the script runs for all accounts when they sign in.
  • Leave other options by default, then click OK to confirm the trigger.
Screenshot of Windows Task Scheduler showing how to create a new trigger set to 'At log on' for any user
In the Triggers tab, click New..., set Begin the task to At log on, and choose Any user to automatically execute the WinApps removal script for all users at login.
  • Go to the Actions tab and click on New....
  • In the Action dropdown, select Start a program.
  • In the Program/script field, type powershell.exe.
  • In the Add arguments (optional) field, enter:
    -Noninteractive -Noprofile -ExecutionPolicy bypass -Command "& 'C:\ProgramData\Scripts\remove_winapps.ps1'"
  • Click OK to confirm the action.
Screenshot of Task Scheduler showing how to set up an action to run powershell.exe with the remove_winapps.ps1 script
In the Actions tab, click New..., choose Start a program, set powershell.exe as the program, and add the argument -Noninteractive -Noprofile -ExecutionPolicy bypass -Command "& 'C:\ProgramData\Scripts\remove_winapps.ps1'" to automatically execute the script at user logon.

Sign out and sign back in. You should now have a cleaner Windows Start menu!

Windows Start menu showing fewer preinstalled apps after running the remove_winapps PowerShell script
After logging back in, the Start menu should be noticeably cleaner — with fewer preinstalled apps cluttering the view.

Go Further

💡 Note: If you want to go further, you can learn how to deploy this task via Group Policy (GPO), or improve security by signing the PowerShell script.