MSEndpointMgr

Remove built-in apps for Windows 10 version 20H2

Since the release of Windows 10, it has been common for organization to try and reduce the footprint of built-in apps (or default apps) in their reference images, or even during bare-metal deployment. Over the years, the community has provided several solutions on how to accomplish this including myself. During this time, I’ve attempted to keep my script updated after each new release of Windows 10. Up until now though, I’ve been behind on keeping it up-to-date, but rest assured, here’s the latest version that now supports Windows 10 version 20H2 and below.

Originally, this method was developed for when creating a reference image here, as shown in the blog post below. Recently however, Windows Autopilot has increased in popularity. This script also works for when provisioning new devices using Windows Autopilot for devices to be managed with Microsoft Intune.

Download script

I’ve made the script available on our GitHub repository along with all the other scripts that we’ve shared, and it’s available on the following URL:

https://github.com/MSEndpointMgr/ConfigMgr/blob/master/Operating%20System%20Deployment/Invoke-RemoveBuiltinApps.ps1

What’s new

  • Windows 10 version 2004 (20H1): Added Microsoft.VCLibs.140.00 to the white list.
  • Windows 10 version 20H2: Added Microsoft.MicrosoftEdge.Stable to the white list, but also extended the Feature on Demand V2 white list to include the following packages:
    • Notepad|MSPaint|PowerShell.ISE|ShellComponents

Using the script

As for using the script when creating a reference image for e.g. ConfigMgr, see the following posts for implementation guidance:

Remove Built-in apps when creating a Windows 10 reference image – MSEndpointMgr

Remove Built-in apps for Windows 10 version 1903 – MSEndpointMgr

As for Windows Autopilot and Intune, I’ve not written any posts as of yet, however the instructions are extremely simply. Create a PowerShell Script object, point towards the script and ensure it’s running in a 64-bit process in the System context, similar to the following configuration:

What’s removed from the device after running this script

As for built-in appx provisioning packages, here’s the list of apps that will be removed:

  • Microsoft.549981C3F5F10
  • Microsoft.BingWeather
  • Microsoft.GetHelp
  • Microsoft.Getstarted
  • Microsoft.Microsoft3DViewer
  • Microsoft.MicrosoftSolitaireCollection
  • Microsoft.MixedReality.Portal
  • Microsoft.People
  • Microsoft.SkypeApp
  • Microsoft.Wallet
  • Microsoft.WindowsCamera
  • Microsoft.WindowsFeedbackHub
  • Microsoft.WindowsMaps
  • Microsoft.Xbox.TCUI
  • Microsoft.XboxApp
  • Microsoft.XboxGameOverlay
  • Microsoft.XboxGamingOverlay
  • Microsoft.XboxIdentityProvider
  • Microsoft.XboxSpeechToTextOverlay
  • Microsoft.YourPhone
  • Microsoft.ZuneMusic
  • Microsoft.ZuneVideo

And for the Feature on Demand V2 packages, these will be removed:

  • App.StepsRecorder
  • App.Support.QuickAssist
  • MathRecognizer
  • Microsoft.Windows.WordPad
  • OpenSSH.Client
  • Print.Fax.Scan
  • Print.Management.Console

As always, you can update the $WhiteListOnDemand and $WhiteListedApps variables to include more apps, ensuring they’re kept on the device, or of course remove entries from both if you think the already added apps does not fit in your environment.

Manually validate what will be removed by the script

In the case where you would want to adjust the whitelist defined in the script, for various reasons, use the sample script below for AppX provisioning packages that will be removed by default when running this script using the embedded list.

# White list of appx packages to keep installed
$WhiteListedApps = New-Object -TypeName System.Collections.ArrayList
$WhiteListedApps.AddRange(@(
    "Microsoft.DesktopAppInstaller",
    "Microsoft.MSPaint",
    "Microsoft.Windows.Photos",
    "Microsoft.StorePurchaseApp",
    "Microsoft.CompanyPortal",
    "Microsoft.WindowsAlarms",
    "Microsoft.WindowsCalculator",
    "Microsoft.WindowsStore",
    "Microsoft.Windows.ShellExperienceHost",
    "Microsoft.ScreenSketch",
    "Microsoft.HEIFImageExtension",
    "Microsoft.VP9VideoExtensions",
    "Microsoft.WebMediaExtensions",
    "Microsoft.WebpImageExtension",
    "Microsoft.Outlook.DesktopIntegrationServicess",
    "Microsoft.VCLibs.140.00",
    "Microsoft.MicrosoftEdge.Stable"
))

$AppArrayList = Get-AppxProvisionedPackage -Online | Select-Object -ExpandProperty DisplayName
foreach ($App in $AppArrayList) {
    if (($App -notin $WhiteListedApps)) {
        $AppPackageName = Get-AppxPackage -Name $App | Select-Object -ExpandProperty Name -First 1
        Write-Output -InputObject $AppPackageName
    }
}

As for the Feature on Demand V2 packages, you can run the following sample script to see what will be removed on the device:

# White list of Features On Demand V2 packages
$WhiteListOnDemand = "NetFX3|DirectX|Tools.DeveloperMode.Core|Language|InternetExplorer|ContactSupport|OneCoreUAP|WindowsMediaPlayer|Hello.Face|Notepad|MSPaint|PowerShell.ISE|ShellComponents"
$OnDemandFeatures = Get-WindowsCapability -Online -LimitAccess -ErrorAction Stop | Where-Object { $_.Name -notmatch $WhiteListOnDemand -and $_.State -like "Installed" } | Select-Object -ExpandProperty Name
Write-Output -InputObject $OnDemandFeatures

Nickolaj Andersen

Chief Technical Architect and Enterprise Mobility MVP since 2016. Nickolaj has been in the IT industry for the past 10 years specializing in Enterprise Mobility and Security, Windows devices and deployments including automation. Awarded as PowerShell Hero in 2015 by the community for his script and tools contributions. Creator of ConfigMgr Prerequisites Tool, ConfigMgr OSD FrontEnd, ConfigMgr WebService to name a few. Frequent speaker at conferences such as Microsoft Ignite, NIC Conference and IT/Dev Connections including nordic user groups.

Add comment

Sponsors

Categories

MSEndpointMgr.com use cookies to ensure that we give you the best experience on our website.