为何Remove-AppxPackage不支持Get-Help显示的-AllUsers参数及替代方案
可靠删除指定开头的Appx包:
-AllUsers参数失效问题及替代方案 问题场景
多数系统执行以下命令可批量删除所有以指定字符串开头的Appx包:
Get-AppxPackage -all MyApp* | Remove-AppxPackage -AllUsers
但在两台Windows系统中执行时触发报错:
PS C:\Users\Administrator> Get-AppxPackage -all CDI* | Remove-AppxPackage -AllUsers Remove-AppxPackage : A parameter cannot be found that matches parameter name 'AllUsers'. At line:1 char:48 + Get-AppxPackage -all CDI* | Remove-AppxPackage -AllUsers + ~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Remove-AppxPackage], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand
矛盾的帮助信息
执行Get-Help Remove-AppxPackage -Parameter AllUsers时,系统显示该参数存在:
Get-Help Remove-AppxPackage -Parameter AllUsers -AllUsers [<SwitchParameter>] {{Fill AllUsers Description}} Required? false Position? named Default value False Accept pipeline input? False Accept wildcard characters? false
相关版本信息
- 命令版本:
PS C:\Users\Administrator> Get-Command Remove-AppxPackage CommandType Name Version Source ----------- ---- ------- ------ Function Remove-AppxPackage 1.0 Appx
- 操作系统版本:
> [System.Environment]::OSVersion.Version Major Minor Build Revision ----- ----- ----- -------- 10 0 14393 0
- Appx模块版本:
PS > Get-Module -ListAvailable Appx Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 2.0.0.0 Appx {Add-AppxPackage, Get-AppxPackage, Get-AppxPackageManifest...
问题
是否存在路径问题?有无可替代-AllUsers参数效果的方法?
原因分析与替代方案
核心原因
Windows 10 1607(Build 14393)的Remove-AppxPackage命令实际不支持-AllUsers参数——该参数是在Windows 10 1709及后续版本才正式引入的。帮助文档提前更新了参数描述,但对应版本的命令未实现该功能,导致文档与实际行为矛盾。
替代实现方法
要实现删除所有用户的指定Appx包,可通过遍历系统用户SID的方式逐个卸载:
# 获取所有目标Appx包 $targetPackages = Get-AppxPackage -AllUsers CDI* # 遍历每个包,对所有用户执行卸载 foreach ($pkg in $targetPackages) { $pkgFullName = $pkg.PackageFullName # 读取注册表中安装该包的所有用户SID Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\$pkgFullName" | ForEach-Object { $userSid = $_.PSChildName # 针对指定用户SID卸载包 Remove-AppxPackage -Package $pkgFullName -User $userSid } }
验证卸载结果
执行以下命令确认目标包已从所有用户账户中删除:
Get-AppxPackage -AllUsers CDI*
若返回空结果,则说明卸载成功。
内容的提问来源于stack exchange,提问作者Liam Kelly
相关产品推荐
相关产品推荐

