SCCM查询问题:如何识别安装用户级Zoom的终端设备?
解决SCCM查询用户本地安装Zoom的问题
错误原因
你的查询报错是因为WQL不支持%UserProfile%这类环境变量,而且SMS_G_System_SoftwareFile中存储的是客户端上实际存在的具体文件路径(比如C:\Users\Alice\AppData\Roaming\Zoom),不是带有变量的路径模板。直接用带变量的路径匹配会导致语法无效。
可行解决方案
方案1:修改WQL查询,模糊匹配路径后缀
利用LIKE操作符匹配路径的固定后半段,忽略前面的用户名部分。注意WQL中反斜杠需要用双反斜杠转义:
SELECT SMS_R_SYSTEM.ResourceID, SMS_R_SYSTEM.ResourceType, SMS_R_SYSTEM.Name, SMS_R_SYSTEM.SMSUniqueIdentifier, SMS_R_SYSTEM.ResourceDomainORWorkgroup, SMS_R_SYSTEM.Client FROM SMS_R_System INNER JOIN SMS_G_System_SoftwareFile ON SMS_G_System_SoftwareFile.ResourceID = SMS_R_System.ResourceId WHERE SMS_G_System_SoftwareFile.FileName = "Zoom.exe" AND SMS_G_System_SoftwareFile.FilePath LIKE "%\\AppData\\Roaming\\Zoom"
这个查询会匹配所有用户目录下AppData\Roaming\Zoom路径中的Zoom.exe。
方案2:扩展硬件Inventory,收集用户级Zoom路径
默认情况下,SCCM的硬件Inventory可能不会全量收集每个用户的AppData目录文件。你可以自定义Inventory规则来确保捕获这些路径:
- 在SCCM控制台中,进入Administration > Client Settings > Default Client Settings(或自定义客户端设置)
- 编辑Hardware Inventory,点击Set Classes
- 点击Add,选择Connect,连接到一台有Zoom本地安装的客户端机器
- 找到
SMS_G_System_SoftwareFile类,添加筛选规则:FilePath LIKE "%AppData\Roaming\Zoom",确保只收集目标路径 - 重新部署客户端设置,等待Inventory同步后,再用方案1的查询即可准确获取结果
方案3:用PowerShell脚本检测并上报结果
如果上述方法仍有遗漏,可以在客户端运行PowerShell脚本检测所有用户的Zoom安装,将结果作为自定义属性上报到SCCM:
# 检测所有用户目录下的Zoom.exe $zoomPaths = Get-ChildItem -Path "C:\Users\*\AppData\Roaming\Zoom\Zoom.exe" -ErrorAction SilentlyContinue # 如果存在,设置自定义WMI属性(需提前在SCCM中定义类) if ($zoomPaths) { $namespace = "root\cimv2\sms" $className = "Custom_ZoomInstallation" # 假设已创建该自定义类,包含HasZoom属性 $instance = Get-WmiObject -Namespace $namespace -Class $className -ErrorAction SilentlyContinue if (!$instance) { $instance = ([wmiclass]"\\.\$namespace`:$className").CreateInstance() } $instance.HasZoom = $true $instance.Put() }
将脚本作为SCCM基线或包部署到客户端,之后就可以通过查询自定义类来筛选有Zoom的设备。
后续更新部署
找到目标设备后,可以通过以下方式推送Zoom最新版本:
- 创建SCCM应用程序,使用Zoom的MSI安装包(支持静默安装参数
/quiet) - 部署时设置检测规则:检查
Zoom.exe的版本号,低于最新版本则安装 - 将部署目标指向之前查询到的设备集合
内容的提问来源于stack exchange,提问作者SierraTango
相关产品推荐
相关产品推荐

