Приборка групп рассылок в Exchange

В нашей компании используется MS Exchange Server, в нём создано ~2000 групп рассылок: ~1700 обычных и ~300 динамических, и все это хозяйство держит под собой 2800 e-mail адресов.

Хозяев групп нет, а если и есть, то давно уволились, какого-то реестра тоже нет.

В результате, для одного департамента есть такие группы:

  • DISTRIB-Отдел;
  • Distrib_отдел;
  • Отделъ-Пермь;
  • DISTRIB_IT_Otdel.

И столько же динамических:

  • Рассылка-Отдел (Москва);
  • Рассылка-Отдел (Общая);
  • Рассылка Пермский ф-л (Отдел);
  • DST-PRM_NOT_OTDEL.

Читать далее «Приборка групп рассылок в Exchange»

Поиск переадресации в Exchange

Коллеги поделились рецептом:

Пользователь получает чужую рассылку, направленную 100500 получателям.

Возник вопрос — как узнать на ком из этих получателей стоит переадресация на этого пользователя.

А вот ответ с фильтрацией по имени сервера, которое можно обнаружить в трекинге почтовых сообщений:

Get-mailbox -server mbx02| select DisplayName,ForwardingAddress | where {$_.ForwardingAddress -ne $Null}|out-gridview

Скрипт по включению режима обслуживания MS Exchange 2013

Изредка я занимаюсь обслуживанием почтовый серверов MS Exchange. Поставить обновления и кумулятивные пакеты — в принципе несложно.

В очередной раз выполняя процедуру по выводу сервера в режим обслуживания, я подумал — почему бы не написать скрипт, содержащий шесть PowerShell-командлетов вида

Set-MailboxServer <Servername> -DatabaseCopyAutoActivationPolicy Blocked

в которые еще и нужно добавить имя сервера, выводимого в режим обслуживания.

В общем, я написал скрипт, который при запуске с сервера MS Exchange спрашивает «выберите какую операцию вы хотите выполнить»: ввод в режим обслуживания или выход из него.

В зависимости от выбранной опции и роли сервера скрипт выполняет требуемые PS-командлеты.

$servername=$env:computername
$dagname=(Get-DatabaseAvailabilityGroup | where {$_.servers -contains $servername}).name
$partner_fqdn=[System.Net.Dns]::GetHostByName(((Get-DatabaseAvailabilityGroup $dagname).servers | where {!($_.name -eq $servername)} | select -First 1).name).Hostname
$answer=""
while (!(($answer -eq "1") -or($answer -eq "2"))){
 Write-Host("Please choose the operation")
 Write-Host("1: Enter the maintenance mode")
 Write-Host("2: Exit the maintenance mode")
 $answer=read-host "Please enter the ID of operation"
}
if($answer -eq "1"){
 if((get-exchangeserver $servername).serverrole -match "Mailbox"){
  Set-ServerComponentState $servername -Component HubTransport -State Draining -Requester Maintenance
  Redirect-Message -Server $servername -Target $partner_fqdn -Confirm:$false
  Suspend-ClusterNode $servername
  Set-MailboxServer $servername -DatabaseCopyActivationDisabledAndMoveNow $True
  Set-MailboxServer $servername -DatabaseCopyAutoActivationPolicy Blocked
 }
 Set-ServerComponentState $servername -Component ServerWideOffline -State inactive -Requester Maintenance
}
else{
 Set-ServerComponentState $servername -Component ServerWideOffline -State Active -Requester Maintenance
 if((get-exchangeserver $servername).serverrole -match "Mailbox"){
  Resume-ClusterNode $servername
  Set-MailboxServer $servername -DatabaseCopyActivationDisabledAndMoveNow $False
  Set-MailboxServer $servername -DatabaseCopyAutoActivationPolicy Unrestricted
  Set-ServerComponentState $servername -Component HubTransport -State Active -Requester Maintenance
 }
}

Критика приветствуется.

Exchange 2013 CU22 и информация об Exchange

Я уже писал о том, что после разворачивания CU22 на Exchange 2013 вы получаете запись в реестре о том, что, оказывается, на сервере-то установлен Exchange 2013 CU20. Microsoft проблему признало и выпустило совет, как можно вручную исправить ключ реестра.

Я же по привычке делюсь скриптом, который исправит этот ключ реестра по всем вашим серверам Exchange, подразумевая что все они — Exhchange 2013 CU22.

Get-ExchangeServer | %{$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$_.name); $regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft Exchange v15",$true); $regKey.SetValue("DisplayName","Microsoft Exchange Server 2013 Cumulative Update 22",[Microsoft.Win32.RegistryValueKind]::String);$_.name}

Скрипт пройдется по всем серверам Exchange в организации, поменяет параметр реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Exchange v15\Displayname и выведет имя сервера в качестве интерактива с вами.

Если вам нужно, чтобы обрабатывались не все сервера, а только какой-то список, то:

  • список серверов нужно будет подать на вход вместо командлета Get-ExchangeServer;
  • вместо $_.name использовать более подходящий $_

P.S. История с этим апдейтом напомнила

«Здравствуйте, я бедный албанский вирус. Я пока что ничего не умею, и к сожалению, не могу причинить вред вашему компьютеру. Пожалуйста, будьте так любезны, сотрите один из важных файлов с жесткого диска вашего компьютера самостоятельно и перешлите меня 30 друзьям. И будет вам счастье. Если вы этого не сделаете я обижусь и не будет вам счастья и конфет весь следующий год! Заранее благодарен за понимание и сотрудничество».

Exchange 2013 CU22 и Get-ExchangeEnvironment

Четыре года назад я писал о своем опыте инвентаризации серверов Exchange в организации.

Для инвентаризации серверов мы используем скрипт Get-ExchangeEnvironment, который за последние годы был модернизирован для поддержки Exchange 2016 и большой кучи CU к Exchange 2013 🙂

Вышел Exchange 2013 CU22, закрывающий критические уязвимости в безопасности, и мы его развернули.

При этом мы столкнулись с парой проблем:

  1. Пропатченные сервера Exchange стали прикидываться Exchange 2013 CU20. Неожиданно, но это косяк Microsoft. В качестве лечения предлагается вручную исправить параметр реестра, содержащий номер CU (с «20» на «22»).
  2. Второй подвох ждал нас уже в скрипте инвентаризации: после исправления пункта №1 версия Exchange перестала отображаться.

Реверс инжиниринг скрипта показал, что в скрипте последний «поддерживаемый» CU — CU20:

# 1.5.8 Exchange Service Pack String Mapping 
$ExSPLevelStrings = @{"0" = "RTM" 
                      "1" = "SP1" 
                      "2" = "SP2" 
                      "3" = "SP3" 
                      "4" = "SP4" 
                      "SP1" = "SP1" 
                      "SP2" = "SP2"} 
    # Add many CUs                
    for ($i = 1; $i -le 20$i++) 
    { 
        $ExSPLevelStrings.Add("CU$($i)","CU$($i)");

Соответственно, для отображения корректной версии «Exchange 2013 CU22» вам нужно увеличить число, выделенное жирным и подчеркнутое, до 22.

P.S. Перечитал старую статью — там тоже были проблемы с отображаемыми CU 🙂

Особенно посмеялся со своей фразы «Исправляем таблицу, предположив, что для Exchange 2013 не будет выпущено больше CU10».

Exchange 2013 DAG и пропавшие сетевые интерфейсы

Иногда мы занимаемся обновлением наших серверов Exchange. В этот раз совпала установка обновлений Windows, .Net, Exchange CU&Security update, а также обновление движка антивируса.

Все шло как обычно, даже отключившаяся служба Exchange Search Host Controller (точнее, получившая статус автозапуска Disabled). Однако, был и нюанс — даже после ее запуска базы одна из нод маркировалась как Failed (с невозможностью связаться по сети).

Читать далее «Exchange 2013 DAG и пропавшие сетевые интерфейсы»

Update Offline Address Book Exchange 2013

Уважаемые посетители!

Команда vMind.ru поздравляет вас с прошедшими праздниками и желает, чтобы в вашей жизни праздников было больше.

Держите краткую шпаргалку по обновлению офлайновой адресной книги (далее OAB) Exchange 2013.

Во-первых, OAB используется Outlook 20** в том случае, если включен режим кэширования.

Читать далее «Update Offline Address Book Exchange 2013»

Инвентаризация ВСЕХ серверов Exchange в организации

Я ранее уже рассказывал об инвентаризации серверов Exchange в организации. Данный скрипт отображал список серверов Exchange с установленными на них Rollup Update.

Один из моих коллег нашел прекрасный скрипт, делающий аудит инфраструктуры Exchange и отображающий просто МОРЕ информации:

  • список серверов с апдейтами, ролями, версиями ОС и сервиспаками (причем скрипт работает от Exch2003 до Exch2013);
  • Список названий внутренних/внешних имен для CAS и CAS Arrays;
  • Список баз с количеством ящиков, средним размером, занятым местом и количеством свободного места в %.

Мы настроили этот скрипт на ежедневный запуск, сделали вывод результатов на корпоративный веб-сервер и долго наслаждались.

Однако затем пришел ОН — Exchange 2013 и наступила тишина…

Читать далее «Инвентаризация ВСЕХ серверов Exchange в организации»

Мониторинг прохождения почты через вашу инфраструктуру

Задача мониторинга почты впервые была поставлена передо мной еще в 2008 году. Пинг, мониторинг ключевых показателей и статус служб получить было достаточно просто. Но сразу же возник вопрос — будет ли это служить доказательством того, что почта снаружи может быть получена? Естественно, нет, так как получение почты снаружи завязано еще на кучу факторов. Тогда я не смог настроить работоспособных механизмов проверки.

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

System Center Operations Manager Exchange Management Pack не помогал, так как в синтетических транзакциях отсутствовала опция обмена почтой с внешней почтовой системой. Я несколько раз собирался что-то наколбасить на коленке, но все переключался, пока мне не попалась на глаза вот эта статья. Использование System Center Orchestrator в связке с System Center Operations Manager могло решить мою задачу. Поехали…

Читать далее «Мониторинг прохождения почты через вашу инфраструктуру»

Антивирус для Windows Server – настраиваем список исключений

Алексей Максимов собирает в кучу исключения для антивирусного ПО под приложения Microsoft.

В ходе настройки политик управления клиентами любого антивирусного ПО необходимо определять список каталогов, имён процессов или даже расширений фалов, которые должны исключаться из Real-Time сканирования. Постараюсь собрать в одном месте информацию о рекомендуемых параметрах исключений и по мере необходимости буду его корректировать. Стоит отметить, что список составлен исходя из приложений, которые эксплуатируются в моём рабочем окружении. Список разделен по основным категориям сервисов и там где возможно есть ссылки на официальные рекомендации производителей ПО. Во всех случаях подразумевается что программное обеспечение установлено в каталоги «по умолчанию». Читать далее «Антивирус для Windows Server – настраиваем список исключений»