如何通过WMI或其他代码触发SCCM用户可用应用安装,无需使用软件中心
SCCM 客户端本地触发用户可用(Available)应用首次安装的解决方案
核心原理
SCCM 客户端默认不会预拉取用户集合靶向、部署目的为Available的应用策略到本地WMI仓库,以此减少客户端和管理点的无效通信开销。只有当Software Center启动时主动触发策略拉取请求,这类应用才会被同步到CCM_Application类中,这也是你之前只能看到已安装过的用户可用应用的原因。
我们只需要通过代码模拟Software Center的策略拉取动作,无需打开Software Center界面,就能完成所有用户可用应用的首次探测,后续即可直接调用CCM_Application的Install方法触发安装。
具体实现步骤(PowerShell 示例)
所有操作需在对应目标用户的上下文下执行,不可使用系统账户运行:
- 触发用户可用应用策略拉取,同步所有可用应用到本地WMI
# 连接SCCM客户端SDK命名空间 $appManager = Get-WmiObject -Namespace root\ccm\ClientSDK -Class CCM_ApplicationManager # 拉取当前登录用户所有可用的应用策略,执行后所有应用会自动同步到CCM_Application类 $availableAppList = $appManager.GetAvailableApplications()
- 触发目标应用安装
# 按应用名称筛选目标应用,可根据需要调整筛选条件(如应用ID) $targetApp = Get-WmiObject -Namespace root\ccm\ClientSDK -Class CCM_Application | Where-Object {$_.Name -eq "替换为你的应用名称"} # 调用安装方法 $targetApp.Install()
如果执行第一步后未查询到目标应用,可先触发一次用户策略同步,等待1-2分钟后再重新拉取可用应用:
# 触发SCCM用户策略同步 Invoke-WmiMethod -Namespace root\ccm -Class SMS_Client -Name TriggerSchedule -ArgumentList "{00000000-0000-0000-0000-000000000027}"
注意事项
- 用户靶向的应用策略和当前登录用户绑定,系统上下文下无法查询到对应用户的可用应用,所有代码必须在目标用户的登录会话中执行
- 若应用部署有用户权限要求,执行安装的用户需满足部署的权限条件,否则调用安装方法会返回权限错误
- 拉取到的应用属性和Software Center中展示的完全一致,后续卸载、重装等操作都可以直接通过
CCM_Application类的对应方法完成,无需再打开Software Center
内容的提问来源于stack exchange,提问作者Abdur Rahman
相关产品推荐
相关产品推荐

