You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过PowerShell为所有用户安装Microsoft Store应用?

解决Add-AppxPackage仅单个用户生效,实现全局安装Microsoft Store应用

我来帮你搞定这个问题!你遇到的情况非常普遍——Add-AppxPackage本质上是给当前执行命令的用户注册应用,所以只能单个用户使用。要让所有现有用户(包括未来新建的用户)都能访问Whiteboard,得用系统级的预配方式,下面是两种实用方案:

方案一:用DISM预配应用(推荐,覆盖所有用户)

这种方式会把应用预配到系统镜像里,所有用户登录后都会自动拥有该应用,是最彻底的全局安装方案:

  1. 以管理员身份打开PowerShell:右键开始菜单,选择「Windows PowerShell(管理员)」(或Windows终端管理员)。
  2. 确认系统架构与安装包匹配:执行以下命令查看系统架构,确保whiteboard.appx和系统架构一致(x64/x86/ARM):
    Get-ComputerInfo | Select-Object OsArchitecture
    
  3. 执行预配命令
    Dism /Online /Add-ProvisionedAppxPackage /PackagePath:C:\Temp\whiteboard.appx /SkipLicense
    
    参数说明:
    • /Online:针对当前运行的系统进行操作
    • /Add-ProvisionedAppxPackage:将应用预配到系统,所有用户均可使用
    • /SkipLicense:跳过许可证检查(Store应用的许可证通常内置在安装包中)
  4. 为现有用户刷新应用注册
    预配完成后,已存在的用户可能需要手动刷新才能看到应用,执行以下命令:
    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

火山引擎 最新活动