在 SCCM 中,对于包部署,有一个选项可以使分配成为强制性的,并且计划在注销时进行,还有仅在没有用户登录时部署包的选项。
我想以同样的方式部署软件更新。我没有看到设置,所以我假设必须使用一些黑客解决方法,我想知道是否有人这样做过、正在这样做,或者知道我可以做些什么来实现这一点。我非常精通 powershell、sccm 和 c#,所以任何类似的东西都很棒。我使用 SCCM 2012 SP1 作为参考。
答案1
在查阅了 SCCM 的 SDK 文档后,我最终决定提供更新但不是强制性的。这将在 root/ccm/clientsdk 命名空间中填充一个名为 CCM_SoftwareUpdate 的 WMI 类,请参阅这里. 一个简单的查询,例如
"SELECT * FROM CCM_SOFTWAREUPDATE WHERE COMPLIANCESTATE=0 AND EVALUATIONSTATE < 2"
将为您提供尚未安装的可用更新。安装更新后,它们最终将从此命名空间中删除,但这需要一些时间。如果由于某种原因您必须停止并重新启动安装更新,则筛选出部分安装的更新会有所帮助。msdn 页面包含有关不同合规性状态和评估状态的更多信息。然后,将该更新数组传递给同一命名空间中 CCM_SoftwareUpdatesManager 类的 InstallUpdates 方法,并且您可以单独监视更新的进度(这就是我选择将更新逐个传递给该方法而不是一次全部传递的原因。就我所见,一次全部传递它们除了将它们排队并逐个安装之外,并没有其他作用)。
我用 C# 写了一个快速而粗糙的 GUI(你可以查看它这里),我在组策略中将其设置为注销脚本,因此当它运行时,用户无法通过 ctl alt del 退出,也无法按下按钮关闭窗口。这是我能得到的最接近真实的东西(我们可以控制登录背景,因此我让我的应用程序的背景看起来相同以保持一致性)。
可悲的是,由于我们环境中有大量笔记本电脑,我们可能不会采用该解决方案。没有人愿意关闭笔记本电脑并将其带回家,然后不得不等待不确定的时间来安装更新,这将当时仿佛永远。