Windows Tip Sheet

Outlook Migraines ... er, Migrations

Stop migration sickness in Exchange with a painless script and registry change.

I recently got an e-mail from David Kounas in Pittsburgh. Seems he was working with a client on an Exchange migration, where the majority of the clients were running WinXP and Outlook 2003 in its default, cached configuration. In that mode, Outlook operates primarily from its local, "offline" store and synchronizes that store with the server on a continuing basis. The migration in question was from Exchange 5.5 to Exchange Server 2003.

Cached Address Book
Because the migration basically involved two separate e-mail systems—Exchange 5.5 and Exchange 2003—significant efforts were being made to ensure users could still e-mail one another. They created Contact objects in the AD domain that supported the Exchange Server 2003 installation, using those objects to represent un-migrated Exchange 5.5 mailboxes. Prior to migrating a mailbox, they removed the Contact object. Once the mailbox was migrated, it would show up as a regular mailbox-enabled user in Active Directory.

The problem was that migrated users were unable to e-mail recently migrated users. The migrated users' offline address books in Outlook 2003 were still caching the old Contact object, which by this point was gone. The offline address books, which Outlook was consulting first, weren't being updated quickly enough. They didn't want to permanently turn off Outlook's cached mode, as it has some significant operational advantages—like not locking up when network connectivity is on the fritz, which is what prior versions of Outlook would do pretty routinely. But something needed to be done. They figured the solution would be to temporarily disable cached mode until the migration was over, thus eliminating the problem with the cached address book. David asked me if I knew of a script that would help.

As luck would have it, I have a shell script that can scan through each computer object in a domain and “do something with it.”

'connect to the root of AD
Dim rootDSE, domainObject
Set rootDSE=GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set oDomain = GetObject("LDAP://" & domainContainer)

'start with the domain root

Sub WorkWithObject(oContainer)
   Dim oADObject
   For Each oADObject in oContainer
      Select Case oADObject.Class
         Case "computer"
               'oADObject represents a COMPUTER object;
               'do something with it
               '** YOUR CODE HERE **
         Case "organizationalUnit" , "container"
               'oADObject is an OU or container...
               'go through its objects
      End select
End Sub

You'll need to run this on a domain member, of course, as someone with admin permissions on each computer that will be targeted. Coming up with code to look for XP boxes (the company had a few other clients) was also easy, using a simple WMI query, which would be added where the shell script says "**YOUR CODE HERE **":

sComputer = oADObject.Name
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & _
 strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
 ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
 If objOperatingSystem.Version = "5.1.2600" Then
  'computer is XP – do something with Outlook
 End If

The problem was I didn't know how to help David "do something with Outlook." Fortunately, he figured it out on his own. The registry key is:
HKEY_CURRENT_USERS\Software\Policies\Microsoft\Office\11.0\Outlook\Cached Mode
It needs to be set to 0 to disable cached mode.

This key resides under the Policies branch of the registry, which means it's related to Group Policy; the ADM templates relating to Office 2003 would allow you to push this setting out via Group Policy object, rather than a script. Because the setting only affects Outlook 2003, you could apply it to the entire domain and only affect the necessary computers.


Anything living under the Policies branch of the registry can be managed via Group Policy and will be automatically unset if the GPO is ever unlinked. Anything else in the registry can be set via GPO but is referred to as a “preference,” and tattoos the registry. Remove the GPO and the preference will remain configured.

If you're trying to get better control over your patch management, you may want to block users' access to Office Update, forcing them to rely only on updates that you've tested and approved for deployment. Microsoft has an article on blocking access at Keep in mind, though, that when Windows Update v5 releases (possibly late this year or early next), it will replace Office Update as a source of patches for Office and most other Microsoft business products.

More Resources
The Office 2003 Resource Kit includes the ADM templates to manage Office via Group Policy. Download it from here.

Looking for help on subtle Group Policy problems? provides a great discussion forum and other GPO resources.

You can also modify many Outlook settings with a PRF file. Check out: for more info.

About the Author

Don Jones is a multiple-year recipient of Microsoft’s MVP Award, and is Curriculum Director for IT Pro Content for video training company Pluralsight. Don is also a co-founder and President of, a community dedicated to Microsoft’s Windows PowerShell technology. Don has more than two decades of experience in the IT industry, and specializes in the Microsoft business technology platform. He’s the author of more than 50 technology books, an accomplished IT journalist, and a sought-after speaker and instructor at conferences worldwide. Reach Don on Twitter at @concentratedDon, or on Facebook at

comments powered by Disqus
Most   Popular