Cómo generar cuentas de Active Directory mediante la información de buzón de la base de datos de buzones

 

Se aplica a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Última modificación del tema: 2007-04-26

Los buzones de Exchange están formados por dos componentes:

  • La cuenta de usuario del servicio de directorio de Active Directory

  • Los datos de buzón almacenados en la base de datos de buzones de Exchange

Entre los datos almacenados en la base de datos de buzones, se incluye una cantidad limitada de información relacionada con la cuenta de usuario a la que está asociado el buzón. En una situación de desastre donde se pierda la base de datos de Active Directory y no se disponga de copias de seguridad de Active Directory ni copias de seguridad del estado del sistema en los controladores de dominio, quizá pueda volver a crear las cuentas de usuario utilizando la información almacenada en la base de datos de buzones. En Microsoft Exchange Server 2003 y Exchange 2000 Server, esta tarea se llevaba a cabo mediante la herramienta de reconexión de buzones (Mbconn.exe). Para obtener más información acerca de Mbconn.exe, consulte en Microsoft Knowledge Base el artículo 271886, Cómo emplear la utilidad Mbconn para generar cuentas de Active Directory para buzones en el almacén de información

Dado que no puede utilizar Mbconn.exe con Exchange Server 2007, debe utilizar scripts del Shell de administración de Exchange para recopilar los datos necesarios de los buzones desconectados. A continuación, puede guardar los datos en un archivo con formato de intercambio de datos (LDIF) del protocolo ligero de acceso a directorios (LDAP), que puede importarse después a Active Directory. Para importar el archivo LDIF a Active Directory, debe utilizar la herramienta para datos con formato de intercambio del protocolo LDAP de Exchange (LDIFDE). LDIFDE se instala de forma predeterminada en los equipos que ejecutan Microsoft Windows Server 2003. 

En este tema se explica cómo utilizar la herramienta LDIFDE y los scripts del Shell de administración de Exchange para generar cuentas de usuario de Active Directory perdidas utilizando la información de buzón almacenada en las bases de datos de buzones.

Importante

El script de este procedimiento es un ejemplo. Aunque puede utilizar el script tal y como está escrito, también puede modificarlo para que se ajuste a las necesidades de su organización.

Antes de empezar

Para realizar este procedimiento, la cuenta que utilice debe tener delegada la siguiente función:

  • Función Administrador de destinatarios de Exchange

  • Función Operador de cuentas para los contenedores Active Directory correspondientes 

Para obtener más información acerca de los permisos, la delegación de funciones y los derechos necesarios para administrar Exchange 2007, consulte Consideraciones sobre permisos.

Asimismo, antes de llevar a cabo este procedimiento, confirme los siguientes aspectos:

  • Se ha instalado un servidor de Exchange 2007 con la función del servidor Buzón de correo.

  • Las bases de datos de buzones de Exchange 2007 se han restaurado y se han montado en este servidor.

  • Se ha creado un nuevo bosque de Active Directory.

  • En el nuevo bosque de Active Directory no existen cuentas de usuario que coincidan con los buzones de las bases de datos de buzones restauradas.

Procedimiento

El procedimiento para generar las cuentas de usuario a partir de los datos de los buzones consta de los pasos siguientes:

  1. Utilice scripts del Shell de administración de Exchange para recopilar los datos necesarios de los buzones desconectados y, a continuación, guarde los datos en un archivo LDIF. Este paso se describe en el primer procedimiento.

  2. Utilice la herramienta LDIFDE para importar el archivo LDIF a Active Directory, con lo que las cuentas de usuario se generan en Active Directory. Este paso se describe en el segundo procedimiento.

  3. Utilice el Shell de administración de Exchange para conectar todos los buzones con las cuentas de usuario generadas por la importación del archivo LDIF a Active Directory. Este paso se describe en el tercer procedimiento.

    Nota

    Todos los pasos de este tema deben realizarse en el servidor de Exchange que hospeda las bases de datos de buzones restauradas.

Para utilizar scripts del Shell de administración con el fin de recopilar los datos necesarios de los buzones desconectados y guardarlos en un archivo LDIF para su importación a Active Directory

  1. Utilice el script siguiente para recopilar los datos necesarios de los buzones desconectados y guardarlos en un archivo LDIF. Copie el código siguiente en un archivo de texto denominado CreateLdifFromDisconnectedMailboxes.ps1 y, a continuación, guarde el archivo en la carpeta Scripts que existe en la carpeta de instalación de Exchange. En una instalación típica, sería C:\Archivos de programa\Microsoft\Exchange Server\Scripts.

    Param(
    [string] $ContainerDN,
    [string] $Database = "",
    [bool] $append = $false
    )
    
    #function to validate input parameters
    function ValidateParams
    {
    $validInputs = $true
    $errorString = ""
    
    if ($ContainerDN -eq "")
    {
    $validInputs = $false
    $errorString += "`nMissing Parameter:  The -ContainerDN parameter is required. Please pass in a valid container in which to create the user accounts."
    }
    
    if (!$ContainerDN.Contains(","))
    {
    $validInputs = $false
    $errorString += "`nInvalid Container DN.  Make sure to enclose the entire DN in double quotes or it will not be parsed properly."
    }
    
    if (!$validInputs)
    {
    Write-error "$errorString"
    }
    
    return $validInputs
    }
    
    #function to get the display name and alias from mailbox data in the Exchange store
    function ExtractDisplayNameAndAlias($obj)
    {
    [string[]]$legacyDNSplit = $obj.LegacyDN.Split('/')
    $alias = $legacyDNSplit[$legacyDNSplit.Length-1].Remove(0,3).ToLower()
    $output = "dn: CN=" + $obj.DisplayName + "," + $ContainerDN + "`r`nchangetype: add`r`nuserAccountControl: 544`r`nmsExchUserAccountControl: 0`r`npwdLastSet: -1`r`ndisplayName: " + $obj.DisplayName + "`r`nobjectClass: user`r`nsAMAccountName: " + $alias + "`r`n"
    write-output $output | out-file -filePath "c:\ldifout.ldf" -append -noClobber
    }
    
    # Function that returns true if the incoming argument is a help request
    function IsHelpRequest
    {
    param($argument)
    return ($argument -eq "-?" -or $argument -eq "-help");
    }
    
    # Function that displays the help related to this script following
    # the same format provided by get-help or <cmdletcall> -?
    function Usage
    {
    @"
    
    NAME:
    CreateLdifFromDisconnectedMailboxes.ps1
    
    SYNOPSIS:
    Finds all disconnected mailboxes on the local server and creates an LDIF file 
    with an entry for each disconnected mailbox user. Use the LDIFDE utility to import this LDIF file to Active Directory, which generates the user accounts. You can then reconnect Mailboxes 
    to these accounts by using the Connect-Mailbox cmdlet. You can
    specify a particular database, or specify no database to search all databases
    on the local server.
    
    This script is mainly used for disaster recovery scenarios where all data except  
    the mailbox databases have been lost.  In these scenarios, without a backup of Active
    Directory, you must re-create the user accounts so they can be 
    connected to existing mailboxes. This is the main objective of this script.
    
    SYNTAX:
    CreateLdifFromDisconnectedMailbox -ContainerDN <AD Container DN> 
    -Database <Identity of Database> -Append `$false|`$true
    
    AD Container DN is a valid Active Directory container in distinguished name format. This value
    must be enclosed in quotes. Database is the Identity parameter of the 
    database. You can retrieve the Identity value for all databases on the local 
    server by running the following cmdlet:
    
    get-mailboxdatabase -server Server01 | fl Identity
    
    Setting -append to `$true tells the script to append data to the current 
    c:\ldifout.ldf file instead of overwriting it. This is the recommended
    setting if you are piping output from other cmdlets to this script. If the
    -append switch is not included, the script runs automatically in overwrite mode.
    
    EXAMPLES:
    
    "Specifying Database ID"
    CreateLdifFromDisconnectedMailbox -ContainerDN "CN=Users,DC=Domain,DC=com" 
    -Database "SERVER\Storage Group\Database"
    
    "Run Against All Stores on Local Server"
    CreateLdifFromDisconnectedMailbox -ContainerDN "CN=Users,DC=Domain,DC=com" 
    
    "Pipe output of another cmdlet into this script"
    get-mailboxdatabase -server SERVER | foreach {CreateLdifFromDisconnectedMailboxes -ContainerDN 
    
    "CN=Users,DC=domain,DC=com" -Database `$_.Identity -append `$true}
    "@
    }
    
    ################################################################
    ##########################BEGIN SCRIPT##########################
    ################################################################
    
    #Check if this is a help request
    $args | foreach { if (IsHelpRequest $_) { Usage; exit; } }
    
    #Delete existing LDIF file if it is there and append is set to false
    if(!$append){$a = remove-item c:\ldifout.ldf -ea SilentlyContinue}
    
    #Validate all input parameters
    $ifValidParams = ValidateParams;
    if (!$ifValidParams) { exit; }
    
    #find all disconnected mailboxes and get required information
    if ($Database -ne "")
    {
    write "Getting disconnected mailboxes for database $Database"
    $getmbxcmd = get-mailboxstatistics -Database $Database | where {$_.DisconnectDate -ne $null}
    }
    else
    {
    write "Getting disconnected mailboxes for all databases on local server."
       $getmbxcmd = get-mailboxstatistics | where {$_.DisconnectDate -ne $null}
    }
    
    #Make sure at least one disconnected mailbox is found; if not, exit script
    if ($getmbxcmd -eq $null) {write "No disconnected mailboxes found.";exit}
    
    #loop through each disconnected mailbox and write entries to the output file
    foreach ($entry in $getmbxcmd)
    {
    ExtractDisplayNameAndAlias $entry
    }
    
    write "LDIF file successfully written to C:\ldifout.ldf."
    
  2. Inicie el Shell de administración de Exchange y, a continuación, ejecute el siguiente comando:

    CreateLdifFromDisconnectedMailboxes -ContainerDN "<DN of container to place users>"
    

    Importante

    El valor <DN del contenedor donde se van a situar los usuarios> transmitido al parámetro ContainerDN debe ser el nombre distintivo (DN) de un contenedor de Active Directory válido y debe incluirse entre comillas dobles. Por ejemplo, para situar las nuevas cuentas de usuario en la unidad organizativa (OU) Usuarios del dominio contoso.com, debe utilizar el valor "CN=Usuarios,DC=contoso,DC=com".

    El comando anterior procesa todas las bases de datos de buzones del servidor en el que se ejecuta. Si prefiere ejecutar el script en una base de datos de buzones concreta, puede utilizar el parámetro Database para especificar la base de datos deseada.

    La salida del script se guarda en el archivo ldifout.ldf del directorio raíz de la unidad C. De manera predeterminada, el script sobrescribirá este archivo si ya existe. También puede anexar el script a un archivo existente; para hacerlo, establezca el parámetro Append en $true.

    Para obtener más información acerca de la sintaxis utilizada en el script, ejecute el comando siguiente:

    CreateLdifFromDisconnectedMailboxes -?
    

Para utilizar la herramienta LDIFDE con el fin de importar el archivo LDIF a Active Directory

  1. En el símbolo del sistema, escriba ldifde.exe -i -f C:\ldifout.ldf y, a continuación, presione INTRO.

  2. Inicie Usuarios y equipos de Active Directory.

  3. Si la importación es correcta, los usuarios deben aparecer en el contenedor especificado al ejecutar el script. Si aparecen las cuentas de usuario, continúe con el procedimiento siguiente.

Para utilizar el Shell de administración de Exchange para conectar los buzones

  1. Inicie el Shell de administración de Exchange.

  2. Ejecute el comando siguiente para conectar todos los buzones de una base de datos de buzones determinada. Este comando de ejemplo supone que está conectando todos los buzones almacenados en la base de datos de buzones MBX1 del grupo de almacenamiento SG1 del servidor Server01:

    Get-MailboxStatistics | Where {$_.DisconnectDate -ne $null} | Connect-Mailbox -Database "Server01\SG1\MBX1"
    
  3. Repita el paso 2 para cualquier otra base de datos de buzones ubicada en el servidor.

  4. Reinicie el servicio de administración (IISAdmin) de Internet Information Services (IIS).

    Nota

    Si la función del servidor Acceso de cliente está instalada en un servidor distinto del servidor en el que se está realizando la operación de recuperación, reinicie el servicio de administración de IIS en ese servidor en su lugar.

  5. Reinicie el servicio Almacén de información de Microsoft Exchange (MSExchangeIS).

  6. Compruebe que los usuarios puedan ahora iniciar sesión en sus buzones.

Si tiene dificultades para resolver este problema, póngase en contacto con el Soporte técnico de Microsoft. Para obtener información acerca del contacto con el soporte técnico, visite la página Información de contacto del sitio web Ayuda y Soporte técnico de Microsoft.

Información adicional

Para obtener más información acerca de la recuperación ante desastres en Exchange 2007, consulte Recuperación ante desastres.

Para obtener más información acerca de las posibles acciones de prevención de desastres, consulte Prácticas recomendadas para minimizar el impacto de un desastre.

Para obtener instrucciones detalladas acerca de cómo utilizar la herramienta Mbconn.exe para lograr el mismo resultado en Exchange 2003 y en Exchange 2000, consulte en Microsoft Knowledge Base el artículo 271886, Cómo emplear la utilidad Mbconn para generar cuentas de Active Directory para buzones en el almacén de información.