Removing built-in apps from Windows 11
Using PowerShell to uninstall packaged applications from Windows 11.
Published in Articles on by Michiel van Oosterhout ~ 4 min read
A new installation of Windows 11 comes with several built-in packaged apps. Some examples of built-in packaged apps are Clock, Cortana, and Feedback Hub. Having these application installed by default may not be necessary or desired. Of course these applications can be manually uninstalled via the Settings app, but that is neither automated nor fun.

The Appx PowerShell module
AppX is a modern packaging format for Windows applications. Packaged apps are installed into $Env:ProgramFiles\WindowsApps
. You may want to list the contents this directory, but access to it is denied as it is owned by the TrustedInstaller account. But there is a better way to list installed packaged apps: the PowerShell Appx module.
The Windows PowerShell cmdlets for AppX are designed to streamline the administration of MSIX or AppX package management.
This module comes pre-installed with Windows 11. Run Get-Module -Name Appx -ListAvailable
to verify this:
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 2.0.1.0 Appx {Add-AppxPackage, Get-AppxPackage, Get-AppxPackageAutoUpda...
To list all the installed packaged apps, simply run Get-AppxPackage | Select-Object Name | Sort-Object Name
.
Uninstalling built-in packaged apps
The Windows PowerShell script below will uninstall a fixed set of packaged apps. You can adjust the set as needed, this is just a suggested set.
Some packaged apps have cryptic names, for example Microsoft.549981C3F5F10
for Cortana. More generally, the name of a packaged app does not match its name as displayed in the Start menu or elsewhere. For these reasons the script defines a display name for each packaged app it removes, and uses that for its output.
# These are all the packaged apps that were added and that can be removed
$packagesAdded = Get-AppxPackage | Where-Object NonRemovable -ne $true | Sort-Object Name
# This is a set of packaged apps that will be removed
$packagesToRemove = @(
@{ Name = "Clipchamp.Clipchamp"; DisplayName = "Clipchamp - Video Editor" }
@{ Name = "Microsoft.549981C3F5F10"; DisplayName = "Cortana" }
@{ Name = "Microsoft.Getstarted"; DisplayName = "Tips" }
@{ Name = "Microsoft.MicrosoftOfficeHub"; DisplayName = "Office" }
@{ Name = "Microsoft.MicrosoftSolitaireCollection"; DisplayName = "Solitaire" }
@{ Name = "Microsoft.Paint"; DisplayName = "Paint" }
@{ Name = "Microsoft.People"; DisplayName = "People" }
@{ Name = "Microsoft.ScreenSketch"; DisplayName = "Screen Sketch" }
@{ Name = "Microsoft.WindowsAlarms"; DisplayName = "Clock" }
@{ Name = "Microsoft.WindowsFeedbackHub"; DisplayName = "Feedback Hub" }
@{ Name = "Microsoft.WindowsMaps"; DisplayName = "Maps" }
@{ Name = "Microsoft.WindowsSoundRecorder"; DisplayName = "Voice Recorder" }
@{ Name = "Microsoft.WindowsStore"; DisplayName = "Microsoft Store" }
@{ Name = "Microsoft.XboxGamingOverlay"; DisplayName = "Xbox Game Bar" }
@{ Name = "Microsoft.YourPhone"; DisplayName = "Your Phone" }
@{ Name = "Microsoft.ZuneMusic"; DisplayName = "Media Player" }
@{ Name = "MicrosoftTeams"; DisplayName = "Microsoft Teams" }
) | Sort-Object { $_.DisplayName }
$packagesToRemove | ForEach-Object {
$displayName = $_.DisplayName
$name = $_.Name
$packagesAdded |
Where-Object Name -ieq $name |
Select-Object -ExpandProperty PackageFullName |
ForEach-Object {
# Remove the packaged app
Write-Host "Removing [$displayName]... " -NoNewline
Remove-AppxPackage -Package $_
Write-Host "OK"
}
}
The script uses the packaged apps' full package name, an example of which is Microsoft.WindowsFeedbackHub_1.2201.61.0_arm64__8wekyb3d8bbwe
. This consists of the package's name (Microsoft.WindowsFeedbackHub
), version (1.2201.61.0
), platform (arm64
), resource ID (missing for this example), and a hash of the package's publisher information (8wekyb3d8bbwe
, which is Microsoft Corporation's hash), separated by underscores.
The set of packaged apps to remove is iterated and for each item zero, one, or more installed packaged apps are found. For example, Microsoft.WindowsStore matches multiple installed packaged apps, differing in version and platform. Running Get-AppxPackage | Where-Object Name -ieq "Microsoft.WindowsStore" | Select-Object PackageFullName
outputs:
PackageFullName
---------------
Microsoft.WindowsStore_22204.1400.4.0_arm__8wekyb3d8bbwe
Microsoft.WindowsStore_22209.1401.10.0_arm64__8wekyb3d8bbwe
The script above removed all matching packaged apps.
Summary
The AppX package format in combination with the Appx PowerShell module makes it relatively easy to automate the removal of unnecessary software, because the uninstall command is the same for each packaged app.