Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've been tasked with cleaning up our companies contact database sitting on our Exchange Server 2003. The rub is this database of contacts has been neglected for the past couple of years and is now a bit messy.

My issue is I have say a person named 'Bob Smith', and Bob is listed in multiple categories, 'Students' and 'Student'.

I would really like to remove the 'Student' category from Bob and anyone else out there that has the same category.

My question is, is there an easy way to edit the master category lists for contacts on the exchange server?

I feel like I am missing something simple here since if I were playing with the categories that I use, to say organize email its very easy to do so, but I can't seem to find the proper way to do it for categories that are up on the server.

I'm attempting to work through Outlook 2007 and Exchange 2003.

Any insight would be very helpful as I really don't want to change 8000+ contacts by hand.

share|improve this question
I assume you mean you have these contacts in a Public Folder? – Duncan Smart May 26 '09 at 19:35
Yes, public folder contacts...maybe a better question to post elsewhere on serverfault, is there a better place to store the contacts? – ben May 27 '09 at 13:46
Yes, create an OU on Active Directory and add Contact objects there. Then create an Exchange Address List against the OU. – Duncan Smart May 27 '09 at 17:49
up vote 3 down vote accepted

My question is, is there an easy way to edit the master category lists for contacts on the exchange server?

The master category list is a per-user setting. It is not stored on the Exchange server.

In Outlook 2003 it is stored in the current user portion of the registry at this location.


If you want all users on your network to have the same categories you could export that portion of the registry and then import it to other users. Unfortunately, you will also overwrite all their categories. Because of the format of that key merging the categories together is not going to be very easy. It is a REG_BINARY that contains semicolon seperated list of the categories in unicode.

Each contact record has a field which contains the list of categories that contact is associated with. There is no easy way to click one button and have a given category removed from all contact records. You could a build a VBA script that did this by looping through all the records and removing that category.

It may be easier to simply export all the contacts to some other format, manipulate them as needed, then re-import.

share|improve this answer

I'm sorry to say, but since Outlook 2007, the version Ben's using, the master category list (mcl) is stored on the server if the mailbox is the default store. No matter whether there's an Exchange server or not, the registry isn't used anymore.

However, for removing categories from a contact it doesn't matter where the mcl is stored. That's because a category name is stored twice, once in the mcl and once with the item. So, removing the one doesn't affect to other.

If you want to re-organize your categories, Category Manager is a valuable tool (see: It helps you to find and edit double categories like "students" and "student".

Once, you've cleaned your mcl, the tool can also distribute it to the other clients, no matter what version of Outlook. And you can decide yourself whether to overwrite the existing mcl or to merge it with yours.

share|improve this answer

I made a simpe AutoIt Script to deploy Categories

#include <File.au3>
#include <Array.au3>
$outlook = ObjCreate("Outlook.Application")
If Not @error Then
   $ns = $outlook.getnamespace("Mapi").categories
   Local $aArray[1][3]

   _FileReadToArray ( @ScriptDir&"\"&$sFilePath,$aArray, 2,";")

   $Anzahl=UBound ($aArray) -1

   ProgressOn("Outlook Kategorieimport", $sFilePath &" wird Importiert ", "0%")

   For $i = 1 to $Anzahl
      $pc=100/$Anzahl * $i
      ProgressSet(round($pc,0), round($pc,0) & "%")

   ProgressSet(100, "Fertig", "Ferig")


Import File: Kategorien.csv

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.