1. Устанавливаем Windows сервер
  2. Меняем
    1. Сетевые настройки
      1. IP адрес
      2. DNS
      3. Отключаем IPv6
      4. Отключаем Netbios
    2. Имя сервера и домен
    3. Server Manager
      1. Выключаем автозапуск Manage\Server manager properties\Don't start…
      2. Разрешаем RDP Remote Desktop Enabled
  3. Перезагружаем сервер
  4. Вводим в домен в Server Manager\Local Server\Domain
  5. Перезагружаем сервер
  6. Устанавливаем апдейты, нажимаем Win+R и вводим ms-settings:windowsupdate-action или вызываем Server Manager\Local Server и выбираем Windows Updates
  7. Увеличиваем размеры журналы Security и System в EventLog
  1. Скачиваем необходимый дистрибутив CU и SU со страницы обновлений Exchange Server.
  2. При обновлении проверяем текущую версию
     Get-ExchangeServer | Sort-Object Name|% {Invoke-Command -ComputerName $_.Name -ScriptBlock { Get-Command Exsetup.exe | % { $_.FileversionInfo } }}
  3. Качаем скрипт и устанавливаем все предварительные настройки
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
    Invoke-WebRequest "https://wiki.itvideo.pro/_media/exchangeserver/set-exchangeprerequisites.ps1" -OutFile "set-exchangeprerequisites.ps1"  
    1. Устанавливаем следующие Windows компоненты
      Install-WindowsFeature server-media-foundation
      Install-WindowsFeature RSAT-ADDS
      Install-WindowsFeature NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, Web-Mgmt-Console, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-ADDS
  4. Запрещаем IPv6, как положено.
    Disable-NetAdapterBinding -Name (get-NetAdapter).name -ComponentID "ms_tcpip6" -Confirm:$false
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name "DisabledComponents" -Value 0xFF 
  5. Проверяем версию .NET
    (Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release 

    и сравниваем по таблице версий .NET

  6. Проверяем не надо ли перезапускать сервер
    If ( Test-path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" ) { Write-Host -fore Yellow "System Reboot Pending: Yes" } else { Write-host -fore Green "System Reboot Pending: No"  }
  7. Скачиваем для E2019 URL Rewrite https://www.iis.net/downloads/microsoft/url-rewrite
  1. Убеждаемся, что на диске есть минимум 8Gb места, если нет, то запускаем cleanmgr.
  2. Убедитесь, что на вашем сервере к IIS не прицеплен протухший сертификат
  3. Выключить локальный антивирус
  4. Переводим HubTransport в draining state
    1. Set-ServerComponentState -Identity  $env:COMPUTERNAME -Component HubTransport -State Draining -Requester Maintenance 
  5. Переводим очередь на другой сервер
    1. Redirect-Message -Server $env:COMPUTERNAME -Target "Другой Сервер в DAG.yourdomain.ru"
  6. Если сервер входит в DAG
    1. Определяем активный сервер
      1. Get-DatabaseAvailabilityGroup -identity dag01 -status | fl Prim*
    2. Переносим базы с активного на необходимый
      1. Move-ActiveMailboxDatabase -SkipClientExperienceChecks -Server $env:COMPUTERNAME  #ИмяСервераСКоторогоПереноситьБазы 
    3. Выводим сервер из обслуживания
      1. Suspend-ClusterNode $env:COMPUTERNAME
        Set-MailboxServer $env:COMPUTERNAME -DatabaseCopyActivationDisabledAndMoveNow $true
        Set-MailboxServer $env:COMPUTERNAME -DatabaseCopyAutoActivationPolicy Blocked
        Set-ServerComponentState $env:COMPUTERNAME -Component ServerWideOffline -State Inactive -Requester Maintenance
    4. Проверяем, что сервер в режиме обслуживания
      1. Get-ServerComponentState "ServerName” | Select Component, State
  7. Исключить сервер из обслуживания на балансировщике
  8. Перезагружаем сервер
  1. Убеждаемся, что у учётной записи есть все права Enterprise admin и Scheme admin
  2. Устанавливаем Exchange Server
    1. Перейти на подключенный диск
       cd E:/ 
    2. Подготовить схему
      ./Setup.exe /PrepareSchema /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
    3. Если новая организация, то подготавливаем AD
      ./Setup.exe /PrepareAD /OrganizationName:"YOUR_DOMAIN_WITHOUT_.LOCAL_WORD" /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
    4. Подготавливаем домены
      ./Setup.exe /PrepareAllDomains /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
    5. Запускаем setup.exe или команды ниже
    6. Exchange Server 2016
      setup /m:install /role:mb,mt /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
      1. Ключ /DoNotEnableEP_FEEWS выключает Extended protection
    7. Exchange Server 2019 CU Upgrade
      Setup.EXE /Mode:Upgrade /IAcceptExchangeServerLicenseTerms_DiagnosticDataOff /DoNotEnableEP 

      -

  3. Наблюдаем за процессом установки в отдельном окне PowerShell
    get-content -Path "C:\ExchangeSetupLogs\ExchangeSetup.log" -Tail 2 –Wait 
Set-ServerComponentState $env:COMPUTERNAME -Component ServerWideOffline -State Active -Requester Maintenance
Resume-ClusterNode $env:COMPUTERNAME
Set-MailboxServer $env:COMPUTERNAME -DatabaseCopyActivationDisabledAndMoveNow $False
Set-MailboxServer $env:COMPUTERNAME -DatabaseCopyAutoActivationPolicy Unrestricted
Set-ServerComponentState $env:COMPUTERNAME -Component HubTransport -State Active -Requester Maintenance 
  1. Вернуть иконку Exchange на TaskBar. Тыкнуть по исчезнувшей и удалить. Открыть Start menu и сделать Pin to desktop
  2. Выдаём права админу на импорт почтовых ящиков
     New-ManagementRoleAssignment –Role "Mailbox Import Export" –User Administrator 
  3. Настраиваем сертификаты
    certlm.msc
  4. Перезапускаем сервер
  5. Виртуальные дирректории
    1. Запускаем скрипт, меняющий внутренние и внешние пути
  6. Accepted domains
  7. Email address policy
  8. Receive connectors
    1. Отключаем Frontend client
    2. Разрешаем анонимную отправку для FrontEnd
    3. Настраиваем логи
  9. Send connectors
  1. Запускаем healthcheck.ps1
Get-ExchangeServer |?{$_.AdminDisplayVersion -match "15.1"}|  ft Name, ServerRole, AdminDisplayVersion -AutoSize
Get-ClusterNode 
Test-ServiceHealth 
Test-MAPIConnectivity -Database MDB01 
Test-ReplicationHealth -Server $env:COMPUTERNAME
Get-MailboxServer | ft name, *activ* 
Get-ServerComponentState $env:COMPUTERNAME
cd $exscripts; .\RedistributeActiveDatabases.ps1 -DagName DAG02 -BalanceDbsByActivationPreference -Confirm:$false 
  1. Включаем сервер в режим балансировки
  2. Включаем локальный антивирус