public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel Data) { ManagementPackClassCriteria classCriteria = new ManagementPackClassCriteria("Name = 'Microsoft.Windows.Computer'"); IList <ManagementPackClass> monClasses = mg.EntityTypes.GetClasses(classCriteria); MonitoringObjectCriteria criteria = new MonitoringObjectCriteria(string.Format("Name = '{0}'", Data.DisplayName.ToString()), monClasses[0]); List <MonitoringObject> monObjects = new List <MonitoringObject>(); List <SCOMComputerMaintenanceModel> MaintenanceComputers = new List <SCOMComputerMaintenanceModel>(); //travers trough all classes to get monitoring objects foreach (ManagementPackClass monClass in monClasses) { monObjects.AddRange(mg.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default)); } foreach (MonitoringObject monObject in monObjects) { if (!monObject.InMaintenanceMode) { { //set maintenance properties DateTime startTime = DateTime.UtcNow; DateTime schedEndTime = DateTime.UtcNow.AddMinutes(Data.Minutes); MaintenanceModeReason reason = MaintenanceModeReason.PlannedOther; string comment = Data.comment; monObject.ScheduleMaintenanceMode(startTime, schedEndTime, reason, comment); //Add properties to list SCOMComputerMaintenanceModel maintenanceComputer = new SCOMComputerMaintenanceModel(); maintenanceComputer.DisplayName = monObject.DisplayName; maintenanceComputer.EndTime = schedEndTime; maintenanceComputer.Minutes = Data.Minutes; maintenanceComputer.comment = comment; //add computers to list MaintenanceComputers.Add(maintenanceComputer); } } //If computer already in maintenance. Throw conflict message else { MaintenanceWindow MaintenanceWindow = monObject.GetMaintenanceWindow(); SCOMComputerMaintenanceModel maintenanceComputer = new SCOMComputerMaintenanceModel(); HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.Conflict); message.Content = new StringContent("Computer already in maintenance " + MaintenanceWindow.ScheduledEndTime); throw new HttpResponseException(message); } } //Return list of computers as Json return(Json(MaintenanceComputers)); }
public IHttpActionResult EnableObjectMaintenance(SCOMObjectMaintenanceModel Data) { //Validate input if (!ModelState.IsValid) { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.BadRequest); message.Content = new StringContent("Missing a required parameter?"); throw new HttpResponseException(message); } //create a Guid from the json input var ObjectId = new Guid(Data.id); //get the monitoring object by Guid var monObject = mg.EntityObjects.GetObject <MonitoringObject>(ObjectId, ObjectQueryOptions.Default); List <SCOMMonitoringObjectModel> MonitoringObjects = new List <SCOMMonitoringObjectModel>(); List <SCOMObjectMaintenanceModel> MaintenanceObjects = new List <SCOMObjectMaintenanceModel>(); if (!monObject.InMaintenanceMode) { { //set maintenance properties DateTime startTime = DateTime.UtcNow; DateTime schedEndTime = DateTime.UtcNow.AddMinutes(Data.Minutes); MaintenanceModeReason reason = MaintenanceModeReason.PlannedOther; string comment = Data.comment; monObject.ScheduleMaintenanceMode(startTime, schedEndTime, reason, comment); //Add properties to list SCOMObjectMaintenanceModel maintenanceObject = new SCOMObjectMaintenanceModel(); maintenanceObject.displayName = monObject.DisplayName; maintenanceObject.id = monObject.Id.ToString(); maintenanceObject.EndTime = schedEndTime; maintenanceObject.Minutes = Data.Minutes; maintenanceObject.comment = comment; //add computers to list MaintenanceObjects.Add(maintenanceObject); } } //If object already in maintenance. Throw conflict message else { MaintenanceWindow MaintenanceWindow = monObject.GetMaintenanceWindow(); HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.Conflict); message.Content = new StringContent("Object already in maintenance until" + MaintenanceWindow.ScheduledEndTime); throw new HttpResponseException(message); } //Return list of computers as Json return(Json(MaintenanceObjects)); }
static void Main(string[] args) { ManagementGroup mg = new ManagementGroup("localhost"); Console.WriteLine("Creating a maintenance window..."); string query = "DisplayName = 'SQL 2005 DB Engine'"; ManagementPackClassCriteria criteria = new ManagementPackClassCriteria(query); IList <ManagementPackClass> monClasses = mg.EntityTypes.GetClasses(criteria); List <MonitoringObject> monObjects = new List <MonitoringObject>(); foreach (ManagementPackClass monClass in monClasses) { monObjects.AddRange(mg.EntityObjects.GetObjectReader <MonitoringObject>(monClass, ObjectQueryOptions.Default)); } foreach (MonitoringObject monObject in monObjects) { if (!monObject.InMaintenanceMode) { DateTime startTime = DateTime.UtcNow; DateTime schedEndTime = DateTime.UtcNow.AddHours(1); MaintenanceModeReason reason = MaintenanceModeReason.SecurityIssue; String comment = "Applying Monthly Security Patches."; monObject.ScheduleMaintenanceMode(startTime, schedEndTime, reason, comment); Console.WriteLine(monObject.DisplayName + " set in maintenance mode for an hour."); } else { MaintenanceWindow window = monObject.GetMaintenanceWindow(); DateTime schedEndTime = window.ScheduledEndTime; Console.WriteLine(monObject.DisplayName + " already in maintenance mode until " + schedEndTime.ToShortTimeString() + "."); } } }