Supprimer les applications Windows 10 présentes sur un poste de travail n'est pas toujours des plus simple, étant donné qu'elles sont installées d'une part dans un magasin logiciel local, puis dans l'espace utilisateur.
Sans compter certaines (fournies avec Windows) qui, bien que visibles dans "Applications et fonctionnalités", ne peuvent être désinstallées depuis ce panneau de configuration...
Le script ci-dessous a pour objet de répondre au besoin de désinstaller ces applications intégrées.
La liste des noms d'applications pouvant être désinstallées par cette méthode est obtenue par la commande PowerShell (à exécuter avec les privilèges d'administrateur) :
(Get-ProvisionedAppxPackage -Online).DisplayName
Il n'y a pas de moyen simple en PowerShell d'obtenir la correspondance entre le nom de l'application obtenu par la commande précédente et le nom affiché dans "Applications et fonctionnalités", ceux-ci étant affichés dans la langue de l'utilisateur (et accessoirement parce qu'il y a un certain manque de cohérence dans les données fournies dans les fichiers 'manifest' des applications). Une liste est disponible ici : https://docs.microsoft.com/en-us/windows/application-management/apps-in-windows-10. Les applications supprimables par le script sont celles de la liste "Provisioned Windows Apps".
Le script doit être exécuté avec un compte disposant des droits d'administration locale.
Une fois désinstallées, à partir de Windows 1703, les applications ne sont pas réinstallées lors d'une mise à niveau vers une version plus récente du système.
Elles ne peuvent être réinstallées que depuis le Microsoft Store.
function Remove-WindowsApps { <# .SYNOPSIS Remove Windows Apps based on a list .DESCRIPTION Fully remove a list of Windows Apps, for new users or existing users profiles .PARAMETER AppName Name of application to remove, or list of application names to remove .EXAMPLE Remove-WindowsApps -AppName Microsoft.Getstarted .EXAMPLE Remove-WindowsApps -AppName @("Microsoft.Getstarted","Microsoft.People") #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [string[]]$AppName ) Foreach ($app in $AppName) { # remove from provisionned application list try { $winApp = Get-ProvisionedAppxPackage -Online | Where-Object {$_.DisplayName -eq $app} if ($null -ne $winApp) { Remove-ProvisionedAppxPackage -Online -PackageName $winApp.PackageName -ErrorAction Stop | Out-Null Write-Host "$app - Windows Provisioned Application removed" } else { Write-Host "$app - not found" } } catch { $err = $_.Exception.Message Write-Host "Error while removing '$app' Windows Provisioned Application" Write-Host $err } # remove package for users already connected to the computer try { $winPkg = Get-AppxPackage -AllUsers $app if ($null -ne $winPkg) { Remove-AppxPackage -Package $winPkg -AllUsers -ErrorAction Stop | Out-Null Write-Host "$app - Windows Application removed" } else { Write-Host "$app - Appx Package not found" } } catch { $err = $_.Exception.Message Write-Host "Error while removing '$app' Windows Application" Write-Host $err } } }