如果你看了前面的文章,就会了解SCOM2007是按照对象来设置maintain模式的,而如果要把一台server进入maintain模式,应该怎么做呢,答案是把与server相关的三个对象设置到maintain模式,他们分别是:computer,health service和health service watcher,下面的代码说明了这个问题:
MonitoringObject[] monObjects = new MonitoringObject[3];
ManagementGroupAdministration administration = mg.GetAdministration();
AgentManagedComputerCriteria criteria = new AgentManagedComputerCriteria("Name = '" + serverName + "'");
ReadOnlyCollection
MonitoringObject monitoringObject = mg.GetMonitoringObject(agentManagedComputers[0].Id);
MonitoringObject hostedHealthService = agentManagedComputers[0].HostedHealthService;
monObjects[0] = monitoringObject;
monObjects[1] = hostedHealthService;
String query = "DisplayName = 'Health Service Watcher'";
MonitoringClassCriteria classCriteria = new MonitoringClassCriteria(query);
ReadOnlyCollection
List
foreach (MonitoringClass monClass in monClasses)
listObjects.AddRange(mg.GetMonitoringObjects(monClass));
foreach (MonitoringObject monObject in listObjects)
if (monObject.DisplayName.ToUpper() == serverName.ToUpper())
monObjects[2] = monObject;
foreach (MonitoringObject monObject in monObjects)
monObject.ScheduleMaintenanceMode(DateTime.Now.ToUniversalTime(), Convert.ToDateTime(endTime).ToUniversalTime(), GetReason(reason), comment);
这样agent就被设置到maintain模式了。但是并没有把host在这台服务器上的IIS或SQL服务也设置到maintain模式,如果想把这台server下所有的服务也设置到maintain,应该这样用
monObject.ScheduleMaintenanceMode(DateTime.Now.ToUniversalTime(), Convert.ToDateTime(endTime).ToUniversalTime(), GetReason(reason), comment, TraversalDepth.Recursive);
多了一个叫做TraversalDepth的参数,这个参数有两个值,分别是:OneLevel和Recursive,如果要把对象下的所有子对象都设置maintain,应该使用TraversalDepth.Recursive。
说了这么多,应该提醒大家的是, SCOM2007已经提供了面向对象的监控,我们就应该用好这个特性,做好面向服务的监控。