如何通过PowerShell为所有用户安装Microsoft Store应用?
解决Add-AppxPackage仅单个用户生效,实现全局安装Microsoft Store应用
我来帮你搞定这个问题!你遇到的情况非常普遍——Add-AppxPackage本质上是给当前执行命令的用户注册应用,所以只能单个用户使用。要让所有现有用户(包括未来新建的用户)都能访问Whiteboard,得用系统级的预配方式,下面是两种实用方案:
方案一:用DISM预配应用(推荐,覆盖所有用户)
这种方式会把应用预配到系统镜像里,所有用户登录后都会自动拥有该应用,是最彻底的全局安装方案:
- 以管理员身份打开PowerShell:右键开始菜单,选择「Windows PowerShell(管理员)」(或Windows终端管理员)。
- 确认系统架构与安装包匹配:执行以下命令查看系统架构,确保
whiteboard.appx和系统架构一致(x64/x86/ARM):Get-ComputerInfo | Select-Object OsArchitecture - 执行预配命令:
参数说明:Dism /Online /Add-ProvisionedAppxPackage /PackagePath:C:\Temp\whiteboard.appx /SkipLicense/Online:针对当前运行的系统进行操作/Add-ProvisionedAppxPackage:将应用预配到系统,所有用户均可使用/SkipLicense:跳过许可证检查(Store应用的许可证通常内置在安装包中)
- 为现有用户刷新应用注册:
预配完成后,已存在的用户可能需要手动刷新才能看到应用,执行以下命令:Get-AppxPackage -AllUsers | Where-Object {$_.Name -match "Whiteboard"} | ForEach-Object { Add-AppxPackage -Register -DisableDevelopmentMode "$($_.InstallLocation)\AppxManifest.xml" }
方案二:为所有现有用户注册应用(仅覆盖当前用户)
如果只需要让系统中已存在的用户能用,不考虑未来新建的用户,可以用这个脚本批量注册:
# 获取所有本地非系统用户的SID $localUsers = Get-WmiObject Win32_UserProfile | Where-Object { $_.Special -eq $false -and $_.SID -notmatch "S-1-5-18|S-1-5-19|S-1-5-20" } # 遍历每个用户,为其注册应用 foreach ($user in $localUsers) { try { Add-AppxPackage -Path "C:\Temp\whiteboard.appx" -User $user.SID Write-Host "已为用户SID $($user.SID) 注册Whiteboard" } catch { Write-Warning "为用户SID $($user.SID) 注册失败:$($_.Exception.Message)" } } # 为当前执行命令的用户注册(如果之前没安装的话) Add-AppxPackage -Path "C:\Temp\whiteboard.appx"
注意事项
- 所有操作必须在管理员权限下执行,否则会出现权限不足的错误。
- 如果安装失败,检查是否缺少依赖包:有些Store应用需要先安装对应的依赖框架(比如Microsoft.UI.Xaml),可以通过
Get-AppxPackage -AllUsers | Where-Object {$_.IsFramework -eq $true}查看已安装的框架,或者在DISM命令中添加/DependencyPackagePath参数指定依赖包路径。 - 如果之前用
Add-AppxPackage给当前用户安装过,建议先卸载:$package = Get-AppxPackage *Whiteboard* if ($package) { Remove-AppxPackage -Package $package.PackageFullName }
内容的提问来源于stack exchange,提问作者Realcookie




