Ассорти фактов о Exchange 2010


 

Читаю документацию по Exchange 2010 и отмечаю интересные факты…

Exchange 2010 вышел, но без русского пакета для UM! Т.е. локализованный интерфейс есть, а разговаривать по-русски Exchange не будет до следующей весны или даже лета: скорее всего до выхода SP1. Об этом приходится сильно сожалеть – наиболее ценное (в смысле новинок) для миграции на Exchange 2010 отсутствует. L

Trial версия Exchange 2010  рассчитана на 120 дней, но остается полностью работоспособной после истечения этого срока.

Смена ключа меняет уровень версии Exchange. Нужно  ввести новый ключ и перезапустить Informational Store: это работает на том же уровне версий или на повышение уровня версий, но не на понижение. Например, можно перейти с Trial на Standart, со Standart на Enterprise или заменить прежний  ключ Enterprise на новый ключ Enterprise. Но нельзя перейти с Enterprise на Standart – это можно сделать только полной переустановкой Exchange 2010. http://technet.microsoft.com/en-us/library/bb232170(EXCHG.140).aspx http://technet.microsoft.com/en-us/library/bb124582(EXCHG.140).aspx

Версии Enterprise и Standart функционально одинаковы и различаются только тем, что Standart поддерживает до 5 почтовых баз, а Enterprise до 100. Ну и ценной конечно очень сильно! J Удивительно, что Microsoft в этом случае понял простую истину: малые и средние предприятия используют тот же функционал, что и крупные, только в меньших масштабах – поэтому и продукты надо масштабировать не по функциям, а по производительности прежде всего.

Лицензии на клиентов так же могут быть Enterprise и Standart и это никак не связано с версией сервера Enterprise или Standart, а влияет только на фичи доступные клиентам. http://www.microsoft.com/exchange/2010/en/us/licensing.aspx

Клиентская лицензия Enterprise покупается исключительно как дополнение к клиентской лицензии Standart, т.е. надо купить Standart, а потом на нее купить Enterprise, если есть необходимость.

Что дает клиентская лицензия Enterprise:

Feature

Standard CAL

Std. + Ent. CAL

Exchange ActiveSync Mobile Management Policies

Standard

Standard and Advanced

Journaling

Per Database

All

Voicemail with Unified Messaging

No

Yes

Retention Policies

Default

Default and Custom

Integrated Archive

No

Yes

Multi-Mailbox Search and Legal Hold

No

Yes

Information Protection & Control (IPC):  journal decryption, transport protection rules, Outlook protection rules, IRM Search, and Legal Hold

No

Yes

 

Как видите UM доступно только для клиентов с Enterprise CAL. С учетом того, что русского UM пока нет, то можно пока не покупать Enterprise CAL (если конечно нет острой нужды в других фичах Enterprise CAL).

Таким образом для большинства предприятий достаточно купить Exchange 2010 Standart + Standart CALs получив нужный функционал и прилично сэкономив при этом.

Защита от вирусов и спама в Enterprise версии обязательно требует Forefront Security как отдельного продукта Forefront Protection 2010 for Exchange Server (или Forefront Online Protection for Exchange) или в составе TMG 2010. При этом работает непрерывное обновление сигнатур. Standart версия может работать как с TMG 2010 аналогично Enterprise версии, так и обходится без TMG или Forefront Security: при этом  работает только фильтрация спама и используется WSUS для  загрузки обновлений  (раз в две недели). http://msexchangeteam.com/archive/2009/10/14/452868.aspx

 

Существует несколько способов подписки на Forefront Security: Exchange Enterprise CAL, Forefront Protection Suite, and Enterprise CAL Suite – первый дает защиту только почты, второй защиту клиентов и серверов, третий полный пакет Forefront Security. http://www.microsoft.com/forefront/protection-for-exchange/en/us/pricing-licensing.aspx

Покупая Exchange Enterprise CAL мы получаем, как правило, подписку и на Forefront Security, и на Forefront Online Protection. Последний можно не покупать (есть такой вариант), но если покупаем SA, то Forefront Online Protection обязательно покупается. http://www.microsoft.com/exchange/2010/en/us/licensing-faq.aspx

Для использования резервирования почтовых баз (DAG — Database Availability Groups) нужна версия операционной системы Enterprise или Datacenter (Windows Server 2008 Enterprise/Datacenter), т.к. Exchange 2010 использует для реализации DAG функции библиотеки кластеризации (но не сам кластер!), которая доступна только в этих версиях ОС. При этом DAG работает и на Exchange 2010 Standart и на Exchange 2010 Enterprise. http://technet.microsoft.com/en-us/library/dd335211(EXCHG.140).aspx

Для обеспечения надежности Exchange 2010 применяет только одну технологию — Mailbox Resiliency. Все остальное убрано. Идея в том, чтобы сделать почтовую базу единицей отказоустойчивости, а не сервер как раньше. Копия почтовой базы создается на нескольких серверах Exchange, одна из которых активная, а остальные непрерывно обновляются – общее название этих баз DAG. В случае недоступности активной почтовой базы (отказ базы, сервера, канала связи и т.п.), одна из резервных копий становится активной.

Более того идея DAG распространена на уровень датацентров (DAC – Datacenter Activation Coordination): в случае отказа одного датацентра активизируются почтовые базы у другом датацентре. Все это Exchange 2010 понимает, корректно накатывает логи транзакций и монтирует/активирует почтовые базы. http://technet.microsoft.com/en-us/library/dd979790(EXCHG.140).aspx http://technet.microsoft.com/en-us/library/dd979781(EXCHG.140).aspx

Механизм DAG поддерживается на уровне логирования и транспорта. Логи транзакций едины для каждой почтовой базы и ее копий! Т.е. транзакция не завершена пока лог не записан для всех копий. Логи сделаны маленькими – 1 Мб и накатываются они не сервисом репликации как раньше, а сервисом Information Store, что позволяет не только непрерывно накатывать логии на копии баз, не только быстро переключить базу в активный режим, но и получить актуальный кэш почтовой базы в оперативной памяти, что очень полезно для производительности. Результат: время переключения на резерв сократилось в двух минут для Exchange 2007 до 30 секунд для Exchange 2010! http://technet.microsoft.com/en-us/library/dd638137(EXCHG.140).aspx

Алгоритм переключения на резерв описан http://technet.microsoft.com/en-us/library/dd776123(EXCHG.140).aspx Запомнить его невозможно J

Транспорт Exchange 2010 сделан не просто транзакционным, а активным: сообщение не удаляется из очереди до тех пор пока не будет передано далее следующим транспортным сервером или не окажется в почтовой базе – так исключается потеря сообщения при внезапном отказе транспортного сервера или почтовой базы на всем пути следования сообщения. Ранее поиск в очередях делал сам сервер почтовых баз, когда становился активным в кластерной ноде, а очистка очереди делалась по таймауту, что могло вызвать раздувание очереди при большой нагрузке, к тому же ранее весь путь сообщения не отслеживался для гарантированной доставки. http://technet.microsoft.com/en-us/library/dd351027(EXCHG.140).aspx

Резервные базы, которые работают в DAG, фактически исключают необходимость в резервном копировании для восстановления после сбоев! http://technet.microsoft.com/en-us/library/dd876874(EXCHG.140).aspx

При совместной работе Exchange 2010 и Outlook 2010 работают MailTips: система анализирует кому вы хотите отправить письмо и выдает информационные сообщение типа: «Какого фига вы отправляете сообщение ВСЕМ?!», «Вася Пупкин отсутствует на месте», «Почтовый ящик Сидорова переполнен», «Не существующий адрес», «Отправка внешнему адресату», «Вам запрещено отправлять почту этому адресату», «Письмо слишком большое для отправки» и т.п. Следуя этим подсказкам, пользователь может скорректировать список адресатов и само письмо. http://technet.microsoft.com/enus/library/dd297974(EXCHG.140).aspx

Exchange 2010 поддерживает создание федераций с партнерами. Это позволяет партнерам получать сведения о доступности, календари и контакты друг от друга. Установление федеративных отношений выполняется через сервис Microsoft Federation Gateway (MFG), который расположен в «Облаке». http://technet.microsoft.com/enus/library/dd335047(EXCHG.140).aspx

Unified Messaging (UM) значительно расширено: пользователь может выполнять практически любые операции, которые есть в Outlook, голосом или тоновым набором. Более того пользователь теперь может сам настраивать свой UM без администратора, создавая собственные меню, приветствия, переадресацию и т.п. Это надо обязательно внедрять, если пользовательсткий контингент потянет! http://technet.microsoft.com/en-us/library/bb125141(EXCHG.140).aspx

Администраторы могут создавать меню и автоответчики для организации в целом. Клиент с помощью такого меню может быть переключен на нужного сотрудника или отдел, выполнить поиск нужного сотрудника. Если клиент не может выполнять навигацию в меню, он будет переведен на оператора. Оператор может быть назначен для номерного плана (Dial Plan), для автоответчика (Auto Attendants) и даже для конкретного сотрудника (почтового ящика)!  Меню может быть настроено в зависимости от времени звонка (бизнес и небизнес часы). http://technet.microsoft.com/en-us/library/bb232201(EXCHG.140).aspx

Exchange 2010  Unified Messaging интегрируется с Office Communication Server 2007. В результате получаем мощное решение офисной телефонии покрывающее примерно 80% функций, которые есть в современных решениях IP-телефонии. С выходом  Office Communication Server 2010, я предполагаю, Microsoft сможет заявить о реализации 100% функций. Сейчас же рекомендуется интегрироваться с полноценной телефонной станцией через шлюз (UM GW) или напрямую (IP-PBX) http://technet.microsoft.com/en-us/library/bb676499(EXCHG.140).aspx

Exchange 2010  может принимать факсы. Это может значительно сократить число факс-аппаратов в организации и облегчить гарантированную адресную доставку факсов нужному человеку без лишних накладных расходов на ручную (ножную) обработку. http://technet.microsoft.com/en-us/library/bb232022(EXCHG.140).aspx

Exchange 2010  может передавать факсы. Для этого нужен факс-сервер, который понимает SIP-сигнализацию. Это может быть собственный факс-сервер или факс-сервер партнера. Таким факс-сервером может выступать IP-PBX или шлюз в ТФОП (например, Cisco AS5350). http://technet.microsoft.com/en-us/library/ee364747(EXCHG.140).aspx

Exchange 2010  может работать в виртуальной среде. Но это существенно сокращает его производительность при совмещении ролей. Самое лучшее не совмещать роли  в виртуальной среде или делать CAS/HUB виртуальный сервер на каждый MailBox виртуальный сервер. Рекомендация: до 500 почтовых ящиков. Минимальное количество памяти при полном совмещении ролей – 10 GB. http://technet.microsoft.com/en-us/library/dd298121(EXCHG.140).aspx

Организация почтовых баз в Exchange 2010 (ESE) изменена так, что значительно уменьшена нагрузка на дисковую систему. С одной стороны это увеличивает производительность сервера, с другой увеличивает надежность за счет более экономной репликации почтовой базы на другие серверы. К тому же снижаются затраты на саму дисковую систему: теперь допускается использовать даже диски SATA вместо SAS/SCSI в некоторых конфигурациях! Нагрузка на дисковую подсистему сокращена до 70%! http://technet.microsoft.com/en-us/library/bb125040(EXCHG.140).aspx

Выбор дисковой подсистемы для Exchange 2010 http://technet.microsoft.com/en-us/library/dd346703(EXCHG.140).aspx

Расчеты CPU, памяти и т.д. для Exchange 2010 сервера http://technet.microsoft.com/en-us/library/dd351192(EXCHG.140).aspx

J

Интеграция PowerShell в ADUC


 

 

Оснастка ADUC (Active User and Computers) как и любая оснастка MMC 3.0 расширяемая: можно добавлять собственные элементы интерфейса и соответствующий им код. Чтобы сделать подобное расширение ADUC нужно писать код на C++. Для большинства администраторов это несвойственная им задача, требующая значительных усилий. Администратору нет нужды писать тяжелые приложения: большинство задач он решает скриптами либо более менее стандартными, либо написанными для конкретного случая. Прелесть ADUC для администраторов в том, что эта оснастка позволяет достаточно просто добавлять в локальные меню вызовы скриптов. Причем это не просто вызов скрипта: ему передается в качестве параметра выбранный объект (и имя его класса). Это позволяет запустить и выполнить скрипт над объектом «пользователя», «компьютера», «контакта» и т.п.

О расширениях ADUC полезных для администратора я уже не раз рассказывал в своем блоге: Инвентаризация удаленного компьютера из оснастки ADUC, Вызов Remote Assistance из оснастки Active Directory Users and Computers (ADUC) , Делегирование прав на скрытые атрибуты в ADUC) и Переименование удаленного компьютера из оснастки ADUC.

Приведу шаги по настройке собственного меню в ADUC для объекта класса «Computer»:

  1. Запусаем adsiedit.msc.
  2. Открываем раздел:

 

Configuration -> CN=Configuration,DC=<YourDomainName> -> CN=DisplaySpecifiers -> CN=409

  1. Выбираем объект CN=computer-Display
  2. Открываем его свойства.
  3. Выбираем атрибут adminContextMenu
  4. Открываем этот атрибут для редактирования
  5. Добавляем новую запись вида:

<n>, &НазваниеПунктаМеню, C:\Path\ScriptName.vbs

где <n> номер добавляемой записи.

  1. Закрываем adsiedit.msc, запускаем ADUC, отмечаем мышкой какой-либо объект Computer и проверяем появление опции меню и запуск Remote Assistance.

____________________

В шаге номер 3 задано CN=computer-Display – меню будет отображаться только для объектов типа «Computer». Для пользователей выбираем CN=user-Display, для контактов CN=contact-Display и т.д.

Обязательно почитайте мои предыдущие статьи, чтобы избежать ошибок – есть некоторые секреты и подводные камни. J

Здесь же нам важно отметить, что в качестве исполняемого модуля можно указать любой исполнимый файл без параметров – параметры тут не работают. Т.е. вы можете указать Notepad.exe, и он будет вызван, но указание Notepad.exe c:\text.txt запустит пустой редактор – файл не будет открыт.

Перейдем к PowerShell. Почему хочется использовать скрипты PowerShell вместо скриптов VBScript? Потому что открыв оболочку PowerShell из оснастки ADUC мы получаем в свое распоряжение всю мощь PowerShell и можем манипулировать объектом компьютера, пользователя и т.п., выполняя над ними самые разнообразные операции и не только над ними – в случае VBScript-а мы ограничены только тем, что написано в скрипте. Ощущаете разницу?

Оснастка ADUC была разработана уже достаточно давно (будем отмечать десятилетний юбилей? J) и поэтому ничего не знает о таком скриптовом языке как PowerShell. Если вы попытаетесь указать вместо C:\Path\ScriptName.vbs что-то вроде C:\Path\ScriptName.ps1, т.е. вместо скрипта VBScript скрипт PowerShell, то никакого запуска PowerShell вы не увидите. Собственно ADUC тут не причем: эта оснастка выполняет стандартный вызов функции ShellExecute, которая берет расширение файла, находит в реестре обработчик файла, запускает его и передает ему скрипт для исполнения. Так вот для PowerShell это не работает: PowerShell отключает механизм вызова скрипта по расширению. Если вы щелкните на файле с расширением ps1 или укажите его как команду в обычной командной строке, то PowerShell.exe никогда не запустится – это работает система безопасности PowerShell. (Мои попытки ассоциировать PowerShell.exe с расширением .ps1 не увенчались успехом. И это правильно: иначе это означало бы взлом механизма безопасности PowerShell.)

Какой вывод напрашивается? Что скрипты PowerShell невозможно вызвать из ADUC.

Но не все так печально. Есть два способа решения задачи.

Способ 1. Сделать wrapper –  вызов скрипта VBScript, а из него уже вызвать PowerShell и указать нужный скрипт. Это работает!

Вот примеры простых скриптов для теста:

Test.vbs

__________________________

Set wshArguments = WScript.Arguments

Set objComputer = GetObject(wshArguments(0))

Set objShell = CreateObject("WScript.Shell")

MsgBox "Computer=" & wshArguments(0)

objShell.Run("powershell.exe -noprofile -noexit C:\test.ps1 ‘"+wshArguments(0)+"’")

__________________________

 

Test.ps1

__________________________

Get-Date | Out-File –Append C:\test.txt

"args : $args, $($args.count)" | Out-File –Append C:\test.txt

$global:a = $args[0]

__________________________

В результате вызова скрипта test.vbs через меню ADUC будет запушен PowerShell.exe, который выполнит скрипт test.ps1  — результат увидим в файле C:\test.txt, где появится временная метка, DN имя объекта (LDAP://dc.domain.ru/CN=CompName,OU=Main,DC=domain,DC=ru) и число аргументов. (Еще один пример тестового vbs-скрипта можно найти на MSDN.)

Более сложный вариант скрипта для вызова PowerShell.exe выглядит так:

Set wshArguments = WScript.Arguments

Set objShell = CreateObject("WScript.Shell")

sArg = wshArguments(0)

If wshArguments.Count > 1 Then

     sArg = sArg & " " & wshArguments(1)

End If

Rem MsgBox "sArg = " & sArg

objShell.Run("powershell.exe -noprofile -noexit D C:\test.ps1 ‘"+sArg+"’")

__________________________

Как видите, добавлена обработка второго параметра: это имя класса объекта – для компьютера это «Computer», для класса пользователя это «User» и т.д. Это может пригодиться для написания «универсальных» скриптов. (Такие скрипты надо прописывать в ADUC через CN=default-Display.)

Какое неудобство нас тут ожидает? Фактически для каждого пункта меню и вызова скрипта нужно будет делать копию нашего wrapper-скрипта и править команду запуска PowerShell. В общем ничего страшного, но как-то некрасиво, да еще плодятся лишние сущности.

Внесем усовершенствование: пусть скрипт будет один – он  будет всегда запускать одноименный скрипт PowerShell, т.е. вызов C:\Path\script.vbs выполнит скрипт C:\Path\script.ps1. Теперь для запуска нового скрипта, например, script1.ps1 достаточно сделать копию script.vbs и переименовать ее в  script1.vbs:

Set wshArguments = WScript.Arguments

Set objShell = CreateObject("WScript.Shell")

sArg = wshArguments(0)

If wshArguments.Count > 1 Then

     sArg = sArg & " " & wshArguments(1)

End If

Rem MsgBox "sArg = " & sArg

sfn= Wscript.ScriptFullName

sps1= Left(sfn, Len(sfn)-3) +"ps1"

objShell.Run("powershell.exe -noprofile -noexit "+sps1+" ‘"+sArg+"’")

 

Метод простой, понятный и он работает!!! Но… все же хочется запустить PowerShell без посредников и тогда надо:

Способ 2. Сделать свой PowerShell!!!

Да!!! Это не оптический обман зрения. J Это одна из многих удивительных фич PowerShell – нам доступна возможность создавать собственные специализированные оболочки на основе PowerShell, которые хоть и называются minishell, но включают в себя все то, что … что мы туда включим. J

Я решил назвать новую оболочку, которая решает нашу задачу PS1Wrap.exe

Но пока вернемся к настройке меню:

  1. Добавляем новую запись вида:

<n>, &НазваниеПунктаМеню, C:\Path\ScriptName.vbs

Вместо C:\Path\ScriptName.vbs укажем нашу оболочку C:\Path\PS1Wrap.exe

Каким свойством должна обладать наша оболочка PS1Wrap.exe, чтобы работать? Принять от ADUC параметры и вызвать нужный скрипт. ADUC передаст только ссылку на выбранный объект, а как указать скрипт для запуска? Создавать каждый раз оболочки PowerShell как в случае с тестовым wrapper- скриптом на VBSript? Нет, так не гоже! Сделаем как в рабочем варианте с VBScript-ом: PS1Wrap.exe будет всегда запускать одноименный скрипт PowerShell, т.е. вызов C:\Path\PS1Wrap.exe выполнит скрипт C:\Path\PS1Wrap.ps1. Теперь для запуска нового скрипта, например, script1.ps1 достаточно сделать копию PS1Wrap.exe и переименовать ее в  script1.exe Накладные расходы? Размер нашей новой оболочки… 40 Кб!!! Но можно съэкономить и на этом создав жесткие линки на первоначальный файл:

fsutil hardlink create C:\Path\script1.exe C:\Path\PS1Wrap.exe

Стоит запустить C:\Path\script1.exe как будет выполнен скрипт C:\Path\script1.ps1  красиво!!!

Создание жестких линков можно применить и для Способа 1. Такая техника удобна тем, что достаточно заменить один файл на новый и все остальные также обновятся – переход на новую версию не потребует переписывания и переименования множества скриптов.

Вернемся к теории и созданию minishell-а. Что же можно включить в minishell?

·         Скрипты инициализации – те скрипты, которые будут выполнены перед тем, как станет доступной основная сессия

·         Описатели дополнительных типов (например, td1.type.ps1xml)

·         Описатели форматов отображения (например, fd1.format.ps1xml)

·         Собственный менеджер авторизации

·         Собственный код в форме сборок .NET assemblies

·         Программный код на C# (например, c1.cs), который будет откомпилирован и включен в minishell

·         Встроенные скрипты – при поиске по имени предлагаются первыми (т.е. могут перекрывать другой код)

·         Иконку файла

·         Прочие ресурсы

Становится понятным, что в наших руках очень мощная технология. Насколько мощная? Microsoft разработала целый ряд minishell-ов для своих продуктов: Exchange 2007, SQL 2008 и  т.д. – каждый из этих minishell-ов позволяет выполнять весь спектр настройки этих продуктов.

Ну что ж, а нам осталось только сгенерировать новую оболочку PowerShell, которая будет делать именно то, что нам нужно. Как это сделать? Конечно все описано на MSDN How to Create a Console Shell Оценили простоту метода? Что? Нужно качать Windows Platform SDK размером в 1.5 Гб? Совсем нет! Я уже скачал и сгенерировал для вас новую оболочку – вам нужно только загрузить один файл (40 Кб J).

Запустите PS1Wrap.exe При запуске PS1Wrap.exe напишет список файлов, которых ему не хватает: возьмите их в директории, где расположен PowerShell.exe на вашем компьютере и разместите в директории вместе с PS1Wrap.exe. Или разместите PS1Wrap.exe в директории вместе с PowerShell.exe.

Еще один момент. Если скрипт, который вы вызываете из меню ADUC не подписан, то надо запустить оболочку PS1Wrap.exe один раз с правами администратора и выполнить команду:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

После этого неподписанный скрипт запустится.

 

Заключение. Файлы PS1Wrap.exe и PS1Wrap.ps1 приложены к этой статье. Я специально не стал описывать, как сгенерировать PS1Wrap.exe, потому что это уже задача программирования, а не администрирования. К тому же все простое оказалось не таким уж простым, когда пытаешься сделать что-то сам – подводные камни обнаружены, грабли безжалостно потоптаны. J Возможно я опишу этот процесс в отдельной статье (если буду убедительные просьбы J). А пока пользуйтесь готовым «решением». Возможно я его несколько доработаю со временем: есть идеи.  Если у вас тоже появились интересные идеи, то пишите – постараюсь их учесть.

SIE-ps1wrap.7z