none
Установка Exchange 2016 на Win 2012r2 RRS feed

  • Вопрос

  • Всем привет.
    Проблема с установкой Exchange 2016 на Win 2012r2.
    В конторе возникла необходимость установки Exchange.
    Вначале была проведена установка русской Exchange 2016 на русскую Win 2012r2 на виртуалке Hyper-V.
    Установка прошла не совсем корректно, ряд служб отсутствовали, в системных логах сплошная краснота,
    вобщем после чтения инета и советов коллег было решено поставить все на родную(англ.) версию,
    англ. Exchange 2016 и Win 2012r2, благо все ставилось на виртуалке.
    Предварительно была проведена чистка ADSIEdit в разделах:
    CN=Configuration, DC=DOMAIN,DC=UA
    CN=Services
    Удалено
    CN=Microsoft Exchange
    CN=Microsoft Exchange Autodiscover

    CN=Default naming context, DC=DOMAIN,DC=UA
    Удалено
    CN=Microsoft Exchange Security Groups
    CN=Microsoft Exchange Security Objects

    Витруалка была создана заново, с таким-же именем как и прошлая и введена в домен.
    Установка прервалась на 11 шаге вот с таким сообщением:

    Error:
    The following error was generated when "$error.Clear(); 
              if (!$RoleIsDatacenter -and !$RoleIsDatacenterDedicated)
              {
                $createNewOab = $false;
                $oabName = $null;
                $oabAddressList = $null;
                $oabVdirs = $null;
                $oabGlobalWebDistribution = $false;
                $oabConfiguredAttributes = $null;
    
                Write-ExchangeSetupLog -Info ("Looking for an existing default OAB");
                $defaultOab = Get-OfflineAddressBook -DomainController:$RoleDomainController | where {$_.IsDefault};
                if ($defaultOab -ne $null)
                {
                  Write-ExchangeSetupLog -Info ("Found a default OAB: " + $defaultOab.Name + "; checking its version");
                  if ($defaultOab.ExchangeVersion.CompareTo([Microsoft.Exchange.Data.ExchangeObjectVersion]::Exchange2012) -lt 0)
                  {
                    $e15Oab = Get-OfflineAddressBook -DomainController:$RoleDomainController | where {$_.ExchangeVersion.CompareTo([Microsoft.Exchange.Data.ExchangeObjectVersion]::Exchange2012) -eq 0};
                    if ($e15Oab -eq $null)
                    {
                      Write-ExchangeSetupLog -Info ("Existing OAB is Exchange 2010 or older; will create a new OAB");
                      $createNewOab = $true;
                      $oabName = $defaultOab.Name + " (Ex2013)";
                      $oabAddressList = $defaultOab.AddressLists;
                      $oabGlobalWebDistribution = $defaultOab.GlobalWebDistributionEnabled;
                      $oabConfiguredAttributes = $defaultOab.ConfiguredAttributes;
                    }
                    else
                    {
                      Write-ExchangeSetupLog -Info ("Already has an existing Exchange 2013 OAB:" + $e15Oab.Name + "; will not create a new OAB");
                    }
                  }
                  else
                  {
                    Write-ExchangeSetupLog -Info ("Existing OAB is Exchange 2013 or newer; will not create a new OAB");
                  }
                }
                else
                {
                  Write-ExchangeSetupLog -Info ("Did not find a default OAB; will create one");
                  $createNewOab = $true;
                  
                  $oabName = [Microsoft.Exchange.Data.Directory.SystemConfiguration.OfflineAddressBook]::DefaultName;
                  $nonDefaultOabWithDefaultName = Get-OfflineAddressBook $oabName -DomainController:$RoleDomainController -ErrorAction SilentlyContinue | where {$_.IsDefault -eq $false};
                  if ($nonDefaultOabWithDefaultName -ne $null)
                  {
                    $createNewOab = $false;
                    Write-ExchangeSetupLog -Warning `
                      ("Offline address book " + `
                      $nonDefaultOabWithDefaultName.Name + `
                      " already exists: " + `
                      $nonDefaultOabWithDefaultName.DistinguishedName + `
                      ". Use administrative tools to change it to default OAB.");
                  }
    
                  $allGals = @(Get-GlobalAddressList -DomainController:$RoleDomainController | where {$_.IsDefaultGlobalAddressList});
                  if ($allGals -eq $null -or $allGals.Count -eq 0)
                  {
                    $createNewOab = $false;
                    Write-ExchangeSetupLog -Warning `
                      ("Couldn't find the default global address list. The default offline address book can't be created.");
                  }
                  elseif ($allGals.Count -gt 1)
                  {
                    $createNewOab = $false;
                    Write-ExchangeSetupLog -Warning `
                      ("Found " + $allGals.Count + " default global address lists. You can have only one default global address list in your organization. The default offline address book will not be created.");
                  }
                  else
                  {
                    $oabAddressList = $allGals[0];
                    Write-ExchangeSetupLog -Info ("OAB will be based on default GAL: " + $oabAddressList.Name);
                  }
                }
    
                if ($createNewOab)
                {
                  if ($oabGlobalWebDistribution -eq $false)
                  {
                    $currentAdSiteDn = (Get-ExchangeServer $RoleFqdnOrName -DomainController:$RoleDomainController).Site.DistinguishedName;
                    $allOabVdirs = @(Get-OabVirtualDirectory -ADPropertiesOnly -DomainController:$RoleDomainController);
                    $e15MinimumServerVersion = New-Object Microsoft.Exchange.Data.ServerVersion([Microsoft.Exchange.Data.Directory.SystemConfiguration.Server]::E15MinVersion);
                    if ($allOabVdirs -ne $null -and $allOabVdirs.Count -gt 0)
                    {
                      foreach ($oabVdir in $allOabVdirs)
                      {
                        if ([Microsoft.Exchange.Data.ServerVersion]::Compare($oabVdir.AdminDisplayVersion, $e15MinimumServerVersion) -gt 0)
                        {
                          $oabVdirSiteDn = (Get-ExchangeServer $oabVdir.Server -DomainController:$RoleDomainController).Site.DistinguishedName;
                          if ($oabVdirSiteDn -eq $currentAdSiteDn)
                          {
                            $oabVdirs = $oabVdir;
                            break;
                          }
                          elseif ($oabVdirs -eq $null)
                          {
                            $oabVdirs = $oabVdir;
                          }
                        }
                      }
                    }
    
                    if ($oabVdirs -ne $null)
                    {
                      Write-ExchangeSetupLog -Info ("OAB will be distributed to OAB virtual directory " + $oabVdirs.Name);
                    }
                    else
                    {
                      Write-ExchangeSetupLog -Info ("Could not find any OAB virtual directories; OAB will be configured without distribution.");
                    }
                  }
    
                  try
                  {
                    Write-ExchangeSetupLog -Info ("Creating new default OAB.");
                    $newOab = New-OfflineAddressBook `
                      -Name $oabName `
                      -AddressLists $oabAddressList `
                      -VirtualDirectories $oabVdirs `
                      -GlobalWebDistributionEnabled $oabGlobalWebDistribution `
                      -IsDefault $true `
                      -DomainController:$RoleDomainController;
                  }
                  catch [Microsoft.Exchange.Data.Directory.ADObjectAlreadyExistsException]
                  {
                    Write-ExchangeSetupLog -Warning ("Tried to create new default OAB but the object already exists; it may have been created by another instance of setup.");
                  }
    
                  if ($oabConfiguredAttributes -ne $null)
                  {
                    Write-ExchangeSetupLog -Info ("Setting OAB ConfiguredAttributes to: " + $oabConfiguredAttributes);
                    Set-OfflineAddressBook $newOab -ConfiguredAttributes $oabConfiguredAttributes -DomainController:$RoleDomainController;
                  }
                }
              }
            " was run: "Microsoft.Exchange.Data.DataValidationException: Database is mandatory on UserMailbox.
       at Microsoft.Exchange.Data.Directory.ADDataSession.ObjectsFromEntries[TResult](SearchResultEntryCollection entries, String originatingServerName, IEnumerable`1 properties, ADRawEntry dummyInstance)
       at Microsoft.Exchange.Data.Directory.ADGenericPagedReader`1.GetNextPage()
       at Microsoft.Exchange.Data.Directory.ADGenericPagedReader`1.<GetEnumerator>d__0.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
       at Microsoft.Exchange.Data.Storage.OrganizationMailbox.InternalGetOrganizationMailboxesByCapability(IRecipientSession session, OrganizationCapability capability, QueryFilter optionalFilter)
       at Microsoft.Exchange.ProvisioningAgent.NewOfflineAddressbookProvisioningHandler.FindGeneratingMailbox(String domainController, OrganizationId orgId)
       at Microsoft.Exchange.ProvisioningAgent.NewOfflineAddressbookProvisioningHandler.ProvisionDefaultProperties(IConfigurable readOnlyIConfigurable)
       at Microsoft.Exchange.Provisioning.ProvisioningLayer.ProvisionDefaultPropertiesImpl(Task task, IConfigurable temporaryObject, IConfigurable dataObject, Boolean checkProvisioningLayerAvailability)
       at Microsoft.Exchange.Provisioning.ProvisioningLayer.ProvisionDefaultProperties(Task task, IConfigurable temporaryObject, IConfigurable dataObject, Boolean checkProvisioningLayerAvailability)
       at Microsoft.Exchange.Configuration.Tasks.NewTaskBase`1.InternalStateReset()
       at Microsoft.Exchange.Configuration.Tasks.Task.<ProcessRecord>b__b()
       at Microsoft.Exchange.Configuration.Tasks.Task.InvokeRetryableFunc(String funcName, Action func, Boolean terminatePipelineIfFailed)".
    Помогите пожалуйста советом.


    Александр Литвинов

    23 марта 2019 г. 12:09

Ответы

  • Еще раз всем привет.
    Спешу сообщить что проблема удаления неудачной установки была решена.
    Если кому понадобиться сообщаю подробности.
    Итак, 
    1. Первая попытка установки русской Exchange 2016 на русскую Win2012r2
    закончилась неудачей, в принципе оно работало, но шли косяки, небыло части служб,
    в системных журналах краснота, вобщем по всем рекомендациям надо ставить
    английскую на английскую.
    2. Провелось удалиние Exchange 2016 и чистка АД (как позже выяснилось неполное), и
    установка английской на английскую. Результат этой операции описан в заголовке поста.
    3. После углубленного изучения проблемы опять деинсталируем Exchange 2016 
    как описано тут: http://it.livetravel.spb.ru/blog/install-first-ms-exchange-server-2016/
    Далее внимательно и аккуратно чистим AD по рекомендациям автора admin_dm живого журнала
    https://admin-dm.livejournal.com/151171.html
    содержимое скопирую:

    Полное удаление Exchange из Active Directory
    CN=Configuration,DC=DOMAIN,DC=LOCAL
    CN=Services
    ->; DELETE
    CN=Microsoft Exchange
    CN=Microsoft Exchange Autodiscover

    CN=Default naming context,DC=DOMAIN,DC=LOCAL
    ->; DELETE
    CN=Microsoft Exchange Security Groups
    CN=Microsoft Exchange Security Objects

    Additional steps:

    Hard Disk:
    On the server’s hard disk you’ve to DELETE the Exchange Server installation folder.
    Usually it’s C:\Program Files\Microsoft\Exchange Server

    IIS:
    DELETE the Exchange Back End and Front End websites with the IIS-Manager

    AD Users and Computers:
    DELETE the following users in the “Users” container:

    DiscoverySearch Mailbox{GUID}
    Exchange Online-ApplicationAccount
    FederatedEmail.GUID
    Migration.GUID
    *SystemMailbox{GUID}
    *HealthMailboxGUID

    Registry:
    DELETE the key “ExchangeServer” under:
    HKLM\Software\Microsoft

    DELETE the keys “MSExchange*” under:
    HKLM\CurrentControlSet\Services

    После чего установка прошла на ура.
    Тему закрываем.
    Спасибо Антону за участие.

    Александр Литвинов

    26 марта 2019 г. 6:21

Все ответы

  • Приветствую.

    Посмотрите схожую с вашей тему:

    Корректное удаление Exchange Server 2016


    Я не волшебник, я только учусь MCP, CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте нажать на кнопку "Пометить как ответ" или проголосовать за полезное сообщение. Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть без каких-либо гарантий. Блог IT Инженера, Twitter, YouTube, GitHub, Instagram

    23 марта 2019 г. 12:24
    Модератор
  • Антон, спасибо за оперативный отклик. 
    По этой теме я уже ходил, но к сожалению в ней самая главная
    ссылка на Максима Баракина http://smtp25.ru/archives/1054 "мертвая".
    Сдается мне что виной всему в моей проблеме - недостаточная чистка АД после неудачной первой
    установки Exchange.
    Видимо самый простой способ решения моей проблемы - вычистить АД (но уже корректно), снести
    виртуалку с почтовиком и установить все заново.
    Осталось найти правильную чистку АД.



    Александр Литвинов


    • Изменено Al_7 23 марта 2019 г. 14:28
    23 марта 2019 г. 14:25
  • Посмотрите статью Какие изменения были внесены в Active Directory при установке Exchange?

    Я не волшебник, я только учусь MCP, CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте нажать на кнопку "Пометить как ответ" или проголосовать за полезное сообщение. Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть без каких-либо гарантий. Блог IT Инженера, Twitter, YouTube, GitHub, Instagram

    23 марта 2019 г. 14:54
    Модератор
  • Антон, спасибо за оперативный отклик. 
    По этой теме я уже ходил, но к сожалению в ней самая главная
    ссылка на Максима Баракина http://smtp25.ru/archives/1054 "мертвая".
    Сдается мне что виной всему в моей проблеме - недостаточная чистка АД после неудачной первой
    установки Exchange.
    Видимо самый простой способ решения моей проблемы - вычистить АД (но уже корректно), снести
    виртуалку с почтовиком и установить все заново.
    Осталось найти правильную чистку АД.



    Александр Литвинов


    Мертвую ссылку часто можно найти на archive.org В частности, данная ссылка там есть.

    Но дело в том, что информация о корректной чистке там тоже отсутсвует. Потому что штатная процедура "корректной чистки сервера/базы данных Exchange из AD" не предусмотрена - предусмотрена процедура восстановления существующего сервера и удаления с него Exchange.

    В вашем случае, похоже, программе установки не нравится то, что используемый для генерации OAB служебный п/я (arbitration mailbox) не имеет ссылки на БД. 

    Я бы на вашем месте, раз у вас нет работоспособного сервера Exchange, удалил бы из OU Microsoft Exchange System Objects все учетные записи, и выполнил setup /PrepareAD - эта операция должна создать все необходимые объекты служебных п/я.

    Но всё это - без гарантии.


    Слава России!

    23 марта 2019 г. 19:59
  • Еще раз всем привет.
    Спешу сообщить что проблема удаления неудачной установки была решена.
    Если кому понадобиться сообщаю подробности.
    Итак, 
    1. Первая попытка установки русской Exchange 2016 на русскую Win2012r2
    закончилась неудачей, в принципе оно работало, но шли косяки, небыло части служб,
    в системных журналах краснота, вобщем по всем рекомендациям надо ставить
    английскую на английскую.
    2. Провелось удалиние Exchange 2016 и чистка АД (как позже выяснилось неполное), и
    установка английской на английскую. Результат этой операции описан в заголовке поста.
    3. После углубленного изучения проблемы опять деинсталируем Exchange 2016 
    как описано тут: http://it.livetravel.spb.ru/blog/install-first-ms-exchange-server-2016/
    Далее внимательно и аккуратно чистим AD по рекомендациям автора admin_dm живого журнала
    https://admin-dm.livejournal.com/151171.html
    содержимое скопирую:

    Полное удаление Exchange из Active Directory
    CN=Configuration,DC=DOMAIN,DC=LOCAL
    CN=Services
    ->; DELETE
    CN=Microsoft Exchange
    CN=Microsoft Exchange Autodiscover

    CN=Default naming context,DC=DOMAIN,DC=LOCAL
    ->; DELETE
    CN=Microsoft Exchange Security Groups
    CN=Microsoft Exchange Security Objects

    Additional steps:

    Hard Disk:
    On the server’s hard disk you’ve to DELETE the Exchange Server installation folder.
    Usually it’s C:\Program Files\Microsoft\Exchange Server

    IIS:
    DELETE the Exchange Back End and Front End websites with the IIS-Manager

    AD Users and Computers:
    DELETE the following users in the “Users” container:

    DiscoverySearch Mailbox{GUID}
    Exchange Online-ApplicationAccount
    FederatedEmail.GUID
    Migration.GUID
    *SystemMailbox{GUID}
    *HealthMailboxGUID

    Registry:
    DELETE the key “ExchangeServer” under:
    HKLM\Software\Microsoft

    DELETE the keys “MSExchange*” under:
    HKLM\CurrentControlSet\Services

    После чего установка прошла на ура.
    Тему закрываем.
    Спасибо Антону за участие.

    Александр Литвинов

    26 марта 2019 г. 6:21