Article ID: 115533, created on Feb 12, 2013, last review on Nov 17, 2015

  • Applies to:
  • Operations Automation

Resolution


Limitations: the instructions in the article may be applied only to Hosted Exchange 2010 managed by HMC Provisioning System in POA.

Refer to the Knowledgebase article https://kb.odin.com/en/6889 for corresponding instruction for Hosted Exchange 2007.

To recreate an Offline Address Book, one may execute the following MPF request:
<request xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <data/>
  <procedure>
    <procedureData>
      <preferredDomainController>_PREFERRED_DC_</preferredDomainController>
      <generationServer>_GENERATION_SERVER_</generationServer>
      <organizationDN>_ORGANIZATION_DN_</organizationDN>
      <organizationName>_ORGANIZATION_NAME_</organizationName>
      <oabPublicStoreDN>_PUBLIC_MDB_</oabPublicStoreDN>
      <allExchangeUsersDN>_ALL_EXCHANGE_USERS_DN_</allExchangeUsersDN>
      <remoteAccess>
       <password secure_data="yes">_PEM_ADMIN_PASSWORD_</password>
       <server>_ANY_EXCHANGE_2010_SERVER_NETBIOS_NAME_</server>
       <user>_AD_DOMAIN_NETBIOS_NAME_\pem_admin</user>
      </remoteAccess>
    </procedureData>
    <transform>
      <before source="procedureData" destination="procedureData">
        <xsl:template match="*">
          <allExchangeUsersPath>LDAP://<xsl:apply-templates select="preferredDomainController"/>/<xsl:apply-templates select="allExchangeUsersDN"/></allExchangeUsersPath>
        </xsl:template>
        <xsl:template match="preferredDomainController"><xsl:value-of select="."/></xsl:template>
        <xsl:template match="allExchangeUsersDN"><xsl:value-of select="."/></xsl:template>
      </before>

      <before source="procedureData" sourcePath="organizationDN" destination="procedureData" destinationPath="organizationPath" mode="merge">
        <xsl:template match="*">
          <organizationPath>LDAP://<xsl:value-of select="."/></organizationPath>
        </xsl:template>
      </before>

    </transform>

    <execute impersonate="1" namespace="SW Managed Exchange" procedure="DeleteOfflineAddressList">
      <after destination="data" destinationPath="log" source="context"/>
      <after destination="data" destinationPath="log" source="executeData"/>

      <before source="procedureData" sourcePath="remoteAccess" destination="executeData"/>
      <before source="procedureData" sourcePath="preferredDomainController" destination="executeData"/>
      <before source="procedureData" sourcePath="organizationPath" destination="executeData" destinationPath="path" mode="merge"/>

      <executeData>
        <okIfNotExist>true</okIfNotExist>
      </executeData>
    </execute>

    <execute impersonate="1" namespace="SW Managed Exchange" procedure="CreateOfflineAddressList">
      <after destination="data" destinationPath="log" source="context"/>
      <after destination="data" destinationPath="log" source="executeData"/>

      <before source="procedureData" sourcePath="remoteAccess" destination="executeData"/>
      <before source="procedureData" sourcePath="preferredDomainController" destination="executeData"/>
      <before source="procedureData" sourcePath="generationServer" destination="executeData"/>
      <before source="procedureData" sourcePath="organizationPath" destination="executeData" destinationPath="path" mode="merge"/>
      <before source="procedureData" sourcePath="organizationName" destination="executeData" destinationPath="name" mode="merge"/>
      <before source="procedureData" sourcePath="oabPublicStoreDN" destination="executeData" destinationPath="publicMDB" mode="merge"/>
      <before source="procedureData" sourcePath="allExchangeUsersPath" destination="executeData" mode="insert">
        <xsl:template match="*">
          <readAccess>
            <value><xsl:value-of select="."/></value>
          </readAccess>
        </xsl:template>
      </before>

      <executeData/>
    </execute>

    <execute impersonate="1" namespace="SW Managed Exchange" procedure="GetCorruptedMailboxes">
      <after destination="data" destinationPath="log" source="context"/>
      <after destination="data" destinationPath="log" source="executeData"/>

      <before source="procedureData" sourcePath="remoteAccess" destination="executeData"/>
      <before source="procedureData" sourcePath="preferredDomainController" destination="executeData"/>
      <before source="procedureData" sourcePath="organizationPath" destination="executeData" destinationPath="path" mode="merge"/>

      <executeData/>

      <after destination="procedureData" source="executeData" sourcePath="mailboxes" mode="insert" ifNull="ignore">
        <xsl:template match="*">
          <mailboxesToFix>
            <xsl:for-each select="path">
              <path>LDAP://<xsl:value-of select="."/></path>
            </xsl:for-each>
          </mailboxesToFix>
        </xsl:template>
      </after>
    </execute>


    <execute impersonate="1" namespace="SW Managed Exchange" procedure="RepairExchangeObject">
      <forEach name="corruptedMailbox" root="procedureData" path="mailboxesToFix/path" ifNull="skip"/>

      <after destination="data" destinationPath="log" source="context"/>
      <after destination="data" destinationPath="log" source="executeData"/>

      <before source="procedureData" sourcePath="remoteAccess" destination="executeData"/>
      <before source="procedureData" sourcePath="preferredDomainController" destination="executeData"/>
      <before source="corruptedMailbox" destination="executeData" destinationPath="path" mode="merge"/>
      <before source="procedureData" sourcePath="organizationPath" destination="executeData" destinationPath="owningOrg" mode="merge"/>

      <executeData/>
    </execute>

    <execute impersonate="1" namespace="SW Managed Exchange" procedure="RebuildOfflineAddressList">
      <after destination="data" destinationPath="log" source="context"/>
      <after destination="data" destinationPath="log" source="executeData"/>

      <before source="procedureData" sourcePath="remoteAccess" destination="executeData"/>
      <before source="procedureData" sourcePath="preferredDomainController" destination="executeData"/>
      <before source="procedureData" sourcePath="organizationPath" destination="executeData" destinationPath="path" mode="merge"/>

      <executeData/>
    </execute>

  </procedure>
</request>

Use the attached file with XML request template for convenience.


The placeholders used in the request above should be replaced with values retrieved in the following way:

1. _ORGANIZATION_NAME_ is the AD Exchange Organization name

2. _ORGANIZATION_DN_ is the 'Organization Unit' property of the Exchange Organization, and it may be found in the POA Provider CP at Service Director > Hosted Exchange Manager > Organizations > Organization name.

3. _PUBLIC_MDB_ is the 'OAB public folder store' property of the OAB Service, and it may be found in the POA Provider CP at Service Director > Hosted Exchange Manager > Services > select the needed Exchange OAB Service > OAB Configuration / 'OAB Limits and Statistics'

4. _GENERATION_SERVER_ is the storage server name. This value is a part of the output of the command below executed on AD Domain Controller.

Here is an example: > dsquery * "CN=S001000365,CN=Offline Address Lists,CN=Address Lists Container,CN=Provider,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=provider,DC=com" -attr siteFolderServer

CN=PF01,CN=VS01SG03,CN=InformationStore,CN=EXVB01,CN=Servers,CN=First Administrative Group,CN=Administrative Groups,CN=Provider,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=provider,DC=com

_GENERATION_SERVER_ is EXVB01 in the example above.

5. _ALL_EXCHANGE_USERS_DN_ is the DN (distinguished name) of the "All Exchange users" group in customer's OU (Organization Unit) in AD.

Here is an example:
CN=eg00084532,OU=S001000365,OU=R0000000003,OU=Hosting,DC=provider,DC=com
The group name may be obtained from the Distribution Lists screen in the POA customer CP at Hosting > Configuration & Administration > Exchange > Distribution Lists. It may also be found in the AD organization properties.

6. _PREFERRED_DC_ is the preferred AD domain controlled in FQDN format.

7. _PEM_ADMIN_PASSWORD_ - password of the AD domain user pem_admin (this user is being used by POA for all provisioning requests).

8. _ANY_EXCHANGE_2010_SERVER_NETBIOS_NAME_ - NETBIOS name of any Exchange server in the proper AD domain, e.g. CAS server.

9. _AD_DOMAIN_NETBIOS_NAME_ - NETBIOS name of the AD domain where Hosted Exchange servers are installed.

Save the file with an XML request on the MPS server, e.g. as recreateOAB_2010.xml and then execute the following command in cmd on the MPS server:
"C:\Program Files\Microsoft Provisioning\Tools\ProvTest.exe" recreateOAB.xml
 

Attachments

caea8340e2d186a540518d08602aa065 5356b422f65bdad1c3e9edca5d74a1ae e12cea1d47a3125d335d68e6d4e15e07

Email subscription for changes to this article
Save as PDF