使用 PowerShell 管理 Appx 包

前言

如果你的应用程序包名、或者文件路径中含有空格,请将空格改为连接符(-)或下划线(_)
执行命令时,请使用 Windows PowerShellPowerShell 和 PowerShell Preview 可能会报错,且需要以管理员身份运行 Windows PowerShell
报错
如果仅有 /Image:<系统盘盘符>:/Online 参数,则代表另一个参数不可用

Add-AppxPackage

当前用户安装应用程序包
语法:

1
Add-AppxPackage <应用程序包路径>

假如我的应用程序包在 C:\Temp(C 盘的 Temp 文件夹下),应用程序名及后缀为 Test1.Msixbundle,则我的命令如下:

1
Add-AppxPackage C:\Temp\Test1.Msixbundle

Add-AppxPackage
Microsoft Store 与 App Installer 安装应用程序包时默认使用该命令

如果该应用程序包需要依赖

可以继续用 Add-AppxPackage <应用程序包路径> 安装依赖
或者使用

1
Add-AppxPackage <应用程序包路径> -DependencyPath <应用程序依赖包路径>

假如我的应用程序包在 C:\Temp(C 盘的 Temp 文件夹下),应用程序名及后缀为 Test1.Msixbundle,依赖包名及后缀为 TestRuntime1.Msixbundle则我的命令如下:

1
Add-AppxPackage C:\Temp\Test1.Msixbundle -DependencyPath C:\Temp\TestRuntime1.Msixbundle

Add-AppxProvisionedPackage

计算机上所有用户安装应用程序包(即使后面新建用户)[2]
语法:

1
Add-AppxProvisionedPackage -Online -FolderPath <应用程序包路径> -SkipLicense

-FolderPath 指向某个文件夹下所有文件,适用于批量安装

1
Add-AppxProvisionedPackage -Online -PackagePath <应用程序包路径> -SkipLicense

-PackagePath 指向某一个应用程序包文件,适用于单个安装

如果你有应用程序包证书,则可以把 -SkipLicense 参数去掉,添加 -LicensePath 参数,如:

1
Add-AppxProvisionedPackage -Online -PackagePath/-FolderPath <应用程序包路径> -LicensePath <证书文件路径>

假如我的应用程序包在 C:\Temp(C 盘的 Temp 文件夹下),应用程序名及后缀为 Test2.Msixbundle,且不需要证书(因为没有),则我的命令如下:

1
Add-AppxProvisionedPackage -Online -PackagePath C:\Temp\Test2.Msixbundle -SkipLicense

Add-AppxProvisionedPackage

Get-AppxPackage

获取当前计算机上已安装的应用程序包(Appx(bundle) 与 Msix(bundle))
语法:

1
Get-AppxPackage

获取当前用户已安装的应用程序包

1
Get-AppxPackage -AllUsers

获取所有用户已安装的应用程序包

1
Get-AppxPackage -Name <应用程序包名> -User <域/计算机名称>\<用户名>

获取指定域下指定用户的指定包,<域/计算机名称><用户名>可替换为 SID

不知道 SID 或计算机名称与用户名可用命令查询

命令如下:

1
whoami /all

输出如下:

PS C:\WINDOWS\system32> whoami /all

用户信息
 —————-

用户名            SID
================= ==============================================
计算机名称\用户名   字符串

假如我的应用程序包名为 Microsoft.NET.Native.Framework.1.3 计算机名称、用户名为 PCName/User(或 SID 为 S-1-1-45-141919810...,则命令如下:

1
Get-AppxPackage -Name Microsoft.NET.Native.Framework.1.3 -User PCName\User

(应用程序包名可先直接 Get-AppxPackage 得到 NamePackageFullNamePackageFamilyName 后再执行命令)

Get-AppxPackage

如果你需要导出为列表,则命令如下

1
Get-AppxPackage >> C:\Temp\List.txt

Get-AppxPackageManifest

获取某应用程序包的详细信息
语法:

1
Get-AppxPackageManifest -Package <应用程序包全名称>

应用程序包全名在 Get-AppxPackage 中可获取,值为 PackageFullName

假如我的应用程序包全名称为 Microsoft.WindowsTerminalPreview_1.18.1462.0_x64__8wekyb3d8bbwe,则命令如下:

1
Get-AppxPackageManifest -Package Microsoft.WindowsTerminalPreview_1.18.1462.0_x64__8wekyb3d8bbwe

Get-AppxPackageManifest

Remove-AppxPackage

移除某个应用程序包
语法:

1
Remove-AppxPackage <应用程序包全名称>

应用程序包全名在 Get-AppxPackage 中可获取,值为 PackageFullName

假如我的应用程序包全名称为 Microsoft.WindowsTerminalPreview_1.18.1462.0_x64__8wekyb3d8bbwe,则命令如下:

1
Remove-AppxPackage Microsoft.WindowsTerminalPreview_1.18.1462.0_x64__8wekyb3d8bbwe

Remove-AppxPackage

使用通配符也可以

使用 Get-AppxPackage 与通配符(*)结合管道符来卸载应用程序包

1
Get-AppxPackage *<应用程序包名>* | Remove-AppxPackage

比如我需要卸载 XboxApp,则命令如下:

1
Get-AppxPackage *XboxApp* | Remove-AppxPackage

如果需要卸载应用程序包,则命令如下

1
Get-AppxPackage * | Remove-AppxPackage

之后就会一片报错,大部分应用程序包都会被卸载

但如果是某些系统级的会无法删除,如 Cortana 等

Remove-AppxProvisionedPackage

计算机上所有用户移除应用程序包的设置(后面新建用户不再安装此应用程序包,已安装此应用程序包的用户不受影响)
语法:(需要先提前执行 Remove-AppxPackage 命令再执行下面命令,否则会报错“Remove-AppxProvisionedPackage : 参数错误。[3]

1
Remove-AppxProvisionedPackage -Path <系统盘盘符>: -PackageName <应用程序包全名称>

假如我的应用程序包全名称为 Microsoft.WindowsTerminalPreview_1.18.1462.0_x64__8wekyb3d8bbwe,则命令如下:

1
Remove-AppxProvisionedPackage -Path C: -PackageName Microsoft.WindowsTerminalPreview_1.18.1462.0_x64__8wekyb3d8bbwe

Remove-AppxProvisionedPackage

(该图例已过时)

参考文献

  1. Microsoft Learn

  2. Microsoft Learn - Remove-AppxProvisionedPackage

  3. Microsoft Learn - Remove-AppxProvisionedPackage