Почтовые ящики Exchange состоят из двух компонентов:

Данные, хранящиеся в базе данных почтовых ящиков, включают ограниченный объем сведений об учетной записи пользователя, с которой связан почтовый ящик. В случае сбоя, при котором база данных Active Directory утеряна, а из доменов контроллера недоступны резервные копии Active Directory или состояния системы, можно заново создать учетные записи пользователей с помощью данных, хранящихся в базе данных почтовых ящиков. В Microsoft Exchange Server 2003 и Exchange 2000 Server эта задача выполняется с помощью средства повторного подключения к почтовому ящику (Mbconn.exe). Дополнительные сведения о средстве Mbconn.exe см. в статье 271886 базы данных Майкрософт Использование служебной программы Mbconn для создания учетных записей Active Directory для почтовых ящиков банка данных (на английском языке). 

Поскольку средство Mbconn.exe нельзя использовать с сервером Exchange Server 2007, для сбора необходимых данных из отключенных почтовых ящиков следует использовать сценарии командной консоли Exchange. Эти данные можно сохранить в LDIF-файл (LDAP Data Interchange Format), который затем можно импортировать в Active Directory. Чтобы импортировать LDIF-файл в Active Directory, необходимо воспользоваться средством LDIFDE (LDAP Data Interchange Format Data Exchange). Средство LDIFDE устанавливается по умолчанию на компьютер с Microsoft Windows Server 2003. 

В данном разделе описывается использование сценариев командной консоли Exchange и средства LDIFDE для повторного создания утерянных учетных записей пользователей Active Directory с помощью данных почтовых ящиков, хранящихся в базах данных почтовых ящиков.

Важно!
Сценарий, приведенный в данной процедуре, является примером. Хотя этот сценарий можно использовать в исходном виде, его также можно изменить в соответствии с потребностями организации.

Предварительная подготовка

Для выполнения описанных ниже действий используемой учетной записи необходимо делегировать следующие роли:

  • роль администратора получателей Exchange;

  • роль оператора учетных записей для соответствующих контейнеров Active Directory.

Дополнительные сведения о разрешениях, делегировании ролей и правах, необходимых для администрирования сервера Exchange 2007, см. в разделе Вопросы, связанные с разрешениями.

Кроме того, перед выполнением этих действий убедитесь в следующем:

  • установлен сервер Exchange 2007 с ролью сервера почтовых ящиков;

  • базы данных почтовых ящиков Exchange 2007 на этом сервере восстановлены и подключены;

  • создан новый лес Active Directory;

  • в новом лесу Active Directory отсутствуют учетные записи пользователей, соответствующие почтовым ящикам в восстановленных базах данных почтовых ящиков.

Порядок действий

Процедура создания учетных записей пользователей на основе данных почтовых ящиков состоит из указанных ниже действий.

  1. Использование сценариев командной консоли Exchange для сбора необходимых данных из отключенных почтовых ящиков и сохранение данных в LDIF-файл. Это действие описано в первой процедуре.

  2. Использование средства LDIFDE для импорта LDIF-файла в Active Directory и создание учетных записей пользователей Active Directory. Это действие описано во второй процедуре.

  3. Использование командной консоли Exchange для подключения всех почтовых ящиков к учетным записям пользователей, созданным путем импорта LDIF-файла в Active Directory. Это действие описано в третьей процедуре.

    Примечание.
    Все действия в данном разделе необходимо выполнять на сервере Exchange, на котором размещены восстановленные базы данных почтовых ящиков.

Использование сценариев командной консоли Exchange для сбора необходимых данных из отключенных почтовых ящиков и сохранения данных в LDIF-файл для импорта в Active Directory

  1. Используйте приведенный ниже сценарий для сбора необходимых данных из отключенных почтовых ящиков и сохранения данных в LDIF-файл. Скопируйте указанный ниже код в текстовый файл с именем CreateLdifFromDisconnectedMailboxes.ps1 и сохраните этот файл в папку Scripts, расположенную в папке, в которую установлен сервер Exchange. При типичной установке это папка C:\Program Files\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. Откройте командную консоль Exchange и выполните следующую команду:

    Копировать код
    CreateLdifFromDisconnectedMailboxes -ContainerDN "<DN of container to place users>"
    
    Важно!
    Значение <Различающееся имя контейнера для размещения пользователей>, переданное параметру ContainerDN, должно быть различающимся именем допустимого контейнера Active Directory и должно быть заключено в двойные кавычки. Например, чтобы поместить новые учетные записи пользователей в подразделение Users (пользователи) домена contoso.com, необходимо указать значение "CN=Users,DC=contoso,DC=com".

    Предыдущая команда обрабатывает все базы данных почтовых ящиков на том сервере, на котором она выполняется. Если необходимо выполнить сценарий для определенной базы данных почтовых ящиков, можно указать требуемую базу данных с помощью параметра Database.

    Выходные данные сценария сохраняются в файл ldifout.ldf в корневом каталоге диска C. По умолчанию сценарий перезапишет этот файл, если он уже существует. Также можно дописать данные в существующий файл, присвоив в сценарии параметру Append значение $true.

    Для получения дополнительных сведений о синтаксисе, используемом в сценарии, выполните следующую команду:

    Копировать код
    CreateLdifFromDisconnectedMailboxes -?
    

Использование средства LDIFDE для импорта LDIF-файла в Active Directory

  1. В командной строке введите ldifde.exe -i -f C:\ldifout.ldf и нажмите клавишу «ВВОД».

  2. Запустите оснастку «Пользователи и компьютеры Active Directory».

  3. В случае успешного выполнения импорта пользователи должны появиться в контейнере, указанном при запуске сценария. Если учетные записи пользователей появились, перейдите к следующей процедуре.

Использование командной консоли Exchange для подключения почтовых ящиков

  1. Запустите командную консоль Exchange.

  2. Чтобы подключить все почтовые ящики в определенной базе данных почтовых ящиков, выполните указанную ниже команду. В данной команде предполагается, что подключаются все почтовые ящики, хранящиеся в базе данных почтовых ящиков MBX1 в группе хранения SG1 на сервере Server01:

    Копировать код
    Get-MailboxStatistics | Where {$_.DisconnectDate -ne $null} | Connect-Mailbox -Database "Server01\SG1\MBX1"
    
  3. Повторите действие 2 для всех остальных баз данных почтовых ящиков, расположенных на сервере.

  4. Перезапустите службу IIS Admin.

    Примечание.
    Если роль сервера клиентского доступа установлена на сервере, отличном от сервера, на котором выполняется операция восстановления, перезапустите службу IIS Admin на этом сервере.
  5. Перезапустите службу банка данных Microsoft Exchange (MSExchangeIS).

  6. Убедитесь, что пользователи теперь могут входить в свои почтовые ящики.

В случае затруднений с решением данной проблемы обратитесь в службу технической поддержки Майкрософт. Дополнительные сведения об обращении в службу поддержки см. на веб-странице Свяжитесь с нами веб-узла Справка и поддержка Microsoft (на английском языке).

Дополнительные сведения

Дополнительные сведения об аварийном восстановлении в Exchange 2007 см. в разделе Аварийное восстановление.

Дополнительные сведения о подготовке к возможному сбою см. в разделе Практические рекомендации по уменьшению последствий аварий.

Подробные сведения об использовании средства Mbconn.exe для получения того же результата в Exchange 2003 или Exchange 2000 см. в статье 271886 базы знаний Майкрософт Использование служебной программы Mbconn для создания учетных записей Active Directory для почтовых ящиков банка данных (на английском языке).