There are many good tools out there for putting OpsMgr agents into Maintenance Mode. However occasionally it can seem like getting the OpsMgr Agent out of maintenance mode can be an issue. There are several reasons for this:
#1 When maintenance mode is complete there can be a delay of up to 5 minutes before the agent is taken out of maintenance mode in the console. Give it time, close the console (set /clearcache on your console) and re-open it.
#2 When an OpsMgr Agent is put into maintenance mode for a set period of time, the data is stored in the “MaintenanceMode” Table in the Operations Manager Database. Every 5 minutes a stored procedure called “dbo.p_ScheduledJobsEveryFiveMinutes” runs which calls “dbo.p_MaintenanceModeJob” SP to take OpsMgr Agents out of Maintenance Mode. If stored procedures are failing on your SQL DB, then the Agents will never come out of Maintenance Mode.
#3 What if an Agent isn’t alerting, and you’ve taken it out of Maintenance Mode? Check to see if the Agent is stuck in Maintenance Mode in the DB. Run the following SQL Query against your Operations Manager DB -
select FullName from basemanagedentity where basemanagedentityid in (select basemanagedentityid from maintenancemode where isinmaintenancemode=1)
The results should be similar to “Microsoft.Windows.Computer.ComputerName.DomainName.com” for anything still in Maintenance Mode.
#4 In the System Center Internal Library Management Pack there is a Rule called (oddly enough) “Maintenance Mode”. This Rule is responsible for updating Maintenance Mode data (see #2) Overrides applied to this rule are a bad idea. Don’t disable this rule either.
There are many good tools out there for putting OpsMgr agents into Maintenance Mode.  However