使用 PowerShell 删除不需要的 Windows 10 应用程序

Windows 10包含许多内置应用程序,从基本应用程序如计算器和天气到更加任务专注的应用程序如邮件和照片不等。虽然这些内置应用程序对大多数情况都是可以的,但在商业环境中,它们可能不合适、冗余或不受支持。这些应用程序往往可能存在安全风险。这就是为什么在这篇文章中,您将学习如何使用PowerShell移除Windows 10应用程序。

问题在于微软并不容易让您卸载其中一些应用程序。使用正常方法卸载时,没有卸载按钮。必须通过PowerShell卸载内置应用程序。

免责声明:不要卸载所有的Windows 10应用程序。其中许多应用程序是Windows 10“体验”所必需的,而其他一些应用程序,如.NET框架,是其他程序所必需的。要挑选要卸载的应用程序。您可以重新安装所有应用程序,但是本文末尾将提供重新安装所有应用程序的PowerShell命令

使用PowerShell查找Windows 10应用程序

实际上,我们将处理两种不同类型的应用程序。

  • AppX包 – 安装在操作系统中的应用程序
  • AppX预配包 – 作为用户配置文件首次设置的一部分安装的应用程序。

第一步是获取已安装的应用程序清单。要做到这一点,请以提升的权限启动PowerShell,并运行命令Get-AppxPackage。这将返回在Windows 10上安装的所有AppX包。

PS C:\> Get-AppxPackage

Name              : Microsoft.NET.Native.Framework.1.6
Publisher         : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture      : X64
ResourceId        :
Version           : 1.6.24903.0
PackageFullName   : Microsoft.NET.Native.Framework.1.6_1.6.24903.0_x64__8wekyb3d8bbwe
InstallLocation   : C:\Program Files\WindowsApps\Microsoft.NET.Native.Framework.1.6_1.6.24903.0_x64__8wekyb3d8bbwe
IsFramework       : True
PackageFamilyName : Microsoft.NET.Native.Framework.1.6_8wekyb3d8bbwe
PublisherId       : 8wekyb3d8bbwe
IsResourcePackage : False
IsBundle          : False
IsDevelopmentMode : False
IsPartiallyStaged : False
SignatureKind     : Store
Status            : Ok
--snip--

所提供的包有稍微不同的命令,也需要Online参数。 Online参数从当前在线操作系统中提取包,而不是从本地目录中的镜像文件中提取。 这将显示关于每个包的所有详细信息。

PS C:\> Get-AppxProvisionedPackage -Online


DisplayName  : Microsoft.3DBuilder
Version      : 16.1.1431.0
Architecture : neutral
ResourceId   : ~
PackageName  : Microsoft.3DBuilder_16.1.1431.0_neutral_~_8wekyb3d8bbwe
Regions      :

DisplayName  : Microsoft.BingWeather
Version      : 4.31.11905.0
Architecture : neutral
ResourceId   : ~
PackageName  : Microsoft.BingWeather_4.31.11905.0_neutral_~_8wekyb3d8bbwe
Regions      :
--snip--

缩小应用列表

这两个命令都会生成相当冗长的列表,而您感兴趣的只是 Appx 包的Name和预配包的DisplayName,如下所示。

Details of Get-AppxPackage listing
Listing for get-appxprovisionedpackage

为了使事情变得更容易,将结果通过Select-Object管道传递,并选择NameDisplayName属性。 这将为您提供一个类似下面的列表。 这个列表更容易处理。

Get-AppxPackage | Select-Object Name
Output of get-appxpackage | select object name

现在您可以看到想要删除哪些 Windows 10 应用。 在这一点上,您需要列出所有想要删除的包的名称。 一种方法是复制并粘贴您感兴趣的要删除的 Windows 10 应用,并以此方式构建列表。 我使用的一个技巧是将结果保存到文本文件中,然后在Visual Studio Code中打开该文件。 例如:

Get-AppxPackage | Select-object name | Out-File apps.txt | code apps.txt

在您的外部编辑器中,开始建立要移除的应用程序数组。

$ProvisionedAppPackageNames = @()

现在您有了列表,可以开始构建 PowerShell 脚本。

使用 PowerShell 删除 Windows 10 应用

你现在应该在编辑器中定义了一个数组,其中包含你想要移除的所有AppX包的名称。我已经提供了一个示例如下。

$ProvisionedAppPackageNames = @(
    "Microsoft.BingFinance"
    "Microsoft.BingNews"
    "Microsoft.BingSports"
    "Microsoft.BingWeather"
    "Microsoft.MicrosoftOfficeHub"
    "Microsoft.Getstarted"
    "microsoft.windowscommunicationsapps" # 邮件、日历
    "Microsoft.Office.OneNote"
    "Microsoft.People"
    "Microsoft.SkypeApp"
    "Microsoft.XboxApp"
    "Microsoft.ZuneMusic"
    "Microsoft.ZuneVideo"
)

有了包含要移除的特定应用程序的数组后,你现在可以设置foreach循环,以便使用Remove-AppXProvisionedPackage cmdlet和Remove-AppXPackage cmdlet卸载每个包。

foreach ($ProvisionedAppName in $ProvisionedAppPackageNames) {
    Get-AppxPackage -Name $ProvisionedAppName -AllUsers | Remove-AppxPackage
    Get-AppXProvisionedPackage -Online | Where-Object DisplayName -EQ $ProvisionedAppName | Remove-AppxProvisionedPackage -Online
}

如果出于任何原因你想要重新安装所有应用程序,你总是可以使用add-AppXPackage cmdlet通过指定应用程序清单 XML 文件来重新注册 Windows 10 应用程序,如下所示。

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

总结

尽管微软并不让卸载 Windows 10 应用程序变得容易,但你可以看到,你始终可以依靠 PowerShell!

Source:
https://adamtheautomator.com/remove-windows-10-apps/