Notes from the field: upgrading Exchange 2007 to SP1

So far, I did a couple of clean Exchange Server 2007 SP1 installations and they went really, really smoothly. I can say that the setup experience is much better than the RTM version.

Meanwhile, I also had the chance to upgrade existing Exchange Server 2007 RTM version to Service Pack 1. The experience was not so good compared with clean installations, nothing serious, but there are some caveats I would like to share with you.

  1. Read the Release Notes for Exchange Server SP1 and How to Upgrade to Exchange 2007 SP1.
  2. SP1 requires a Schema extension (again). Although the Setup Wizard will do it for you, I strongly recommend that you do it separately. Just follow the instructions from this link: The process is identical to the RTM version.
  3. Install .NET Framework 2.0 SP1 *before* running the Exchange 2007 SP1 setup. Remember that you must also install it on your Schema Master in order to extend the Schema from this server.
  4. If you are currently using Forefront Security for Exchange, install Forefront SP1 *before* upgrading Exchange Server 2007 to SP1 (I’ll write another post about this subject). Forefront for Exchange SP1 is backward compatible with Exchange 2007 RTM. Read more details at
  5. Upgrade server roles in this order: CAS > HT > UM > Edge > Mailbox.
  6. Before running the SP1 setup, perform the following actions on that server:
    1. Restart the server (this is very important, especially on cluster nodes, since the Setup can run for ages before finishing (the problem has to do with time it takes to register the new performance counters).
    2. Stop all services/processes that can have open handles to performance counters such as MOM Agents.
    3. Restart the Remote Registry service.
    4. Stop all Exchange and Forefront services.
    5. Disable Forefront by running FSCUtility /disable (don’t forget to run FSCUtility /enable afterwards).
    6. Start the Windows Firewall/Internet Connection Sharing (ICS) service. This service is disabled by default in Windows, and you must set its Startup type to Manual or Automatic for the service to be started
    7. Run the SP1 setup.
  7. If you’re installing SP1 on an SCC cluster, follow the procedures from this link: (start by doing a restart on each passive node).
  8. If you have previously customized an OWA theme, you’ll need to copy the modified files to the new version of OWA (there will be a new folder on each CAS). You may need to do some further customization, since there are new features, such as the monthly view on Calendar.
  9. You cannot uninstall Exchange 2007 SP1. After you install SP1, the only way to remove it is to uninstall Exchange 2007 from the computer

I would also like to share the SP1 setup behavior when it is interrupted:

  • On one occasion (when the Performance counters were taking ages to register) I had to restart the server. Luckily for me, the setup resumed from the stage it was before.
  • On another occasion, I forgot to copy the Scripts folder (it’s part of the setup files) to the server where I was installing SP1. The setup stopped because it couldn’t find the necessary files. There was no option to retry the operation. When I run setup again, I had the following error:

    The World Wide Web (W3SVC) service is either disabled or not installed on this computer. You must exit Setup, install the required component, then restart the Setup process.

    Setup cannot continue with upgrade because ‘C:\Program
    Files\Microsoft\Exchange Server\bin\ExchHelp.chm’ is open. Close the file and restart setup.

    I found the solution on this link:

Share it! :

TechNet Magazine – February 2008




The February edition of TechNet Magazine is now available to read online or to downaload as a standalone HTML Help (.chm) file.

In this issue the main subject is Sharepoint, but there are other “Exchange related” articles, such as Unified Communications or PowerShell.

Here’s a short list of some of the coolest articles:

  • How Presence Powers OCS 2007 (Rajesh Ramanathan) – Office Communications Server 2007 uses information about user availability to route communications to the most appropriate place—whether it’s sending a voice call, a video conference, an e-mail message, or an IM. See how the OCS 2007 system uses presence to connect endpoints.
  • Plan Your OCS 2007 Voice Deployment (Jochen Kunert and Rui Maximo) – Integrating Office Communications Server 2007 with an existing PBX system can be a challenging task. You need to select an integration scenario, understand call routing, know how to configure user settings, deal with number plans, and more. But don’t worry. This overview will show you what you need to know.
  • Windows PowerShell (Don Jones) – Shell Permissions

Share it! :

1 podcast, 1 white paper, 2 datasheets

A podcast, a white paper and 2 datasheets, those are the latest messaging related technical resources available to download from Microsoft.

  • Podcasts: How Microsoft IT Implemented New Storage Designs for Exchange Server 2007 – How does Exchange Server 2007 enable a large enterprise to increase mailbox quotas globally by a factor of ten and still lower storage costs, reduce maintenance complexities, and simplify data recovery processes? Microsoft IT was able to take advantage of Cluster Continuous Replication (CCR) in new mailbox server designs based on direct attached storage (DAS). Advantages of CCR and DAS over alternative configurations will be discussed along with how MSIT was able to eliminate storage as a single point of failure while at the same time lowering costs to two dollars per gigabyte.
  • HMC 4.0 – Microsoft Exchange Server 2007 Service Pack 1 White Paper – This white paper introduces the Microsoft Exchange Server 2007 Service Pack 1 (SP1) new features related to the Microsoft Solution for Hosted Messaging and Collaboration version 4.0. In particular, it addresses key features in anywhere access, built-in protection, and operation efficiency.
  • Exchange Hosted Services Archive Datasheet – Today’s business demands the need for a centralized, easily accessible and multi-functioning mail repository. Exchange Hosted Archive (EHA) assists with this enterprise goal.
  • Exchange Hosted Services Continuity Datasheet – Microsoft® Exchange Hosted Continuity is a business continuity solution that helps protect and provide continuous access to e-mail for a business and its employees. This datasheet outlines the details and benefits of the Continuity service.

Share it! :

Notes from the field: Transporter Suite

A couple of weeks ago I participated in a migration project which involved a migration from Lotus Domino 7.0 to Exchange Server 2007.

I used the (free) Microsoft tool: Transporter Suite. Transporter Suite has all it takes to perform a full mail (and application) migration from Lotus to Exchange. The latest version is v08.02.0012, but I used the RTM version (if you want to know what’s new, read Microsoft Transporter Suite for Lotus Domino Release Notes).

There are several approaches you can take in a similar migration project, but I prefer to place the Exchange Server in front of the Lotus Notes server, adding a non-authoritative SMTP domain and forward messages for the users not yet migrated. The following picture depicts the scenario I used.


Actually you can even make the SMTP domain authoritative for the Exchange Server, it will still forward any unresolved addresses to the Lotus Notes server if you configure a Send Connector.

My personal feeling is that Transporter Suite has lots of space for improvements. Probably there are some commercial tools more powerful and even more stable, but with a little bit of patience and some testing, the tool provided by Microsoft will do the job.

I would like to share my findings, hoping that they might help you. As I mentioned before, there is a new release of Transporter Suite that may have solved some of the problems I faced.

  1. Install the connector components on a server with the Hub Transport (HT) role. Although the documentation mentions that it can be installed on a HT or/and CAS, without the HT role I couldn’t create any connections. Here’s an excerpt from the official documentation:
    All connector components (Directory Connector and Free/Busy Connector): Can only be installed on Exchange Server 2007 servers with the Hub and/or Client Access Server (CAS) roles installed; optionally, other roles (such as Mailbox or Unified Messaging) can also be installed.
  2. There’s a small misprint on the documentation. You’ll need to increase the maximum attachment size by editing the web.config file in the exchweb\EWS subdirectory of the ClientAccess directory on each CAS. The line that you’ll need to add is:

    <httpRuntime maxRequestLength=”10240″ />

    Please don’t forget the “/” at the end!
    (that’s the misprint)

  3. I had some problems migrating users. The error I had was:

    Summary: 1 item(s). 0 succeeded, 1 failed.
    Elapsed time: 00:00:01

  4. User1

    The value “SMTP:User1@DOMAIN.COM” of property “ExternalEmailAddress” is used by another recipient object “DOMAIN.COM/Domino Contacts/User1\/HQ\/Company”. Please specify another value.

    Exchange Management Shell command attempted:
    ‘CN=User1/OU=Sede/O=Company’ | move-dominouser -Quiet -DominoDirectoryServer ‘SRVNOTES’ -GlobalCatalog ‘DC01.DOMAIN.COM’ -TargetOU ‘.’ -InitialPassword ‘System.Security.SecureString’ -TargetId ‘DOMAIN\User1’

    Elapsed Time: 00:00:01

    I didn’t find a way of solving this problem. I think it’s related with the timings associated with the remove process of the contact created previously and the subsequent copy of all proxy addresses. So, the solution was to write my own migration code. Here it is, you might find it useful:

       1: '*******************************************************************************
       2: 'migrateUsers.VBS: Copy proxyAddresses from a Domino contact to an AD user
       3: '
       4: 'Version: 0.1    
       5: 'Date:    2008/01/07
       6: 'Author:  RUI SILVA rui.silva(a)
       7: '
       8: '*******************************************************************************
      10: Const ForReading = 1
      11: Const ForWriting = 2
      12: Const ADS_SCOPE_SUBTREE = 2
      13: Const ADS_PROPERTY_UPDATE = 2
      15: Set objConnection = CreateObject("ADODB.Connection")
      16: Set objCommand = CreateObject("ADODB.Command")
      17: objConnection.Provider = "ADsDSOObject"
      18: objConnection.Open "Active Directory Provider"
      19: Set objCommand.ActiveConnection = objConnection
      21: objCommand.Properties("Page Size") = 1000
      22: objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
      24:     strName=InputBox("Enter username:")
      25:     objCommand.CommandText = _
      26:         "SELECT distinguishedName FROM 'LDAP://ou=Domino Contacts,dc=DOMAIN,dc=COM' WHERE objectCategory='user' " & _
      27:             "AND mailNickname='" & strName & "'"
      28:     Set objRecordSet = objCommand.Execute
      30:     If objRecordset.RecordCount = 1 Then
      31:         strDN = objRecordSet.Fields("distinguishedName").Value
      32:         MsgBox(strDN & ": FOUND")
      33:     strDN = Replace(strDN, "/", "\/")
      34:         Set objContact = GetObject("LDAP://" & strDN)
      35:         arrProxyAddresses = objContact.GetEx("proxyAddresses")
      36:         nArr = UBound(arrProxyAddresses)
      37:         For n=0 To nArr
      38:             If InStr(arrProxyAddresses(n), "SMTP:") Then
      39:                 strEmailAddr = Mid(arrProxyAddresses(n), 6) 
      40:             End If
      41:         Next
      43:         objCommand.CommandText = _
      44:             "SELECT distinguishedName FROM 'LDAP://ou=USERS,dc=DOMAIN,dc=COM' WHERE objectCategory='user' " & _
      45:                 "AND sAMAccountName='" & strName & "'"
      46:         Set objRecordSet2 = objCommand.Execute
      48:         If objRecordset2.RecordCount = 1 Then
      49:             strDN2 = objRecordSet2.Fields("distinguishedName").Value
      50:             MsgBox(strDN2 & ": USER FOUND")
      51:             Set objRecipient = GetObject("LDAP://" & strDN2)
      53:             objRecipient.ProxyAddresses = arrProxyAddresses
      54:             objRecipient.put "mailnickname", strName
      55:             objRecipient.put "mail", strEmailAddr
      56: '            objRecipient.MailEnable strEmailAddr
      57:             objRecipient.SetInfo
      58:             MsgBox("OK")
      59:         End If
      61:         objContact.DeleteObject(0)
      63:         objRecordset.Close
      64:         objRecordset2.Close
      66:     Else    
      67:         MsgBox(strName & ": NOT_FOUND")
      68:     End If
      70: objConnection.Close

Good luck for your migration! Don’t forget to read the documentation: Microsoft Transporter for Lotus Domino End-to-End Guidance.

Share it! :

Outlook 2007 demos

Microsoft released a couple of videos that demonstrate how to use some common tasks in Microsoft Office Outlook 2007.

  • Outlook 2007 Demo: Create and use an e-mail signature – In Microsoft Office Outlook 2007, you can create and store different signatures for different circumstances. It’s easy to create a signature that includes the information you want— whether it’s a plain signature with just your name or an elaborate one with a photo, hyperlink, contact details, and several lines of text formatted for clarity and emphasis. Set a signature to appear by default, or add one with a quick right-click. Creating, managing, and using e-mail signatures is easy.
  • Outlook 2007 Demo: Customize your calendar– Did you know that the views in your Outlook 2007 calendar are fully customizable? For example, you can view your days and weeks in increments of 5 minutes, 60 minutes, and a variety of periods in between. You can adjust the view of your calendar according to your work week and work day; for instance, you can display Sunday through Thursday and show a normal day as being 11 in the morning to 7 in the evening if you like. Use different color schemes, and show more or less detail in your calendar. Watch the demo to see how to do all this and more.

Share it! :

Exchange 2003 Memory Optimization*

*This is a copy of an article I wrote for Since that site has been redesigned and the article is no longer online, I thought it would be a good idea to keep it on this blog.

Anyone who knows Exchange has probably heard by now that Exchange is a memory eater. The store process is the main responsible for this behavior, since store.exe starts it will grab as much memory as it can possibly get. This behavior is often wrongly seen as a problem or as a memory leak, but actually it’s a normal and expected operation. Besides, Exchange can return memory to the operating system using an algorithm known as Dynamic Buffer Allocation. And yes, you can limit the maximum amount of memory that Exchange uses by reducing the ESE Buffer size.

By these days, memory is not as expensive as it used to be, so it’s easy to find Exchange servers with a couple of GB of RAM. But with all this memory, you’ll have to give a little help to make Exchange use it wisely. If you have a server with more than 1GB of RAM, there are some configuration parameters you can change in order to optimize Exchange memory usage.

I’ll describe the modifications you should do just for Exchange 2003 running on Windows 2003. There are slightly differences for Windows 2000, but I will not mention them in order to keep this article shorter (if you really want to know the differences feel free to drop me an email).

You should not make any modifications to servers that do not contain any mailboxes or public folders (front-ends or bridgeheads), neither to Exchange Server computers which are at the same time Active Directory Domain Controllers or Global Catalogs.

  1. First of all you should add the switches /3GB and /USERVA=3030 to boot.ini. The /3GB switch modifies the way virtual address space is created so that 3 gigabytes are available for user mode applications. By default, Windows reserves 2GB for kernel and another 2GB for user mode processes. The /USERVA switch is a more precise tuning Microsoft recommends that increases the system page table entries (PTE) by 42MB.
  2. Configure the HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\HeapDeCommitFreeBlockThreshold registry value to 0x00040000. The HeapDecommitFreeBlockThreshold registry key specifies the number of contiguous bytes above which the memory is decomitted rather than retained for reuse, thus avoiding virtual memory fragmentation.
  3. If you have a server with more than 2 GB of memory, it may help to increase the size of the Store Database Cache (aka ESE buffer). Because of virtual address space limitations, this value must not be set higher than 1200 MB. You should use Windows Performance utility to monitor the memory of the server before you change this setting. To do this, monitor the following performance object and value:

    Performance object: Process
    Performance counter: Virtual Bytes
    Instance: STORE

    If you have a server that is configured with the /3GB and the virtual bytes counter is at 2.5 GB when the server is heavily loaded, you may be able to increase your maximum buffer size by about 300 MB, for a total size of 1200 MB. But keep in mind that increasing the buffer size may adversely affect server performance, so you’ll have to be very careful with this setting.
    To modify the ESE Buffer size you may use the ADSI Edit utility. Under Configuration Container expand CN=Services, CN=Microsoft Exchange, CN=OrganizationName, CN=Administrative Groups, CN=First Administrative Group, CN=Servers, CN=servername. Under CN=servername, right-click CN=InformationStore, and then click Properties. Find the msExchESEParamCacheSizeMax property and in the Edit Attribute box, type the value that you want to assign to it (make sure that you enter a value that is a multiple of 8,192). Click Set, and then click OK.

  4. Verify that the HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SystemPages registry value is set to 0.

After making all of these modifications you must restart your server for these changes to take effect.

Remember that there is no point in having a dedicated Exchange 2003 server with more than 4GB of memory. Although this may constitute a surprise for some of you, Exchange Server 2003 does not support instancing, Physical Address Extension (PAE), or Address Windowing Extensions (AWE). Therefore, 4 GB of RAM is the maximum amount of memory that an Exchange Server computer can efficiently use.

If you want to know more about Exchange Server memory usage, there are some Knowledge Base articles dedicated to this issue:

“How to Optimize Memory Usage in Exchange Server 2003”

“Using the /Userva Switch on Windows Server 2003-based computer that are running Exchange Server”

“The “HeapDecommitFreeBlockThreshold” registry key”

“CPU and Memory Scalability for Exchange 2000 and Exchange 2003”

“How to troubleshoot virtual memory fragmentation in Exchange Server 2003 and Exchange 2000 Server”


Share it! :

Sample chapters from Powershell book

A good friend of mine, Ilse Van Criekinge (Exchange MVP and winner of this year’s Speaker Idol at TechEd IT Forum) is the author of a Powershell book that will be released very soon.

The book, Exchange Management Shell: TFM, is not ready yet, but the good news is that you can already download some unedited sample chapters for free from the SAPIEN site.

Feedback is appreciated and can be e-mailed to or directly to Ilse:

Exchange Management Shell: TFM provides the answers in a “cookbook” format that focuses on real-world Exchange Server 2007 management tasks, and how to accomplish them in Windows PowerShell. This authoritative and comprehensive book includes a standardized “crash course” in Windows PowerShell for newcomers, and dives right into the nuts and bolts of becoming a leading-edge, command-line Exchange administrator.”

Share it! :

Exchange Best Practices Analyzer (ExBPA) Web Update Pack

The latest Microsoft Exchange Best Practices Analyzer Web Update Pack (v2.11.18.0) is available to download from the Microsoft site.

Brief Description
Configuration, rule, and help updates for the Exchange Best Practices Analyzer v2.8.

This download contains the latest XML and ExBPA.chm files. Use this package to update your existing installation of the Exchange Best Practices Analyzer. NOTE: If Internet connectivity is available, the Exchange Best Practices Analyzer will attempt to automatically update itself from the Internet. Where updates are being applied automatically, there is no need to download the Web Update Pack.
To find out which version of ExBPA.Config.xml is installed on your computer, click the ‘About Exchange Best Practices Analyzer’ link within the tool. The upper version number refers to the core application (e.g. 2.9.7926.0), the lower version is for the configuration XML file.

Download and run the package. When prompted, extract the files to your Exchange Best Practices Analyzer program folder (usually C:\Program Files\ExBPA\en).

Share it! :

MCITP: Enterprise Messaging Administrator


After passing today the 70-238 exam, I earned the MCITP: Enterprise Messaging Administrator certification.

To achieve this certification, you must successfully complete three exams:

The first 2 are not complicated, the last one, 70-238, is a little more difficult but anyone with enough experience on the field can pass.

Share it! :

Improve your Exchange Backup*

*This is a copy of an article I wrote for Since that site has been redesigned and the article is no longer online, I thought it would be a good idea to keep it on this blog.
I wrote the article for Exchange Server 2003, but the tweaks mentioned can be applied to backup Exchange Server 2007, even though Microsoft is deemphasizing streaming backup.

Consolidation is a word you probably hear a lot by these days. We see bigger and bigger Exchange Servers with huge stores and thousands of users. As the size of databases grows, backup technologies must keep up by evolving rapidly and becoming more fast and reliable.

Whether you do it by obligation of a service level agreement (SLA) or for any other reason such as compliance or a disaster recovery plan, there’s no way you can live without backup. Besides that, online backup is one of the most important operations to keep a healthy Exchange infrastructure.

From a Sysadmin’s point of view, the backup time windows is one of his/hers main concerns, even if he/she isn’t tied with a high demanding SLA. So much data, so little time!

There are many solutions from different vendors to backup an Exchange infrastructure (, but you’ll be perfectly well served with the tool provided by Microsoft, Windows Backup (NTBackup).

And if time is a problem, on a fat Exchange database you’ll probably want to try a 2-step backup approach: backup to disk first and then dump the resulting file to tape. In this kind of backup there are a couple of things you can do to improve backup performance and that’s what I’m going to explain next.

The first tweak you may try is to modify specific registry values that optimize the data throughput of the built-in backup engine. These entries are located under the key HKEY_CURRENT_USER\Software\Microsoft\Ntbackup\BackupEngine\ (if you don’t see the BackupEngine subkey you’ll have to run Windows Backup at least once). If you schedule a backup job, don’t forget that HKEY_CURRENT_USER must correspond to the user configured to run the job.

There isn’t much information provided by Microsoft about these entries, so I’ll advise you to change them to the values provided by Microsoft IT:

Logical Disk Buffer Size = 64
Max Buffer Size = 1024
Max Num Tape Buffers = 16

Out of the box, NTBackup will give a data throughput of about 640 MB/min, when performing disk-to-disk backup. With these registry optimizations you’ll be able to reach 1200 MB/min, that’s twice the throughput you had before!

The next major tweak to improve performance is to get a new version of NTBackup. That’s right, Microsoft released a new version of NTBackup with Windows Server 2003 Service Pack 1. The good news is that you can put your hands on this new version, even if you don’t have SP1 installed, just call Microsoft PSS and ask for the hotfix mentioned on article Q839272.

Basically you’ll get a revised version of NTBackup that provides a new command-prompt switch, /FU. The switch enables a “file unbuffered” setting to bypass the cache manager and thus resolving a cache contention issue. This change provides a number of benefits during the disk-to-disk backup process:

  • Sustainable throughput over time (remember the 1200 MB/min data throughput? Without the revised version that throughput will suffer some degradation)
  • Reduction in processor utilization (peak utilization reduced to 30 percent on average)
  • Elimination of impacts to the system process during the backup job

I made some basic testing and measures with and without this new switch. The measures were made by backing up a 2GB file to a SAN disk on an HP StorageWorks Enterprise Virtual Array 5000. For this specific hardware, Microsoft also recommends that you disable mirrored write-back cache on all dedicated backup disks. I present you the results on the next table.

  Without /FU With /FU
Mirrored Write-Back 1:41 1:18
Mirrored cache disabled 1:42 1:09

Table 1 – Total backup time

You can notice a 23% improvement just by using the /FU switch. This value grows up to 33% when you disable the specific HP EVA 5000 mirrored write-back cache.

I showed you how to improve backup performance by modifying some registry values and by using a revised version of Windows Backup. Don’t forget that there are many other things involved in a backup solution, so you’ll have to do further testing on your own environment, but with the tweaks I mentioned is almost a certain that you’ll see a boost on throughput.

There are some articles you should check in order to get more information:

“How to Back Up and Restore an Exchange Computer by Using the Windows Backup Program”

“System performance is negatively affected when Ntbackup.exe writes to a destination .bkf file”

“Backup Process Used with Clustered Exchnge Server 2003 Servers at Microsoft”

Share it! :