Article ID: 6889, created on Nov 10, 2009, last review on Aug 12, 2014

  • Applies to:
  • Operations Automation 5.x

Resolution

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

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

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>
    </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="preferredDomainController" destination="executeData" />
      <before source="procedureData" sourcePath="organizationPath" destination="executeData" destinationPath="path" mode="merge" />

      <executeData>
        <okIfNotExist>1</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="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="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="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="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.

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

Attachments

5356b422f65bdad1c3e9edca5d74a1ae caea8340e2d186a540518d08602aa065 2554725ed606193dd9bbce21365bed4e e12cea1d47a3125d335d68e6d4e15e07

Email subscription for changes to this article
Save as PDF