我试图使用这个Powershell script found in the Microsoft Script Repository,但是,对我来说它不能远程工作,并不总是使用Invoke-Command工作,它启动安装然后返回而不等待安装完成.我希望在安装完成后重新启动每个系统,如果没有安装阻止或状态信息阻止,这很难编写脚本.在花了太多时间之后,尝试使CCM_SoftwareUpdate和CCM_SoftwareUpdatesManager WMI类能够满足我的需求,我认为现在是时候问别人如何处理类似情况了.
我的一位朋友说他的公司使用Shavlik解决了这个问题,不幸的是,这不是一个选择.
我们正在使用SCCM 2012,并混合使用2003,2008和2012服务器.
private void InstallUpdates() { ManagementScope sc = new ManagementScope(@"\\.\root\ccm\clientsdk"); ManagementClass c = new ManagementClass(@"CCM_SoftwareUpdatesManager"); ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM CCM_SOFTWAREUPDATE WHERE COMPLIANCESTATE=0 AND EVALUATIONSTATE < 2"); c.Scope = s.Scope = sc; ManagementObjectCollection col = s.Get(); List<ManagementObject> lUpdates = new List<ManagementObject>(); //Install each update individually and display progress int index = 1; //double progress = 5/10; //progressBar1.Value = progress; //this.Enabled = false; foreach (ManagementObject o in col) { System.Management.ManagementBaseObject[] args = { o }; object[] methodArgs = { args }; c.InvokeMethod("InstallUpdates",methodArgs); lblCurrentUpdate.Text = "Now Installing Update " + index + " of " + col.Count; UInt32 evalState = 0; progressBar1.Value = (int)(((index) / (double)col.Count)*100.0); //isCompleted = false; //backgroundWorker1.RunWorkerAsync(o); while (evalState < 7) { try { o.Get(); evalState = (UInt32)o.Properties["EvaluationState"].Value; } catch (Exception ex) { break; } } ++index; } //this.Enabled = true; //Restart Workstation System.Diagnostics.Process.Start("shutdown.exe","-r -t 0 -f"); Application.Exit(); }
简而言之,我使用WMI查询“SELECT * FROM CCM_SOFTWAREUPDATE WHERE COMPLIANCESTATE = 0 AND EVALUATIONSTATE< 2”并将每个更新逐个传递给InstallUpdates方法,因为我希望显示类似于Microsoft的进度的进度.即使您只传递单个更新对象,也必须将数组传递给InstallUpdates方法.你可以根据需要传递整个返回的数组,它会像往常一样排队,然后逐个安装它们. 另外,如何为此集合配置维护窗口,并告知sccm不在维护窗口之外安装更新?当一个更新完成后,如果它已经过了维护窗口,那么它将停止安装更新(理论上对我来说,我从来没有让维护窗口变得奢侈). 如果你是一个gimmiedehcodez有点人,那个代码应该用.NET 4.0编译
using System; using System.Collections.Generic; using System.ComponentModel; using System.Management; using System.Windows.Forms;
有关CCMClientSDK here的更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。