Generieren von Active Directory-Konten mithilfe der Postfachinformationen in der Postfachdatenbank

 

Gilt für: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Letztes Änderungsdatum des Themas: 2007-04-26

Exchange-Postfächer bestehen aus zwei Komponenten:

  • Benutzerkonto des Active Directory-Verzeichnisdiensts,

  • Postfachdaten, die in der Exchange-Postfachdatenbank gespeichert sind.

Die in der Postfachdatenbank gespeicherten Daten umfassen in begrenztem Umfang Informationen zu dem Benutzerkonto, dem das Postfach zugeordnet ist. In einem Szenario mit Datenverlust, in dem die Active Directory-Datenbank verloren geht und keine Active Directory-Sicherungen oder Systemstatussicherungen von den Domänencontrollern verfügbar sind, können Sie die Benutzerkonten ggf. mithilfe der Informationen erneut herstellen, die in der Postfachdatenbank gespeichert waren. In Microsoft Exchange Server 2003 und Exchange 2000 Server wurde diese Aufgabe mithilfe des Tools zum Herstellen einer erneuten Verbindung mit Postfächern (Mbconn.exe) durchgeführt. Weitere Informationen zu Mbconn.exe finden Sie im Microsoft Knowledge Base-Artikel 271886 Verwenden des Dienstprogramms "Mbconn" zum Generieren von Active Directory-Konten für Informationsspeicherpostfächer.

Da Sie Mbconn.exe mit Exchange Server 2007 nicht verwenden können, müssen Sie Skripts der Exchange-Verwaltungsshell verwenden, um die erforderlichen Daten aus den getrennten Postfächern zu ermitteln. Anschließend können Sie diese Daten in einer LDAP (Lightweight Directory Access Protocol) LDIF-Datei (Data Interchange Format) speichern, die dann in Active Directory importiert werden kann. Um die LDIF-Datei in Active Directory zu importieren, müssen Sie das Exchange-Tool LDIFDE (LDAP Data Interchange Format Data) verwenden. LDIFDE wird standardmäßig auf einem Computer installiert, der Microsoft Windows Server 2003 ausführt.

In diesem Thema wird erläutert, wie Skripts der Exchange-Verwaltungsshell und das Tool LDIFDE zum Generieren verloren gegangener Active Directory-Benutzerkonten mithilfe der Postfachinformationen verwendet werden, die in den Postfachdatenbanken gespeichert sind.

Wichtig

Das Skript in diesem Verfahren ist ein Beispielskript. Sie können das vorliegende Skript verwenden oder dieses an die Anforderungen Ihrer Organisation anpassen.

Bevor Sie beginnen

Damit Sie das nachstehende Verfahren ausführen können, muss Folgendes an das verwendete Konto delegiert worden sein:

  • Exchange-Empfängeradministrator-Rolle

  • Konten-Operator-Rolle für die entsprechenden Active Directory-Container

Weitere Informationen zu Berechtigungen, zum Delegieren von Rollen und zu den Rechten, die für die Verwaltung von Exchange 2007 erforderlich sind, finden Sie unter Überlegungen zu Berechtigungen.

Zum Ausführen dieses Verfahrens müssen zudem folgende Voraussetzungen erfüllt sein:

  • Ein Servercomputer mit Exchange 2007 mit der Serverfunktion Mailbox wurde installiert.

  • Exchange 2007-Postfachdatenbanken wurden wiederhergestellt und auf diesem Server bereitgestellt.

  • Eine neue Active Directory-Gesamtstruktur wurde erstellt.

  • In der neuen Active Directory-Gesamtstruktur sind keine Benutzerkonten vorhanden, die den Postfächern in den wiederhergestellten Postfachdatenbanken entsprechen.

Verfahren

Das Verfahren zum Generieren der Benutzerkonten aus Postfachdaten besteht aus den folgenden Schritten:

  1. Verwenden der Skripts der Exchange-Verwaltungsshell zum Abrufen der erforderlichen Daten aus den getrennten Postfächern und anschließendes Speichern der Daten in einer LDIF-Datei. Dieser Schritt wird im ersten Verfahren beschrieben.

  2. Verwenden des Tools LDIFDE zum Importieren der LDIF-Datei in Active Directory. Auf diese Weise werden die Benutzerkonten in Active Directory generiert. Dieser Schritt wird im zweiten Verfahren beschrieben.

  3. Verwenden der Exchange-Verwaltungsshell zum Verbinden aller Postfächer mit den Benutzerkonten, die durch den Import der LDIF-Datei in Active Directory generiert wurden. Dieser Schritt wird im dritten Verfahren beschrieben.

    Hinweis

    Alle in diesem Thema beschriebenen Schritte müssen auf dem Servercomputer mit Exchange ausgeführt werden, der als Host der wiederhergestellten Postfachdatenbanken fungiert.

So verwenden Sie die Skripts der Exchange-Verwaltungsshell zum Abrufen der erforderlichen Daten aus den getrennten Postfächern und zum Speichern der Daten in einer LDIF-Datei für den Import in Active Directory

  1. Verwenden Sie das folgende Skript, um die erforderlichen Daten aus den getrennten Postfächern abzurufen und sie in einer LDIF-Datei zu speichern. Kopieren Sie den folgenden Code in eine Textdatei namens CreateLdifFromDisconnectedMailboxes.ps1, und speichern Sie diese Datei dann im Ordner Scripts, der unter dem Ordner vorhanden ist, in dem Exchange installiert ist. In einer typischen Installation handelt es sich dabei um C:\Programme\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. Starten Sie die Exchange-Verwaltungsshell, und führen Sie dann den folgenden Befehl aus:

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

    Wichtig

    Der Wert für den <DN des Containers, in dem Benutzer gespeichert werden>, der an den Parameter ContainerDN übergeben wird, muss der DN (Distinguished Name) eines gültigen Active Directory-Containers sein und in doppelte Anführungszeichen eingeschlossen werden. Um beispielsweise die neuen Benutzerkonten in der Organisationseinheit "Benutzer" in der Domäne contoso.com zu speichern, sollten Sie den Wert "CN=Benutzer,DC=contoso,DC=com" verwenden.

    Der oben genannte Befehl verarbeitet alle Postfachdatenbanken auf dem Server, auf dem er ausgeführt wird. Wenn Sie es vorziehen, ein Skript für eine bestimmte Postfachdatenbank auszuführen, können Sie den Parameter Database zum Angeben der gewünschten Datenbank verwenden.

    Die Ausgabe des Skripts wird in der Datei ldifout.ldf im Stamm des Laufwerks C: gespeichert. Standardmäßig überschreibt das Skript diese Datei, wenn sie bereits vorhanden ist. Sie können die Ausgabe des Skripts auch wahlweise an eine vorhandene Datei anhängen, indem Sie den Parameter Append auf $true festlegen.

    Um weitere Informationen zur im Skript verwendeten Syntax zu erhalten, führen Sie den folgenden Befehl aus:

    CreateLdifFromDisconnectedMailboxes -?
    

So verwenden Sie das Tool LDIFDE zum Importieren der LDIF-Datei in Active Directory

  1. Geben Sie an der Eingabeaufforderung ldifde.exe -i -f C:\ldifout.ldf ein, und drücken Sie die EINGABETASTE.

  2. Starten Sie Active Directory-Benutzer und -Computer.

  3. Wenn der Import erfolgreich war, sollten die Benutzer in dem Container angezeigt werden, den Sie beim Ausführen des Skripts angegeben haben. Wenn die Benutzerkonten vorhanden sind, fahren Sie mit dem nächsten Verfahren fort.

So stellen Sie eine Verbindung mit den Postfächern mithilfe der Exchange-Verwaltungsshell her

  1. Starten Sie die Exchange-Verwaltungsshell.

  2. Führen Sie den folgenden Befehl aus, um eine Verbindung mit allen Postfächern für eine bestimmte Postfachdatenbank herzustellen. Dieses Befehlsbeispiel geht davon aus, dass Sie eine Verbindung mit allen Postfächern herstellen, die in der Postfachdatenbank MBX1 in der Speichergruppe SG1 auf dem Server Server01 gespeichert sind:

    Get-MailboxStatistics | Where {$_.DisconnectDate -ne $null} | Connect-Mailbox -Database "Server01\SG1\MBX1"
    
  3. Wiederholen Sie Schritt 2 für alle weiteren Postfachdatenbanken, die auf dem Server gespeichert sind.

  4. Starten Sie den IIS-Verwaltungsdienst (IISAdmin) neu.

    Hinweis

    Wenn die Serverfunktion ClientAccess auf einem anderen Server als dem Server installiert ist, für den Sie den Wiederherstellungsvorgang durchführen, starten Sie den IIS-Verwaltungsdienst auf dem betreffenden Server neu.

  5. Starten Sie den Microsoft Exchange-Informationsspeicherdienst (MSExchangeIS) neu.

  6. Vergewissern Sie sich, dass sich die Benutzer nun an ihren Postfächern anmelden können.

Wenden Sie sich an den Microsoft-Produktsupport, wenn bei der Behebung dieses Problems Schwierigkeiten auftreten. Weitere Informationen dazu, wie Sie sich mit dem Support in Verbindung setzen können, finden Sie auf der Seite Kontakt der Microsoft Hilfe und Support-Website.

Weitere Informationen

Weitere Informationen zur Wiederherstellung nach Datenverlusten in Exchange 2007 finden Sie unter Wiederherstellung nach Datenverlust.

Weitere Informationen zur Vorbereitung auf einen Notfall finden Sie unter Bewährte Methoden zum Minimieren der Auswirkungen des Ausfalls von Systemkomponenten.

Eine ausführliche Beschreibung der Schritte bei der Verwendung des Tools Mbconn.exe zum Erzielen des gleichen Ergebnisses in Exchange 2003 oder Exchange 2000 finden Sie im Microsoft Knowledge Base-Artikel 271886 Verwenden des Dienstprogramms "Mbconn" zum Generieren von Active Directory-Konten für Informationsspeicherpostfächer.