Exchange 2010 Calendar Repair (Part 1)

If you would like to read the next part in this article series please go to Exchange 2010 Calendar Repair (Part 2).


Have you ever missed a meeting because the time was incorrect on your calendar appointment? Or perhaps you have missed a meeting because that appointment was no longer in your calendar? If so, then Exchange 2010 has a new feature that you and your users will find extremely beneficial, namely the Calendar Repair Assistant.

Simply put, the Calendar Repair Assistant has the ability to fix problems with calendar appointments within users’ mailboxes. It can do this for both single calendar items as well as recurring calendar items. In fact, according to Microsoft, the Calendar Repair Assistant can fix attendee’s calendar items that are either missing, have the wrong time or the wrong location. It will also check to see if the organizer’s calendar item is missing, of course. Additionally, the Calendar Repair Assistant also checks for incorrect tracking status between the organizer and attendee’s calendar items, any differences between the attendee lists, and consistency across organizer and attendee recurring meetings. The Calendar Repair Assistant runs on the Mailbox server role and is a part of the Microsoft Exchange Mailbox Assistants service.

With this in mind, let’s take a look at this great new feature of Exchange 2010.

Controlling the Calendar Repair Assistant

Let’s start by having a look at how the operation of the Calendar Repair Assistant can be controlled. The first thing that you need to be aware of is that it is not possible to use the Exchange Management Console to control the Calendar Repair Assistant operation; such configuration needs to be performed using the Exchange Management Shell. Since the Calendar Repair Assistant runs on the Mailbox server role, the Get-MailboxServer cmdlet needs to be run to see the various parameters that are used to control it. You can see the results of running the Get-MailboxServer cmdlet in Figure 1 where the results have been piped into the format-list cmdlet and filtered for any parameters that contain the string ‘calendar’.

Figure 1: Calendar Repair Assistant Configuration Parameters

From Figure 1 it can be seen that there are a total of eight parameters relating to the control of the Calendar Repair Assistant. However, five of these parameters are related to the calendar repair log which will be discussed in part two of this article. That leaves three parameters used to control the actual running of the Calendar Repair Assistant. They are:

  • CalendarRepairSchedule – This parameter controls when the actual Calendar Repair Assistant will run and it can be seen from Figure 1 that by default there is no schedule set, since the output shows a null value via the presence of the curly brackets. Therefore, note that the Calendar Repair Assistant will not run on this mailbox server by default and you will need to take action to configure it to do so. We will dive deeper into this parameter in just a moment.
  • CalendarRepairMissingItemFixDisabled – Setting this parameter to true means that the Calendar Repair Assistant will not fix missing calendar items for mailboxes that are located on the specified server. As you can see from Figure 1, this parameter is set to false by default, meaning that missing calendar items will be fixed by default on the relevant server. To prevent this from happening on the server called EXCH, the following cmdlet could be used:

Set-MailboxServer –Identity EXCH –CalendarRepairMissingItemFixDisabled $true

  • CalendarRepairIntervalEndWindow – You can see from Figure 1 that this parameter has a default value of 30. This equates to 30 days and means that the Calendar Repair Assistant will look up to 30 days into the future to repair calendar items. To determine how many days into the future you should configure the Calendar Repair Assistant to fix calendars, it will be worth taking the time to understand how your users make use of the calendaring environment and how far into the future the typical meeting invites are. To change this value on the server called EXCH to 120 days, for example, the following cmdlet could be used:

Set-MailboxServer –Identity EXCH –CalendarRepairIntervalEndWindow 120

Let’s now look at configuring the CalendarRepairSchedule parameter in detail. The CalendarRepairSchedule parameter has a parameter type of Microsoft.Exchange.Common.ScheduleInterval[] meaning that it has a specific format for the value that is applied. The format required for this parameter is StartDate.Time-EndDate.Time. For example, if you require the Calendar Repair Assistant to run on a Sunday evening between 7pm and 10pm, the parameter value could be set to Sunday.19:00-Sunday.22:00. Therefore, the full cmdlet to set the CalendarRepairSchedule parameter accordingly on the Exchange 2010 server named EXCH would be:

Set-MailboxServer –Identity EXCH –CalendarRepairSchedule Sunday.19:00-Sunday.22:00

You can see the results of running this cmdlet in Figure 2. The Get-MailboxServer cmdlet has then been re-run to confirm that the new settings have been applied.

Figure 2: Setting the Calendar Repair Assistant Schedule

You may note from Figure 2 that although I typed the full day name Sunday into the parameter, the day name has been abbreviated to Sun when reviewed. This gives us the clue that there are different methods by which we can configure the schedule days and times. You effectively have the choice of using the full day name such as Sunday, the three-letter abbreviated day name such as Sun or an integer to represent each day name. The integers 0 to 6 are used, with 0 representing Sunday, 1 representing Monday and so on up to 6 representing Saturday. Therefore, I could have specified my CalendarRepairSchedule value in the cmdlet example above to be 0.19:00-0.22:00.

For the time portion of the parameter, I chose to use the 24-hour clock format since I prefer to use this format to avoid any possible confusion. However, Microsoft states that it is possible to use normal 12-hour clock format by specifying AM or PM after the required time. However, to do this, you must ensure that the parameter value is included in quotes. For example, I could have specified my CalendarRepairSchedule value to be in the format of “Sunday.7:00 PM-Sunday.10:00 PM”. Also note that the minutes are specified in these examples as 00, since an on-the-hour value is required.

Controlling Individual Mailboxes

So far we’ve seen that the Calendar Repair Assistant will not run by default, since there is no schedule configured by default. If an individual mailbox server is configured with a valid schedule, it will process all mailboxes on that mailbox server by default. This is because each individual mailbox is configured to be processed accordingly. To confirm this, run the Get-Mailbox cmdlet against any individual mailbox and examine the setting of the CalendarRepairDisabled parameter. For example, to examine the CalendarRepairDisabled setting of the mailbox belonging to Neil, the following cmdlet can be used:

Get-Mailbox neil | fl CalendarRepairDisabled

You can see the results of running this cmdlet in Figure 3.

Figure 3: Individual Mailbox Control

If, for whatever reason, you need to disable the Calendar Repair Assistant from running against any single mailbox, you can set the CalendarRepairDisabled parameter to true. For example, the cmdlet below can be used to disable the Calendar Repair Assistant from processing the mailbox belonging to Neil. Obviously, setting the CalendarRepairDisabled parameter back to false will return the mailbox to its default behavior.

Set-Mailbox neil –CalendarRepairDisabled $true


That completes part one of this two-part article looking at the Calendar Repair Assistant in Exchange 2010. So far we’ve only looked at configuration parameters, so in part two we’ll look at the logging aspect and then move on to see the assistant in action.

If you would like to read the next part in this article series please go to Exchange 2010 Calendar Repair (Part 2).

About The Author

Leave a Comment

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Scroll to Top