优化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客户端的机器
优化点说明
- 加入补丁合规状态判断:通过
SMS_G_System_SOFTWARE_UPDATE_CLIENT_STATE视图获取服务器的补丁合规情况,ComplianceState = 0代表机器存在未安装的必需补丁。 - 精准缓冲窗口:只给刚过72小时但确实没完成补丁的机器额外24小时缓冲,不会把所有过了72小时的机器都加进来,避免集合冗余。
- 增加客户端验证:通过
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
相关产品推荐
相关产品推荐

