You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SCCM 1710用户集合查询问题:编写已安装软件用户组查询

嘿,这个问题我太熟了——SCCM用户集合的查询根类是SMS_R_User,而软件安装状态属于设备端的类(比如SMS_R_System、SMS_G_System_ADD_REMOVE_PROGRAMS),直接在用户集合里硬套设备类的查询肯定会报语法错。下面给你三类集合的正确实现方案,亲测在1710版本可用:

1. [软件名]-已安装 用户集合

核心逻辑

需要同时满足两个条件:用户属于目标AD组,且该用户的关联设备中至少有一台已安装指定软件。这里必须通过用户-设备关联表来桥接用户类和设备类的数据。

查询语句

select SMS_R_User.ResourceID, SMS_R_User.ResourceType, SMS_R_User.Name, SMS_R_User.UniqueUserName, SMS_R_User.WindowsNTDomain
from SMS_R_User
where SMS_R_User.UserGroupName = "DOMAIN\\你的AD组名称"
and exists (
    select 1 from SMS_UserMachineRelationship
    join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_UserMachineRelationship.ResourceID = SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID
    where SMS_UserMachineRelationship.UniqueUserName = SMS_R_User.UniqueUserName
    and SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like "%你的软件名%"
)

细节说明

  • 把DOMAIN\\你的AD组名称替换成实际的AD组完整标识(比如CONTOSO\\Chrome_Users)
  • 如果是64位软件,把SMS_G_System_ADD_REMOVE_PROGRAMS换成SMS_G_System_ADD_REMOVE_PROGRAMS_64
  • 软件名称匹配:如果软件DisplayName带版本号(比如Google Chrome 119.0.6045.105),用like "%Google Chrome%"更灵活;如果要精确匹配,直接用= "软件全名"

2. [软件名]-待安装 用户集合

核心逻辑

用户属于目标AD组,且该用户的所有关联设备都未安装指定软件——也就是排除掉已安装集合里的用户。

查询语句

select SMS_R_User.ResourceID, SMS_R_User.ResourceType, SMS_R_User.Name, SMS_R_User.UniqueUserName, SMS_R_User.WindowsNTDomain
from SMS_R_User
where SMS_R_User.UserGroupName = "DOMAIN\\你的AD组名称"
and not exists (
    select 1 from SMS_UserMachineRelationship
    join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_UserMachineRelationship.ResourceID = SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID
    where SMS_UserMachineRelationship.UniqueUserName = SMS_R_User.UniqueUserName
    and SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like "%你的软件名%"
)

细节说明

  • 和已安装集合的区别仅在于not exists,用来排除已有设备安装软件的用户
  • 如果你的需求是“AD组内用户,不管设备状态都要推送安装”,可以直接用AD组查询(去掉not exists子句),但通常待安装是指需要补装的用户

3. [软件名]-待卸载 用户集合

核心逻辑

用户属于目标AD组,且至少有一台关联设备已安装指定软件——这个逻辑和已安装集合完全一致,因为你需要针对这些用户(及其设备)部署卸载任务。

查询语句

select SMS_R_User.ResourceID, SMS_R_User.ResourceType, SMS_R_User.Name, SMS_R_User.UniqueUserName, SMS_R_User.WindowsNTDomain
from SMS_R_User
where SMS_R_User.UserGroupName = "DOMAIN\\你的AD组名称"
and exists (
    select 1 from SMS_UserMachineRelationship
    join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_UserMachineRelationship.ResourceID = SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID
    where SMS_UserMachineRelationship.UniqueUserName = SMS_R_User.UniqueUserName
    and SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like "%你的软件名%"
)

细节说明

  • 如果需要更精准(比如只针对某台特定设备卸载),可以在子查询里添加设备名称的过滤条件(比如and SMS_R_System.Name = "PC-001",注意要在子查询里加入join SMS_R_System)

额外注意事项

  • 确保SMS_UserMachineRelationship数据是最新的:可以在SCCM控制台的资产和合规性 > 用户 > 用户设备关联里触发同步,或者等待客户端自动上报
  • 权限验证:你的SCCM账号需要有查询SMS_UserMachineRelationship、SMS_G_System_ADD_REMOVE_PROGRAMS类的权限,否则会返回空结果
  • 测试建议:先在SCCM的查询编辑器里测试语句,确认返回的用户符合预期后再创建集合

内容的提问来源于stack exchange,提问作者bertvo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:50:13