Come generare account di Active Directory utilizzando le informazioni sulla cassetta postale nel database delle cassette postali

 

Si applica a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Ultima modifica dell'argomento: 2007-04-26

Le cassette postali di Exchange sono costituite da due componenti:

  • Account utente del servizio directory di Active Directory

  • Dati cassetta postale archiviati nel database delle cassette postali di Exchange

I dati archiviati nel database delle cassette postali includono un numero limitato di informazioni sull'account utente al quale è associata la cassetta postale. In uno scenario di emergenza, quale la perdita del database di Active Directory senza che siano disponibili backup di Active Directory né backup dello stato del sistema dai controller di dominio, gli account utente potrebbero venire ricreati utilizzando le informazioni precedentemente archiviate nel database delle cassette postali. In Microsoft Exchange Server 2003 e Exchange 2000 Server questa attività veniva eseguita utilizzando lo strumento di riconnessione cassetta postale (Mbconn.exe). Per ulteriori informazioni su Mbconn.exe, vedere l'articolo 271886 della Microsoft Knowledge Base, How to use the Mbconn utility to generate Active Directory accounts for information store mailboxes

Poiché non è possibile utilizzare Mbconn.exe con Exchange Server 2007, è necessario utilizzare gli script di Exchange Management Shell per raccogliere i dati necessari dalle cassette postali disconnesse. È quindi possibile salvare i dati in un file LDIF (Lightweight Directory Access Protocol (LDAP) Data Interchange Format), che può essere successivamente importato in Active Directory. Per importare il file LDIF in Active Directory, è necessario utilizzare lo strumento LDIFDE (Lightweight Directory Access Protocol (LDAP) Data Interchange Format Data) di Exchange. LDIFDE è installato per impostazione predefinita in un computer che esegue Microsoft Windows Server 2003. 

In questo argomento viene descritto come utilizzare gli script di Exchange Management Shell e lo strumento LDIFDE per generare account utente di Active Directory perduti utilizzando le informazioni sulla cassetta postale archiviate nel database delle cassette postali.

Importante

Nella procedura descritta di seguito viene utilizzato uno script di esempio. Sebbene sia possibile utilizzare lo script così come è scritto, è anche possibile modificarlo per soddisfare le esigenze dell'organizzazione.

Informazioni preliminari

Per eseguire questa procedura, è necessario utilizzare un account che disponga della seguente delega:

  • Ruolo Exchange Recipient Administrator

  • Ruolo Account Operator per i contenitori di Active Directory applicabili

Per ulteriori informazioni sulle autorizzazioni, sulla delega dei ruoli e sui diritti necessari per l'amministrazione di Exchange 2007, vedere Considerazioni sulle autorizzazioni.

Inoltre, prima di eseguire la procedura descritta di seguito, accertarsi che siano soddisfatte le seguenti condizioni:

  • È stato installato un server di Exchange 2007 con il ruolo del server Cassette postali.

  • I database delle cassette postali di Exchange 2007 sono stati ripristinati e montati su questo server.

  • È stata creata una nuova foresta di Active Directory.

  • Nella nuova foresta di Active Directory non sono presenti account utente corrispondenti alle cassette postali dei database delle cassette postali ripristinate.

Procedura

La procedura per generare gli account utente dai dati delle cassette postali comprende i seguenti passaggi:

  1. Utilizzare gli script di Exchange Management Shell per raccogliere i dati necessari dalle cassette postali disconnesse, quindi salvare i dati in un file LDIF. Questo passaggio viene descritto nella prima procedura.

  2. Utilizzare lo strumento LDIFDE per importare il file LDIF in Active Directory, che genera gli account utente in Active Directory. Questo passaggio viene descritto nella seconda procedura.

  3. Utilizzare Exchange Management Shell per connettere tutte le cassette postali agli account utente generati importando il file LDIF in Active Directory. Questo passaggio viene descritto nella terza procedura.

    Nota

    È necessario eseguire tutti i passaggi descritti in questo argomento sul server Exchange che ospita i database delle cassette postali ripristinate.

Per utilizzare gli script di Exchange Management Shell per raccogliere i dati necessari dalle cassette postali disconnesse e salvare i dati in un file LDIF da importare in Active Directory

  1. Utilizzare il seguente script per raccogliere i dati necessari dalle cassette postali disconnesse e salvarli in un file LDIF. Copiare il seguente codice in un file di testo denominato CreateLdifFromDisconnectedMailboxes.ps1, quindi salvare il file nella cartella Scripts presente nella cartella in cui è installato Exchange. In un'installazione tipica, il percorso è C:\Programmi\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. Avviare Exchange Management Shell, quindi eseguire il seguente comando:

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

    Importante

    Il valore <DN del contenitore in cui collocare gli utenti> passato al parametro ContainerDN deve essere il nome distinto (DN) di un contenitore di Active Directory valido e deve essere racchiuso tra virgolette doppie. Ad esempio, per collocare i nuovi account utente nell'unità organizzativa (OU) Users nel dominio contoso.com, è necessario utilizzare il valore "CN=Users,DC=contoso,DC=com".

    Il comando precedente consente di elaborare tutti i database delle cassette postali sul server nel quale viene eseguito. Se si preferisce eseguire lo script solo su un database delle cassette postali specifico, è possibile utilizzare il parametro Database per specificare il database desiderato.

    L'output dello script viene salvato nel file ldifout.ldf nella cartella principale dell'unità C. Per impostazione predefinita, lo script sovrascrive il file eventualmente esistente. È anche possibile impostare il parametro Append su $true per fare in modo che lo script aggiunga l'output al file esistente.

    Per ulteriori informazioni sulla sintassi utilizzata nello script, eseguire il seguente comando:

    CreateLdifFromDisconnectedMailboxes -?
    

Per utilizzare lo strumento LDIFDE per importare il file LDIF in Active Directory

  1. Al prompt dei comandi digitare ldifde.exe -i -f C:\ldifout.ldf, quindi premere INVIO.

  2. Avviare Utenti e computer di Active Directory.

  3. Una volta completata l'importazione, gli utenti vengono visualizzati nel contenitore specificato al momento dell'esecuzione dello script. Verificare che gli account utente siano presenti, quindi passare alla procedura successiva.

Per utilizzare Exchange Management Shell per connettere le cassette postali

  1. Avviare Exchange Management Shell.

  2. Eseguire il comando riportato di seguito per connettere tutte le cassette postali in un database delle cassette postali specifico. Nel comando di esempio descritto di seguito si presuppone che vengano connesse tutte le cassette postali archiviate nel database delle cassette postali MBX1 nel gruppo di archiviazione SG1 del server Server01:

    Get-MailboxStatistics | Where {$_.DisconnectDate -ne $null} | Connect-Mailbox -Database "Server01\SG1\MBX1"
    
  3. Ripetere il passaggio 2 per ciascun database delle cassette postali aggiuntivo che si trova nel server.

  4. Riavviare il servizio Amministrazione di IIS (Internet Information Services) (IISAdmin).

    Nota

    Se il ruolo del server Accesso client è installato in un server diverso da quello per il quale si sta eseguendo l'operazione di ripristino, riavviare il servizio amministrazione di IIS su quest'ultimo.

  5. Riavviare il Servizio Archivio informazioni di Microsoft Exchange (MSExchangeIS).

  6. Verificare che gli utenti possano accedere alle proprie cassette postali.

In caso di difficoltà nella risoluzione di questo problema, contattare il Supporto Tecnico Clienti Microsoft. Per informazioni su come contattare il supporto tecnico, visitare la pagina Contattaci del sito Web Supporto Tecnico Clienti Microsoft.

Ulteriori informazioni

Per ulteriori informazioni sul ripristino d'emergenza in Exchange 2007, vedere Ripristino d'emergenza.

Per ulteriori informazioni su come prepararsi per un'emergenza, vedere Procedure consigliate per ridurre le conseguenze di un errore irreversibile.

Per ulteriori informazioni su come utilizzare lo strumento Mbconn.exe per ottenere lo stesso risultato in Exchange 2003 o Exchange 2000, vedere l'articolo 271886 della Microsoft Knowledge Base, How to use the Mbconn utility to generate Active Directory accounts for information store mailboxes (informazioni in lingua inglese).