使用 PowerShell 管理 APPX 与 MSIX 包
前言
如果你的应用程序包名、或者文件路径中含有空格,请将空格改为连接符(-)或下划线(_)
执行命令时,请使用 Windows PowerShell
,PowerShell 和 PowerShell Preview 可能会报错,且需要以管理员身份运行 Windows PowerShell
如果仅有 /Image:<系统盘盘符>:
或 /Online
参数,则代表另一个参数不可用
Add-AppxPackage
为当前用户安装应用程序包
若你使用的是 /Online
参数,且进入系统后不联网,则需要使用 /LicensePath
参数来指定许可证,否则可能会无法打开应用程序;如果为 UUP 集成的,可以在 UUP 的 UUPs\Apps 文件夹下找到 License.xml(可能不通用于不同软件间)
语法:
1 | Add-AppxPackage <应用程序包路径> |
假如我的应用程序包在 C:\Temp
(C 盘的 Temp 文件夹下),应用程序名及后缀为 Test1.Msixbundle
,则我的命令如下:
1 | Add-AppxPackage C:\Temp\Test1.Msixbundle |
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]
若你使用的是 /Online
参数,且进入系统后不联网,则需要使用 /LicensePath
参数来指定许可证,否则可能会无法打开应用程序;如果为 UUP 集成的,可以在 UUP 的 UUPs\Apps 文件夹下找到 License.xml(可能不通用于不同软件间)
语法:
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 |
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
得到 Name
,PackageFullName
或 PackageFamilyName
后再执行命令)
如果你需要导出为列表,则命令如下
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 |
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 |
使用通配符也可以
使用 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 |
(该图例已过时)