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

优化Windows Server 2016/2019补丁自动安装的SCCM查询语句技术咨询

优化Windows Server 2016/2019补丁自动安装的SCCM查询语句技术咨询

Hey Keith, 我来帮你梳理下这个SCCM查询的优化思路和具体方案!

先明确下你的核心需求:当前你们的SCCM查询是把系统安装时间在4-72小时范围内的Windows Server 2016/2019服务器,加入到「Auto Install Patches Asset Collection」自动打补丁,但部分网络环境差的站点里,服务器可能赶在72小时窗口结束前没法完成补丁安装,你不想直接拉长时间窗口,希望打造一个更智能的查询逻辑,精准覆盖那些确实需要补补丁的机器。

你的当前查询(补全截断部分)

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_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId    
where     
(DATEDIFF(HH, SMS_G_System_OPERATING_SYSTEM.InstallDate, GetDate()) <= 72 
and DATEDIFF(HH, SMS_G_System_OPERATING_SYSTEM.InstallDate, GetDate()) >= 4)
and (SMS_G_System_OPERATING_SYSTEM.Caption like '%Windows Server 2016%' 
or SMS_G_System_OPERATING_SYSTEM.Caption like '%Windows Server 2019%')

当前查询的局限

这个逻辑只依赖系统安装时间窗口,完全没考虑服务器是否已经成功完成补丁部署。网络差的服务器可能因为下载慢、安装超时等原因,在72小时窗口结束时还没完成补丁,但会被自动移出集合,失去后续自动补打的机会。

优化后的智能查询方案

我们可以结合补丁合规状态来调整逻辑:保留原4-72小时的核心窗口,同时给那些刚过72小时但补丁仍不合规的服务器,额外保留在集合里(比如再给24小时缓冲,但只针对确实需要补丁的机器,不会无差别拉长窗口)。

以下是优化后的查询语句:

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_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId
left join SMS_G_System_SOFTWARE_UPDATE_CLIENT_STATE on SMS_G_System_SOFTWARE_UPDATE_CLIENT_STATE.ResourceID = SMS_R_System.ResourceId
where 
(
    -- 原核心窗口:安装后4-72小时内的服务器
    (DATEDIFF(HH, SMS_G_System_OPERATING_SYSTEM.InstallDate, GetDate()) between 4 and 72)
    OR
    -- 补充逻辑:安装后72-96小时内,但补丁状态为不合规的服务器
    (
        DATEDIFF(HH, SMS_G_System_OPERATING_SYSTEM.InstallDate, GetDate()) between 73 and 96
        and SMS_G_System_SOFTWARE_UPDATE_CLIENT_STATE.ComplianceState = 0 -- 0表示不合规
    )
)
and (SMS_G_System_OPERATING_SYSTEM.Caption like '%Windows Server 2016%' or SMS_G_System_OPERATING_SYSTEM.Caption like '%Windows Server 2019%')
and SMS_R_System.Client = 1 -- 确保是已安装SCCM客户端的机器

优化点说明

  1. 加入补丁合规状态判断:通过SMS_G_System_SOFTWARE_UPDATE_CLIENT_STATE视图获取服务器的补丁合规情况,ComplianceState = 0代表机器存在未安装的必需补丁。
  2. 精准缓冲窗口:只给刚过72小时但确实没完成补丁的机器额外24小时缓冲,不会把所有过了72小时的机器都加进来,避免集合冗余。
  3. 增加客户端验证:通过SMS_R_System.Client = 1过滤掉未安装SCCM客户端的机器,确保集合里的机器都是能接收补丁部署的。

额外建议

  • 可以结合SMS_G_System_CLIENT视图里的LastActiveTime,判断机器最近是否在线,避免把长期离线的机器加入集合:DATEDIFF(HH, SMS_G_System_CLIENT.LastActiveTime, GetDate()) <= 24
  • 如果你需要更细致的补丁状态,也可以关联SMS_G_System_PATCH_STATUS视图,针对特定类型的补丁(比如安全更新)做判断。

备注:内容来源于stack exchange,提问作者Keith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:34:40