Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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() + ".");
                }
            }
        }