ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SCCM 2012运维实战:从架构到补丁管理的排查与沉淀

SCCM 2012运维实战:从架构到补丁管理的排查与沉淀 简介面向企业IT运维人员的SCCM 2012运维文档以微软System Center Configuration Manager 2012为核心系统梳理了SCCM 2012的部署与功能验证完整路径。文档从环境介绍、部署需求含系统要求、SQL Server版本要求、SCCM控制台安装入手逐步展开客户端发现、资产管理、应用程序分发部署、软件更新补丁管理及远程控制等核心功能测试每个模块都先说明原理再对比类型最后给出配置步骤、计划与报告要点并附带安装账户、路径、模式等注意事项内容接近可操作的运维手册。适合需要搭建SCCM实验环境、完成功能验证或开展日常运维的初中级管理员直接参考也可作为企业内部培训的辅助教材。资源为单个docx文档大小约5.66MB按功能模块划分目录并包含文档修订记录结构清晰便于分章查阅。整体已有713人学习下载对希望快速掌握SCCM 2012实操要点、减少部署与配置踩坑的读者具有较好参考价值。1. SCCM 2012 运维文档到底要写什么很多团队拿到一份《SCCM 2012 运维文档.docx》时的第一反应是找安装步骤和截图但真正跑过两年生产环境的人会告诉你这类文档最值钱的部分从来不是“怎么装”而是“挂了怎么查、发版怎么排、客户端失联怎么救”。SCCM(System Center Configuration Manager) 2012 是微软上一代配置管理平台直到今天仍有大量企业跑在它上面尤其是 Windows Server 2012 和 Win7/Win10 混合存量的场景。它负责客户端软件分发、补丁管理、硬件资产收集和操作系统部署一旦环境里有一万台终端日常运维的繁琐程度会远超想象——集合查询慢、分发卡在“正在下载”、客户端状态报红每一个问题背后都有相对固定的排查路径。这篇博文就是顺着“运维文档”这四个字把 SCCM 2012 日常操作里最常用、最该被沉淀下来的那部分讲清楚面向桌面运维、系统工程师和刚接手存量环境的运维新人。这里讲的是“会做”和“该记什么”不是功能清单。2. SCCM 2012 站点架构与运维对象先理清2.1 先分清主站点、辅助站点和站点系统角色接手一套 SCCM 2012 存量环境第一件事不是打开控制台乱点而是把拓扑图在心中画出来。SCCM 2012 的顶层是站点Site常见部署是单主站点Primary Site管所有客户端分支机构多时会加辅助站点Secondary Site或分发点Distribution Point。主站点是所有管理行为的入口承载数据库、站点数据库服务器、管理点Management Point和软件更新点Software Update Point。这些角色在物理机上可以混装但生产环境建议至少把数据库单独拆出去因为 SQL Server 的 I/O 压力在补丁月会非常明显。运维文档里至少需要一张表记录站点代码Site Code、站点名称、SQL 实例名、数据库名称通常是 CM_XXX、管理点 URL、分发点列表。这些信息看似基础却是后面所有查询命令的前提。SCCM 2012 控制台左上角会显示站点代码但运维命令行工具和 WMI 查询里几乎每条都要用到这个代码。提示主站点是 SCCM 2012 的管理核心。对它做改动前先看有没有次级站点依赖它分发内容。2.1.1 用“层级结构”判断当前架构是否合理层级结构的价值在于网络边界。SCCM 2012 的边界Boundary和边界组Boundary Group决定了客户端去哪个管理点和分发点实际运维中大量“客户端装不上”“下载太慢”的问题都出在边界组配置上。可以打开管理 概述 层次结构配置 边界组确认每个边界组内是否关联了站点系统和分发点。这里有一个常见误解边界组不是安全边界它只负责“定位最近的服务器”不负责身份验证和访问控制。写运维文档时应该把边界组的配置前后逻辑写清楚而不是抄一遍界面截图。比如某分支机构有独立分发点就需要在该分发点所属边界组里勾选“允许此分发点上的内容分发优先”否则客户端仍可能从总部拉包。2.2 运维文档里要沉淀的三大核心对象集合、任务序列、部署集合Collection)是 SCCM 2012 里最常用的“分组工具”本质上是一组基于 WQL 查询或直接成员关系的客户端集合。SCCM 2012 内置了很多集合如“所有 Windows 7 Server”“所有 Windows Server 2012”但生产环境必须建立自己的业务集合比如“财务部 - Windows 10”“测试环境 - Server”。集合的查询方式和查询效率直接决定软件部署的覆盖范围。任务序列Task Sequence则用于操作系统部署和复杂的软件安装流程。日常运维里任务序列用的多的是“带状态迁移的 Windows 部署”和“自定义软件安装”。运维文档中要记录的核心是任务序列 ID、依赖的包和驱动、是否勾选“从分发点下载内容”。这三个参数出错轻则部署失败重则整批设备系统重装。部署Deployment是“集合 软件或任务序列 时间 交互方式”的完整组合。部署目的分“必需”和“可用”必需部署会按计划强制执行可用部署则把软件放到软件中心让用户自选。运维层面最关心的是部署 ID 和部署状态这是后文排错的基础。2.3 客户端与站点之间的通信基线SCCM 2012 客户端与站点通信依赖两个关键点管理点和分发点。客户端通过管理点获取策略从分发点下载内容。无论客户端是域内还是域外通信都必须能到达管理点的 80/443 端口和分发点的 80/443 端口。写运维文档时要画一张端口和协议表这是网络组和桌面运维组协作时的交接语言。端口协议用途默认值80HTTP客户端到管理点/分发点启用443HTTPS客户端到管理点如启用 HTTPS按需启用8530/8531HTTP/HTTPS软件更新点到 WSUS视配置而定1433TCP主站点到 SQL Server常见配置SCCM 2012 客户端在域内会默认使用 Kerberos 身份验证域外则要用证书。运维里最头疼的“客户端显示未管理”多半是管理点 URL 不对或边界组没把客户端所在的 IP 段包含进去。2.3.1 客户端请求安装的三种常见方式SCCM 2012 提供客户端推送安装Client Push Installation、组策略安装、手动安装ccmsetup.exe三种方式。运维文档中我一般建议把组策略安装写成基线方式因为它天生适合域环境批量部署。组策略安装需要把 SCCM 安装目录下的客户端文件client 目录含 ccmsetup.exe复制到一个共享目录然后在组策略的软件安装里分发给计算机。命令行参数里最核心的是 SMSSITECODE 和 FSP。ccmsetup.exe /mp:MP01.contoso.com /logon SMSSITECODES01 FSPSMS01.contoso.com上面的命令中/mp指定客户端要联系的管理点SMSSITECODE是站点代码FSP是回退状态点Fallback Status Point用于接收客户端安装上报。注意/logon参数表示仅当安装前未能找到现有客户端时才安装避免重复重装。实际批量下发时建议把 ccmsetup.exe 放到\\server\share\sccmclient再通过组策略将该共享下的 Windows Installer 程序部署给计算机或者用 startup 脚本执行上面的命令行。常见坑是 SMSSITECODE 写错导致客户端找到了管理点却加入不了正确站点。3. 用 SCCM 2012 做应用和软件分发的落地操作3.1 应用程序模型与包/程序的差别SCCM 2012 引进了应用程序模型它比传统的包/程序Package/Program具备更强的部署逻辑。应用程序由“部署类型”和“检测规则”组成客户端在安装前和执行后分别通过检测规则判断是否已安装、是否安装成功。这在软件分发里是革命性的变化运维人员不用再靠“脚本退出码”猜测是否装好。具体到操作制作一个应用分发的步骤是软件库 应用程序 创建应用程序 自动从安装文件提取信息。如果安装包是 msi/exe 混用我通常手动创建部署类型手动指定检测规则。比如用注册表检测可以用以下 WQL 查询select * from Win32_Product where Name like %7-Zip%但要提醒Win32_Product 查询很慢还容易触发 WMI 配置变更生产环境我一般用注册表或文件版本来做检测规则。3.1.1 部署类型和检测规则的三个必写字段一个部署类型至少要明确安装命令、卸载命令、检测规则。持续的运维经验是卸载命令往往被人忽视结果版本升级时旧版卸载不干净导致新版安装失败。7-Zip 的部署类型安装命令是7z2201-x64.exe /S卸载命令是msiexec /x {23170F69-40C1-2702-2201-000001000001}检测规则检查文件版本或注册表HKLM\Software\7-Zip的版本号。部署类型里还要注意“安装行为”是“为系统安装”还是“为用户安装”。SCCM 2012 默认以 SYSTEM 身份安装需要用户交互的程序——例如需要输入序列号的软件——建议放到“用户为主”部署类型或使用任务序列包一层。还有一个高频参数是“部署类型中的最大允许运行时间”默认 120 分钟长时间运行的安装包要按需调大否则客户端会报告部署超时。3.2 分发软件包到分发点的完整命令行流程控制台图形界面点击分发到分发点的操作用 PowerShell 也可以完成特别是在批量操作和文档化时要方便得多。SCCM 2012 自带 PowerShell 模块可以用 ConfigurationManager 模块加载站点连接。Import-Module C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1 Set-Location S01: $Application Get-CMApplication -Name 7-Zip 22.01 $DistributionPoints DP01,DP02 Start-CMContentDistribution -Application $Application -DistributionPointName $DistributionPoints这段代码分三段先加载模块并进入站点驱动器 S01:然后按名称拿到应用程序对象最后把内容分发到两个分发点。注意Set-Location S01:中的 S01 必须换成自己的站点代码否则会提示找不到该驱动器。Start-CMContentDistribution会把应用内容包提交到分发点任务该命令不含“分发内容后验证”功能验证要单独通过监视 分发状态 内容状态来看。3.2.1 分发状态的查看和验证方法打开控制台进入监视 分发状态 内容状态可以看到每个包的“已提交”“已安装”“失败”状态。如果状态卡在“正在分发”常见原因是分发点上的 SMS_DP_SMSPKG 服务未运行或磁盘空间不足。可以在分发点服务器上执行Get-Service -Name SMS_DP_SMSPKG若服务未运行先启动服务再打开分发点上的C:\Program Files\Microsoft Configuration Manager\Logs\distmgr.log查看报错。这个日志会详细记录内容包复制的每一步特别留意“failed to copy”或“access denied”之类的关键词。很多时候问题出在 SCCM 管理服务器到分发点之间的共享权限或防火墙 445 端口被拦不一定在 SCCM 本身。3.3 软件分发的状态码与常见异常排查3.3.1 部署状态码和客户端日志的对应关系SCCM 2012 控制台里“部署”视图显示的是状态汇总实际定位问题要看客户端日志。客户端日志都在C:\Windows\CCM\Logs目录。运维笔记里最该记录的是这几个日志文件和它们的对应场景日志文件对应场景AppDiscovery.log应用检测是否识别到了已安装软件AppEnforce.log应用强制执行安装/卸载的完整过程AppIntentEval.log应用的部署策略评估结果CAS.log内容访问客户端连接分发点拉包的过程DataTransferService.log后台传输服务查看下载进度和断点续传状态PolicyAgent.log策略获取是否正常当发现某个应用部署状态是“失败”最快的定位方式是先看 AppEnforce.log里面有安装命令的启动参数、退出码、重定向输出。比如退出码 1603 通常代表安装过程中发生致命错误轻则缺少权限重则 MSI 本身问题。3.3.2 客户端“策略没下来”的排查三步排障里最常见的现象是软件部署已创建客户端收不到控制台里状态“未知”。这类问题按以下三步排查第一检查客户端是否正常分配到了站点。在客户端上打开配置管理器属性控制面板里确认“站点”显示的是 SCCM 站点代码如果显示为未知说明客户端没注册到管理点。第二确认客户端上次策略请求时间。运行gpresult /r意义不大直接看控制台“资产和符合性”里的客户端状态或使用客户端上的 “操作” 标签页手动触发“计算机策略检索与评估周期”。命令行方式是用 wmic 触发wmiconfig /config /pollWMIC 是 SCCM 客户端内置的本地策略轮询命令/config /poll用于手动触发系统配置管理器中的策略刷新。执行后查看 PolicyAgent.log 最新几行看是否有RequestPolicy的动作。第三检查客户端时钟是否准确。SCCM 对 Kerberos 时间偏移敏感超过 5 分钟就会导致策略请求失败。这属于“最小但最坑”的运维点补丁月排查时最先看时间。4. SCCM 2012 补丁管理与客户端健康4.1 软件更新点SUP的日常检查项SCCM 2012 的补丁管理依赖 WSUS软件更新点安装后会在 WSUS 里建立上游同步源。日常运维要先确认 WSUS 同步是否成功。控制台路径管理 概述 站点配置 站点 站点名称 配置站点组件 软件更新点。不好用命令行直接看但可以看 WSUS 控制台里的同步历史。补丁管理在 SCCM 2012 里分为三步同步补丁元数据、创建更新组和自动部署规则ADR、部署到目标集合。运维文档重点记录第三步里的参数尤其是“部署计划”和“维护窗口”。维护窗口在 SCCM 2012 里通过“维护窗口”选项卡配置它定义了软件更新安装的时间段——在中国企业里通常设在周五晚到周日凌晨。注意维护窗口只影响部署的“必需”更新安装和任务序列的强制执行不影响“可用”软件的安装。运维若发现补丁没在窗口内安装先确认部署目的是否为“必需”。4.1.1 ADR 规则中容易被忽略的三个选项ADR自动部署规则是 SCCM 2012 补丁自动化最重要的机制它能定期自动下载补丁、创建更新组并按计划部署。使用 ADR 时三个容易被忽略的选项第一“下载更新文件的路径”必须指向一个内容源共享且该共享要对分发点可见。路径写错会在软件更新服务日志里报“无法访问下载文件夹”。第二“语言”选择不要全勾。SCCM 2012 里默认会下载所有选中语言如英语、简体中文、日语但很多环境其实只需要简体中文和英语。多勾选语言不仅占用分发点空间还会拖慢同步速度。第三部署计划的“相对于部署的可用时间”要确认时区。跨时区企业里部署时间以站点服务器时区为准客户端按本地时间执行排障时看到“报错时间对不上”多半是时区错位。4.2 用 SQL 查询客户端补丁合规状态补丁部署完成后最受关注的是“合规率”。SCCM 2012 控制台自带的报表里有一张“特定计算机的合规性”但针对性不强。真正好用的是直接连到 SCCM 数据库查视图比如v_R_System是所有系统信息视图v_GS_QUICK_FIX_HISTORY是已安装补丁的历史记录。查询某台机器是否安装了 KB4566425可以这样写SELECT DISTINCT SYS.Name0, QFH.HotFixID0, QFH.InstalledOn0 FROM v_R_System SYS LEFT JOIN v_GS_QUICK_FIX_HISTORY QFH ON SYS.ResourceID QFH.ResourceID WHERE SYS.Name0 CLIENT01 AND QFH.HotFixID0 KB4566425这条 SQL 先用 Name0 匹配机器名再按 HotFixID0 过滤目标补丁。注意v_GS_QUICK_FIX_HISTORY的补丁列表来自 Windows 更新历史不是 SCCM 部署历史。如果补丁已被系统安装但 SCCM 合规显示“未知”说明 SCCM 的硬件清单还没收集到最新数据可以触发该客户端的硬件清单周期。4.2.1 客户端清单不更新的常见处理客户端硬件清单收集是 SCCM 的基础数据来源默认周期是 7 天。但补丁合规实时性要求高时等 7 天不现实。运维可以在客户端上手动触发硬件清单周期WMIC /namespace:\\root\CCM path SMS_Client CALL TriggerSchedule {00000000-0000-0000-0000-000000000001}上面开头这段 SID 是人类可读的“硬件清单”计划{00000000-0000-0000-0000-000000000001}的具体值可以通过Get-CimInstance -Namespace root\ccm -ClassName SMS_Client的 TriggerSchedule 方法传入但手工记住这个 GUID 不现实。实践里更常用的是一条 PowerShell 命令直接调用客户端 API 触发$Client New-Object -ComObject Microsoft.SMS.Client $Client.TriggerSchedule({00000000-0000-0000-0000-000000000001})上述代码中Microsoft.SMS.Client是 SCCM 客户端 COM 组件TriggerSchedule参数是计划 ID。硬件清单计划 ID 在 SDK 文档里有固定值每台机器都一致。触发后等待 5-10 分钟再到数据库查询 QFH 视图基本就能看到最新补丁。4.3 补丁下载失败时看 SUP 和 DTS 日志软件更新下载失败先区分是“WSUS 元数据缺失”还是“内容下载失败”。元数据缺失时控制台里更新组显示“仅元数据”表示 SCCM 没有从 WSUS 同步到更新文件信息。这种情况重新运行同步即可但要注意 WSUS 服务器上的“上游服务器”是否可达以及端口 8530 是否被防火墙拦截。内容下载失败则常见于分发点上的安装文件不完整。客户端日志DataTransferService.log会记录下载过程搜索 “Failed to download” 或 “Out of memory”。另外一个隐蔽原因分发点磁盘格式为 FAT32单个补丁文件超过 4GB会导致写入失败。SCCM 2012 对补丁分发包没有强制的 NTFS 要求但生产环境统一用 NTFS 是基本守则。5. SCCM 2012 运维文档中的报表、备份与客户端修复技巧5.1 自定义一张“客户端健康度”SQL 报表控制台自带报表能回答“有多少客户端是活跃的”但要回答“哪些客户端已经超过 30 天没来上过线”就需要自定义查询。SCCM 2012 的报表基于 SQL Server Reporting Services可以在控制台的“监视 报表”里新建基于 SQL 语句的报表模型。常用查询是筛选“最近一次策略请求时间”在 30 天前的客户端SELECT SYS.Netbios_Name0, SYS.Operating_System_Name_and0, CS.Client_State0, CS.LastPolicyRequestTime0 FROM v_R_System SYS LEFT JOIN v_CH_ClientSummary CS ON SYS.ResourceID CS.ResourceID WHERE CS.LastPolicyRequestTime0 DATEADD(day, -30, GETDATE()) AND SYS.Obsolete0 0这是一个典型反范式查询v_CH_ClientSummary视图存放客户端状态摘要LastPolicyRequestTime0是最后策略请求时间Obsolete0 0表示该设备没有从 SCCM 数据库中过期移除。报表的价值在于把“失效客户端”变成一张可分发下去的清单让桌面运维按名单逐台处理。还能结合v_GS_WORKSTATION_STATUS的 LastHWScan 字段做双条件验证防止误判。5.2 使用 PowerShell 批量检查客户端版本SCCM 2012 客户端自身也有版本迭代补丁月往往伴随着客户端热修复。批量检查客户端版本一种高效方式是通过 WMI 远程查询$Computers Get-Content -Path C:\list\clients.txt foreach ($Computer in $Computers) { try { $ClientVersion Get-WmiObject -Class SMS_Client -Namespace root\ccm -ComputerName $Computer -ErrorAction Stop [PSCustomObject]{ Computer $Computer Version $ClientVersion.ClientVersion Status OK } } catch { [PSCustomObject]{ Computer $Computer Version $null Status Unreachable } } }这个脚本直接读取客户端本地 WMI 命名空间root\ccm里的 SMS_Client 类获取客户端程序版本。注意 SCCM 客户端的 WMI 操作默认要求目标机器防火墙允许 Windows Management Instrumentation同时当前账号要有目标机器的管理员权限。如果脚本对几十台机器执行超时先检查目标机器上的 Windows 防火墙是否启用了“文件和打印机共享”例外。5.3 备份与恢复SCCM 2012 运维文档必收尾的一节SCCM 2012 自带的备份功能在“备份维护任务”中默认备份站点服务器和数据库。实际环境里我更推荐按两层做第一层用 SQL Server 维护计划备份 CM_XXX 数据库备份文件保留 7 天第二层在站点服务器上手动备份C:\Program Files\Microsoft Configuration Manager下的inboxes和cdlatest目录。恢复时直接还原 SQL 数据库再恢复站点文件SCCM 启动后能较快回到正常状态。SCCM 2012 的恢复有一个长年不变的检查点恢复出来的服务器的主机名必须和原服务器一致否则 SQL 服务登录名和站点系统映射都会出错。这篇文章不是恢复手册但我建议运维文档里用一个章节专门写明每月做一次恢复演练记录恢复耗时和备份文件大小。真正的灾备不是有一份备份而是验证过可恢复。客户端修复主要有两条路。一是使用ccmrepair.exe它位于 CCM 客户端安装目录里可以重置客户端而不影响已注册的 GUID。用法是ccmrepair.exe后重启客户端服务。二是彻底重装卸载时用ccmsetup.exe /uninstall然后删除C:\Windows\CCM、C:\Windows\CCMSetup和注册表中HKLM\Software\Microsoft\CCM再重新安装。重装客户端最常见的副作用是机器 GUID 变化导致历史资产记录丢失所以能先导出客户端 GUID 再操作是稳妥方法。本文还有配套的精品资源点击获取
返回列表