Quick install notes for Exchange Server 2007 SP2

The long awaited Exchange Server 2007 Service Pack 2 has finally been released. There are many exciting new features, but if I would like to highlight 2 of them:

  • Exchange Server 2010 support: SP2 is a pre-requisite for installing Exchange Server 2010 on an existing Exchange Server 2007 Organization.
  • Windows Server 2008 Backup support: it’s now possible to backup (and restore!) Exchange Server 2007 using the Windows Server 2008 Backup Tool.

Here’s the complete list of new features, taken from the You Had Me At EHLO blog:

  • Enhanced Auditing – New Exchange auditing events and audit log repository enable Exchange administrators to more easily audit the activities occurring on their Exchange servers. It allows the right balance of granularity, performance, and easy access to audited events via a dedicated audit log repository. This simplifies the auditing process and makes review of audited events easier by segregating audited events in a dedicated location.
  • Exchange Volume Snapshot Backup Functionality A new backup plug-in has been added to the product that will enable customers to create Exchange backups when a backup is invoked through the Windows Server 2008 Backup tool. Exchange Server 2007 didn’t have this capability on Windows Server 2008 and additional solutions were required to perform this task.
  • Dynamic Active Directory Schema Update and Validation – The dynamic AD schema update and validation feature allows for future schema updates to be dynamic deployed as well as proactively preventing conflicts whenever a new property is added to the AD schema. Once this capability is deployed it will enable easier management of future schema updates and will prevent support issues when adding properties that don’t exist in the AD schema.
  • Public Folder Quota Management – SP2 enables a consistent way to manage quotas by improving the current PowerShell cmdlets to perform quota management tasks.
  • Centralized Organizational Settings – SP2 introduces new PowerShell option that enable centralized management of many of the Exchange organization settings.
  • Named Properties cmdlets – SP2 enables Exchange administrators to monitor their named property usage per database.
  • New User Interface for Managing Diagnostic Logging– SP2 enables Exchange administrators to easily configure and manage diagnostic logging from within the Exchange Management Console.

Before installing Exchange Server 2007 SP2 I strongly advise you to read the release notes. Here are some remarks regarding the installation:

  • Windows Installer version 4.5 is required to install Exchange 2007 SP2 (Windows Server 2008 SP2 includes Windows Installer 4.5). After the installation of Windows Installer 4.5, a restart is required.
  • The Setup Wizard will validate whether Windows Installer 4.5 is installed or not. In case there isn’t, the following warning will pop-up:
    e2k7sp2-windows-installer-4.5
  • Since I was still using Windows 2008 SP1, I decided to install SP2. After Windows 2008 SP2 setup finished, I kicked the Exchange SP2 installation. It was with a little bit of surprise that I realized one more reboot was needed:
    e2k7sp2-02
  • The release notes mention that “you must first prepare Active Directory and the domains” in 2 specific occasions:
        a) an in-place upgrade from a beta version of Exchange 2007 SP2
        b) the first installation of Exchange 2007 SP2 in an organization
    In my case (scenario b), when I first installed SP2, the Setup GUI did all the work for me, as you can see in the following pictures:
    e2k7sp2-04
    e2k7sp2-05
  • Here’s a screenshot of my server with SP2, the version is now 8.2 (Build 176.2). Please notice I didn’t follow the recommended path: CAS > UM > Hub > Edge > Mailbox!
    e2k7sp2-06

Related Links:

You cannot resume setup by performing the action "BuildtoBuildUpgrade"

I recently made 2 important decisions regarding my test environment:



  1. Move all the VMs to Hyper-V;
  2. Install Exchange 2007 SP1.

Moving to Hyper-V is not that hard:



  1. Remove the VM Additions;
  2. Create a new Hyper-V VM using the previous VHD.

My problems started when installing Exchange Server 2007 Service Pack 1. After I kicked the SP1 Setup, I got a warning that I should first install .NET Framework 2.0 SP1 (how could I disregard my own recommendations?), so I stopped the setup process.


After installing the required update, I resumed the SP1 setup, but now I got the following error:


Setup previously failed while performing the action “install”. You cannot resume setup by performing the action “BuildtoBuildUpgrade”

Microsoft Knowledge Article KB947281 describes this problem and has a resolution for it. Unfortunately the article is a little bit incomplete. It tells you to delete the Watermark and Action entries from any of these Registry keys:


  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\ClientAccessRole
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\HubTransportRole
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\MailboxRole

But for my particular case the Watermark and Action entries were located at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\UnifiedMessagingRole.


So, the right solution should be to check for those entries at any of these keys:


  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\ClientAccessRole
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\HubTransportRole
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\MailboxRole
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\UnifiedMessagingRole
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\v8.0\ClusteredMailboxServer

  • [UPDATE]
    The KB Article has been corrected!







    Share it! :

















    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: http://technet.microsoft.com/en-us/library/bb125224(EXCHG.80).aspx. 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 http://blogs.technet.com/fss/archive/2007/11/29/forefront-security-for-exchange-server-with-service-pack-1-is-now-available.aspx.
    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: http://technet.microsoft.com/en-us/library/bb691226(EXCHG.80).aspx (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: http://www.expta.com/2007/10/installing-exchange-2007-sp1-notes-from.html.

    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.

    notes-migration

    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
      Failed

      Error:
      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)live.com
         7: '
         8: '*******************************************************************************
         9:  
        10: Const ForReading = 1
        11: Const ForWriting = 2
        12: Const ADS_SCOPE_SUBTREE = 2
        13: Const ADS_PROPERTY_UPDATE = 2
        14:  
        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
        20:  
        21: objCommand.Properties("Page Size") = 1000
        22: objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
        23:  
        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
        29:  
        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
        42:  
        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
        47:  
        48:         If objRecordset2.RecordCount = 1 Then
        49:             strDN2 = objRecordSet2.Fields("distinguishedName").Value
        50:             MsgBox(strDN2 & ": USER FOUND")
        51:             Set objRecipient = GetObject("LDAP://" & strDN2)
        52:  
        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
        60:  
        61:         objContact.DeleteObject(0)
        62:  
        63:         objRecordset.Close
        64:         objRecordset2.Close
        65:        
        66:     Else    
        67:         MsgBox(strName & ": NOT_FOUND")
        68:     End If
        69:     
        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! :