Компании Microsoft всегда было нечего сказать, когда дело касалось внедрения или извлечения данных из Exchange Server. Приложения, которые содержат постоянные хранилища данных, обычно снабжены механизмом, позволяющим администраторам загружать данные в хранилище или извлекать их из него, но эти механизмы не подходят для Exchange Server. Механизмы импорта данных используются для загрузки данных в почтовый ящик, зачастую путем перемещения их из другой почтовой системы. А механизмы экспорта данных служат пользователям для иной цели — обычно для извлечения данных для последующего просмотра в сценариях, таких как выполнение запросов от регулирующих органов, когда компаниям нужно найти копии сообщений и вложений для просмотра при юридическом разбирательстве.

За последние 15 лет, с тех пор как Microsoft выпустила Exchange, администраторы вынуждены были прибегать к использованию сторонних инструментов для загрузки данных в почтовый ящик или для их экспорта из него. В некоторых случаях эти инструменты были многофункциональны. Хороший пример — утилита ExMerge (msexchangeteam.com/archive/2004/07/01/171051.aspx). Этот продукт был задуман как решение, предназначенное для того, чтобы помогать пользователям перемещать данные почтового ящика из других почтовых систем в Exchange. Данное решение было включено в арсенал администраторов Exchange в качестве необходимой составляющей. Outlook является самым распространенным механизмом, используемым для получения доступа к данным почтового ящика. Outlook — это подходящее решение для быстрого просмотра почтового ящика в целях извлечения нужной информации в файл PST, но он не предназначен для импорта гигабайтов данных. Кроме того, Outlook не обеспечивает шифрование и сложен для программирования обычным администратором, который хочет просто извлечь пользовательские данные для ответа на запрос. Опытные программисты могут задействовать модель Outlook Object Model (OOM) для извлечения данных, но нужный код бывает недоступен именно когда он требуется. Таким образом, многие администраторы часто прибегают к программам типа ExMerge.

Клиентские приложения зависят от библиотек MAPI, когда им нужно получить доступ к содержимому баз данных Exchange. Наиболее доступными библиотеками MAPI в терминах задокументированных интерфейсов API являются те, которые поставляются с Outlook. Именно поэтому вам нужно установить Outlook на сервере Exchange, прежде чем вы запустите клиент, который зависит от библиотек MAPI. Эта зависимость сохраняется и в случае с командами Import-Mailbox и Export-Mailbox из поставки Exchange Server 2010 и Exchange Server 2007. Когда в октябре 2009 года Microsoft выпустила Exchange 2010, требовалось установить 64-разрядную версию Outlook на почтовых серверах Exchange 2010, прежде чем вы могли бы запустить команды для импорта или экспорта данных. Однако 64-разрядная версия Outlook не была официально выпущена до апреля 2010 года — до выпуска Outlook 2010. Это отражает проблемы, которые проявляются в случае, когда один продукт зависит от другого, а программы развертывания не отлажены. На самом деле возможность импорта/экспорта данных в Exchange была темным пятном в течение многих лет. Теперь настало время навести порядок.

Exchange 2010 SP1 отказывается от предыдущих подходов к импорту/экспорту в пользу новой модели, основанной на запросах на импорт и экспорт, управляемых службой Microsoft Exchange Mailbox Replication Service (MRS). Данные перемещаются внутрь и изнутри Exchange через новый провайдер данных, который интегрирован в серверную роль Client Access и не зависит от какого-либо другого продукта. Старые команды Import-Mailbox и Export-Mailbox удалены из SP1, а это означает, что вам нужно переписывать любые сценарии PowerShell для автоматической загрузки и извлечения данных. Эти сценарии зависят от названных команд. .

Подготовка операций импорта и экспорта

Прежде чем мы посмотрим на детали новых команд и разберем примеры, давайте обратимся к процессу предварительной подготовки данных операций. Во-первых, администраторы не могут экспортировать и импортировать почтовые данные, пока у них нет явного разрешения на это. Ограничение существует для того, чтобы защитить конфиденциальность пользовательских почтовых ящиков, поскольку вряд ли кто-то хочет, чтобы каждый администратор манипулировал его данными. Идеальная ситуация — это предоставить доступ только ограниченному количеству администраторов и регулярно проверять его. Доступ дается на базе механизма ролей Role Based Access Control (RBAC) в виде членства в группе Mailbox Import Export. Пользователи, являющиеся членами этой группы, могут запускать новые команды, тогда как пользователи, которые не принадлежат к ней, не могут выполнять запросы на импорт/экспорт. Exchange не будет загружать соответствующие команды в сессии Exchange Management Shell (EMS) этих пользователей, поскольку их учетные записи не являются членами ролевой группы Mailbox Import Export.

Во-вторых, все данные импортируются в разные хранилища PST и экспортируются из них. Никакой другой формат данных не поддерживается, поскольку формат PST по факту является стандартом для перемещения данных в и из Exchange. Получающиеся в результате PST, созданные Exchange, используют самый последний формат Unicode. Exchange может импортировать данные из разных PST как в формате Unicode, так и в более старом формате ANSI. Данные могут быть импортированы из PST в несколько разных почтовых ящиков, однако только один запрос на импорт почты может получить доступ к конкретному PST за раз. Никакой другой клиент не может получить доступ к PST, пока Exchange использует его.

В-третьих, файлы PST, которые содержат данные для перемещения в почтовые ящики, должны быть помещены в общий ресурс, доступный для чтения/записи группе Exchange Trusted Subsystem, как показано на экране 1. Exchange 2010 использует группу Exchange Trusted Subsystem для того, чтобы позволить серверам Exchange получить безопасный доступ к данным. Вам не нужно обеспечивать доступ к ресурсу общего пользования кому-либо другому. Аналогично, когда Exchange экспортирует данные в PST, он записывает PST в защищенный общий ресурс. Причина того, что Exchange использует общий ресурс, проста: все операции с почтовым ящиком выполняются службой MRS, запускаемой на сервере Client Access. Можно назначить обработку запроса на импорт или экспорт почтового ящика конкретному экземпляру MRS, но если этого не делать, то любой экземпляр MRS, запускаемый на сервере Client Access, может обрабатывать запрос. Таким образом, вы не можете знать, что копия MRS будет запущена на том же самом сервере, на котором расположены данные для импорта. Хранилище данных должно быть доступным для любого сервера Client Access в сайте. Отсюда и решение Microsoft: использовать общий ресурс.

 

Экран 1. Разрешение чтения/записи для группы Exchange Trusted Subsystem

Хотя Microsoft проделала большую работу в продвижении новой модели импорта/экспорта в Exchange 2010 SP1, природа развертывания программного обеспечения такова, что первая версия продукта не может решить все проблемы. В этом случае требуется запустить все процедуры импорта и экспорта почтовых ящиков через EMS, поскольку разработчики Microsoft не смогли модернизировать предыдущий мастер настройки импорта и экспорта почтовых ящиков, которые доступны в версии Exchange 2010 в консоли Exchange Management Console (EMC). Принуждение администраторов к использованию EMS оправданно. Это удачный компромисс между использованием расширенных функций новой модели и устранением нелепого требования установки Outlook на сервере Exchange, прежде чем вы сможете получить доступ к данным почтового ящика.

В таблице перечислены новые команды, которые предоставляет Exchange 2010 SP1 для импорта и экспорта данных почтовых ящиков. Более старые версии команд Import-Mailbox и Export-Mailbox более недоступны в SP1.

 

Таблица. Команды Import-Mailbox и Export-Mailbox в Exchange 2010 SP1

Файл Exchange 2010 SP1 Help содержит много полезных примеров того, как использовать новые команды, включая формат, требуемый различными параметрами. Широкий спектр функций новых команд предоставляет разработчикам и консультантам сторонних компаний широкие возможности для создания новых инструментов для автоматического импорта почтовых ящиков.

Импорт данных почтового ящика

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

New-mailboxImportrequest -Mailbox
   'TRedmond' -FilePath '\\ExServer1\
   Imports\TRedmond.pst' -Name
   'Import-tr' -ConflictResolutionoption
   KeepLatestItem -BadItemLimit 5

Эта команда создает новый запрос на импорт для почтового ящика с псевдонимом TRedmond и указывает, что исходный файл PST размещен на общем ресурсе, названном Imports, на сервере ExServer1. После того как команда выдана, запрос на импорт помещается в очередь Active Directory (AD). Запрос будет обрабатываться первым экземпляром MRS на сайте, который отвечает за запрос.

По умолчанию Exchange выполняет проверку на наличие дублированных элементов, когда импортирует данные в почтовый ящик. Exchange не создает копию элемента, если она существует в целевом ящике (идентификатор сообщения служит для обнаружения копий). В этом случае параметр ConfictResolutionOption определяет, что если во время процесса импорта существует копия элемента, то сохраняется последняя версия. Другими вариантами являются KeepAll (сохранять все версии) и KeepSourceItem (сохранять исходную версию элемента из импортированного PST).

В примере кода для запроса на импорт задано уникальное имя Import-TR. Это необязательный параметр. Если вы не зададите имя, Exchange по умолчанию даст имя MailboxImport. Если вы создаете несколько запросов на импорт, Exchange будет использовать такие имена, как MailboxImport1, MailboxImport2, MailboxImport3 и т. д. для выделения каждой операции импорта. Имя почтового ящика и имя запроса скомбинированы и используются для извлечения информации о запросе на импорт.

Назначение особого имени для запроса на импорт становится важным, если вы хотите запустить несколько операций импорта одновременно в один и тот же ящик, каждая из которых обрабатывает данные из различных PST (вы не можете запускать несколько операций импорта одновременно из одного и того же PST). В таком сценарии Exchange назначит имена по умолчанию. Однако проще отследить работу каждого процесса и ошибки, если вы назначаете более понятные имена, такие как имя исходного PST.

Импортировать все данные в PST не нужно, поскольку параметры ExcludeFolders и IncludeFolders позволяют вам контролировать практически каждую папку при операции импорта Exchange. Например, чтобы импортировать только несколько поименованных папок, мы можем передать их так:

-IncludeFolders "Project Bingo",
   "My Important Stuff", "Personal
   Information"

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

-IncludeFolders "Projects/*"

В этом примере все данные подпапок из папки Projects будут импортированы. Если вам нужно перейти к папке где-то в глубине иерархии, вы можете указать ее имя:

-IncludeFolders "Projects/2010/Great
   Wall of China"

Очень часто файл PST содержит ассоциированные элементы, которые являются скрытыми элементами, используемыми Outlook для хранения данных, таких как правила, формы и представления. Exchange не будет импортировать ассоциированные элементы, пока вы не потребуете сделать это, присвоив параметру AssociatedMessagesCopyOption значение Copy. Во многих случаях можно избежать копирования ассоциированных элементов из PST, потому что эквивалент ассоциированного элемента, вероятно, уже существует в почтовом ящике. Исключение возможно, если приложению требуется форма, которая не существует в почтовом ящике, и вы это знаете.

После того как задание отправлено и служба MRS начала обработку, вы можете получить информацию о процессе выполнения. В нашем примере мы используем команду Get-MailboxImportRequest таким образом:

Get-MailboxImportRequest -Identity
   'TRedmond\Import-TR'

Заметьте, что имя почтового ящика (TRedmond) и имя запроса (Import-TR) скомбинированы для того, чтобы сформировать уникальную запись о задании, в котором мы заинтересованы.

Команда Get-MailboxImportRequest поддерживает несколько параметров, для того чтобы извлекать статус различных групп заданий.

  • Параметр BatchName извлекает детали всех запросов, которые принадлежат к определенной группе заданий.
  • Параметр Database извлекает детали всех запросов, которые принадлежат к почтовым ящикам в определенной базе данных почтовых ящиков.
  • Параметр Status извлекает детали всех запросов с определенным статусом. Допустимый статус включает в себя Completed, InProgress, Queued, CompletedWithWarning, Suspended и Failed.

Чтобы создать отчет о выполнении процесса импорта, можно использовать команду Get-MailboxImportRequest Statistics, которая показывает, сколько данных было передано. Сначала вы увидите, что MRS создает иерархию папки в целевом почтовом ящике, для того чтобы принять импортируемые данные. Затем вы увидите увеличение счетчика переданных элементов, так как MRS перемещает данные из PST в почтовый ящик. Например:

Get-MailboxImportRequestStatistics
   -Identity 'TRedmond\Import-tr' |
   Format-List

Команда Get-MailboxImport­Request­Statistics выдает много информации. И это хорошая идея — ограничить количество возвращаемых свойств и для вывода только необходимых данных об операции импорта. Обычно я использую команду, показанную в листинге. На экране 2 показана работа команд New-MailboxImportRequest, Get-MailboxImportRequest и Get- MailboxImportRequestStatistics в действии.

 

Экран 2. Импорт данных почтового ящика Exchange 2010 SP1

Когда импорт закончен, вы можете задействовать команду Get-Mailbox­ImportRequestStatistics для получения отчета обо всем, что сделала MRS для того, чтобы заполнить почтовый ящик данными из PST:

Get-MailboxImportRequestStatistics
   -Identity 'tredmond\Import-tr'
   -Includereport | Format-List

по умолчанию отчет выводится на экран. Однако конвейерная организация вывода в текстовый файл заканчивается более удобным отчетом, который проще читать и который содержит больше информации. Отчет об импорте почтового ящика включает резюме, за которым следует детальная информация о ходе перемещения каждой папки из исходного PST в целевой почтовый ящик. Самая важная информация включает:

  • имя исходного PST;
  • имя целевого почтового ящика и базы данных, где он размещен;
  • текущий статус задания (например, «завершено», «нет предупреждений»);
  • количество ошибочных элементов, встретившихся в процессе обработки (три, что меньше лимита в пять элементов, определенных в параметре BadItemLimit parameter в примере команды);
  • начало и конец времени обработки задания и имя экземпляра MRS, который обрабатывал его;
  • общее количество элементов и их размер, переданные из PST в почтовый ящик;
  • были ли указаны папки для принудительного включения или исключения.

Экспорт данных почтового ящика

Во многом похожий подход представляет и экспорт данных почтового ящика. Однако используется другой набор команд. Вы запускаете команду New-MailboxExportRequest для создания нового запроса на экспорт. Например, чтобы экспортировать весь почтовый ящик в PST, можно использовать команду наподобие этой:

New-MailboxExportRequest -Mailbox
   'Tony Redmond' -Name 'TRedmond
   Export' -BadItemLimit 5
   -ExcludeDumpster:$true -FilePath
   '\\Ex2010\Exports\TRedmond.PSt'

Эта команда забирает весь контент предлагаемого ящика и записывает его в PST в папку общего доступа. Контент папок мусорных корзин исключен из операции. Если PST не указан, Exchange будет создавать новый файл. А если вы укажете имя существующего PST, MRS будет записывать экспортируемые данные в него.

Опыт подсказывает, что лучше применять уточнители к фильтру или ограничить информацию, экспортируемую из почтового ящика, чем в случае с импортом PST в почтовый ящик. Например, если вы выполняете запрос на поиск в соответствии с юридическим запросом, от вас, вероятно, потребуется дать копию конкретной релевантной информации, а не всего содержимого почтового ящика пользователя. Exchange использует несколько параметров, чтобы контролировать экспортируемые данные.

Параметр SourceRootFolder определяет папку в почтовом ящике, которая будет использоваться как база экспорта. Если этот параметр не указан, Exchange экспортирует все содержимое почтового ящика. Например, следующая команда экспортирует только те элементы, которые хранятся в папке Project Bluesky и ее подпапках:

New-MailboxExportRequest
   -SourcerootFolder 'Projects/
   Project Bluesky' -Mailbox 'TRedmond'
   -FilePath '\\ExServer1\Imports\
   TRedmond.pst' -BadItemLimit 5

В этом примере папка Project Bluesky является подпапкой папки Project.

Параметр TargetRootFolder определяет корневую папку в целевом PST для того, чтобы создать папки, экспортированные из почтового ящика.

Параметр IncludeFolders определяет одну или более папок, которые должны быть экспортированы. Например:

New-MailboxExportRequest
   -IncludeFolders ‘Projects’,
   ‘Planning/Budgets 2010’ -Mailbox
   ‘TRedmond’ -FilePath ‘\\ExServer1\
   Imports\TRedmond.pst’ -BadItemLimit 5

Параметр ExcludeFolders определяет одну или несколько папок, которые исключаются из процесса экспорта.

Параметр IsArchive определяет, что экспорт должен быть произведен из архива пользователя, а не из основного почтового ящика.

И повторю: файл Exchange 2010 SP1 Help содержит все необходимые инструкции для использования этих параметров.

Несколько слов об оперативности

Во время выполнения проекта миграции вы столкнетесь с импортированием в Exchange гигабайтов информации. И даже для самого нового выпуска Exchange 2010 это нелегкая задача. Необходимо кое-что спланировать, чтобы импортировать информацию в пользовательские почтовые ящики.

Необходимо настроить квоты для целевых почтовых ящиков, чтобы импортировать данные из PST. Увеличение квоты может быть постоянным, но вы можете и уменьшить ее после того, как пользователь просмотрит импортированный материал и решит, сохранять эти данные в почтовым ящике или их нужно переместить в онлайн-архив. Увеличение квоты для ряда целевых почтовых ящиков до импорта является относительно простой процедурой при написании сценария, но необходимость увеличения квоты является индикатором того, что обработка выполняется вручную, и это свойство процессов импорта PST.

Одним из способов определения квоты почтового ящика является просмотр размера PST, который должен быть импортирован. Хотя этот подход на самом деле эффективен, размер PST на диске не напрямую равен количеству данных, которое будет импортировано в почтовый ящик. Структура файла PST предполагает превышение примерно на 20% размера, который требуется для хранения элементов в оперативном почтовом ящике или архиве. Вам нужно убедиться, что квота у целевых почтовых ящиках достаточна, до того, как вы начнете импортировать данные. Будет лучше временно увеличить квоту посредством завышения размера, чем рисковать тем, что импорт не состоится по причине недостаточной квоты.

По выбору вы можете импортировать данные в архивные почтовые ящики, а не в основные пользовательские почтовые ящики (используйте параметр IsArchive для того, чтобы сообщить Exchange, что он должен импортировать данные в архив). SP1 позволяет поместить архивные почтовые ящики в базы данных отдельно от основных почтовых ящиков. Это свойство вы также можете использовать для создания баз данных, которые выделены в хранилище архивов. Не забудьте проверить и настроить квоты архивов для целевых почтовых ящиков перед импортом данных.

Каждый элемент, который импортируется в почтовый ящик, создает транзакцию, которую хранилище Exchange должно отразить в журнале регистрации транзакций. Количество операций ввода-вывода подскакивает во время импорта, так как базы данных, которые принимают целевые почтовые ящики, совершают транзакции для того, чтобы разместить входящие данные PST. Дальнейшая активность системы ввода-ввода и процессора вызвана добавлением элементов к индексам контента для целевых баз данных. Еще больше генерируется операций ввода-вывода, если пользователи перемещают информацию из их основных почтовых ящиков в личные архивы после завершения операций импорта.

Если импорт проводится внутри группы доступности базы данных (DAG), похожие всплески операций ввода-вывода наблюдаются на серверах, которые содержат копии баз данных целевых почтовых ящиков в силу необходимости выполнения репликаций, воспроизведения и индексирования. В такой ситуации есть потенциал для создания цунами операций ввода-вывода по всей DAG.

Служба MRS использует настройки передачи MaxSendSize для осуществления контроля максимального размера элементов, который она может импортировать в почтовые ящики. По умолчанию размер составляет 10 Мбайт. Если вы хотите больше элементов, вам нужно запустить команду Set-TransportConfig для увеличения настройки. Например:

Set-TransportConfig -MaxSendSize 20 MB

Убедитесь, что вы удалили пароли у всех PST, из которых будут импортированы данные, поскольку нет способа указать пароль в команде. Точно так же вы не можете задать пароль для PST, когда создаете его во время операции экспорта почтового ящика. Таким образом, вы должны предпринять некоторые шаги для обеспечения защиты информации в PST, содержащейся на общем ресурсе, чтобы убедиться, что файлы не будут открыты неавторизованными пользователями. Помните, что, в отличие от файла OST, который может быть открыт только тогда, когда клиент знает, что почтовый ящик содержит внутри OST копию файла, любой клиент MAPI может открыть файл PST. Кроме того, наличие пароля на PST не гарантирует безопасности файла, поскольку в Интернете доступны многие утилиты для взламывания паролей PST за пару секунд.

Поскольку Exchange 2010 SP1 является все еще достаточно новым продуктом в рабочей среде, трудно охарактеризовать эффективность того, насколько рационально сервер Exchange сможет управлять множественными одновременными операциями импорта и экспорта. По этой причине лучше запланировать данные операции на периоды низкой активности пользователей, для того чтобы избежать конкуренции между операциями ввода-вывода и запросами на обработку, создаваемыми обычными пользователями. Способность сервера Exchange обрабатывать данные почтовых ящиков меняется от сервера к серверу. Это зависит от текущей загрузки и производительности системы. Вместимость диска и пропускная способность подсистемы ввода-вывода являются самыми важными. Например, импорт 1,35-гигабайтного хранилища PST, содержащего 7450 элементов, занял у сервера с умеренной загрузкой 15 минут. Использование более мощного сервера или планирование работы на период низкой активности пользователей увеличит пропускную способность. В этом случае большая часть серверов сможет импортировать 8 Гбайт в час.

Взгляд в будущее

Вы можете недооценить масштаб прогресса, который стимулировала Microsoft, внедрив новую модель импорта/экспорта почтовых ящиков в Exchange 2010 SP1. Кто-то может сказать, что Microsoft просто заполнила пробел, который существовал в данном продукте с тех пор, как он только был выпущен. И в этом есть доля правды. История с зависимостью от программ, таких как Outlook и ExMerge, определенно не является самым ярким проявлением возможностей Exchange. Однако Exchange 2010 SP1 предоставляет столь изысканное решение для импорта и экспорта почтовых ящиков, что просто бессмысленно вспоминать о прежних ограничениях.

Тони Редмонд (exchguru@windowsitpro.com) — редактор журнала Windows IT Pro, старший технический редактор Exchange & Outlook Administrator, вице-президент и главный технолог HP Services

Листинг. Get-MailboxImportRequestStatistics
Get-MailboxImportRequestStatistics -Identity ‘TRedmond\Import-TR’ | Select Name, Status, StatusDetail, BytesTransferred, ItemsTransferred, EstimatedTransferItemCount, BytesTransferredPerMinute
Name : Import-TR
Status : InProgress
StatusDetail : CopyingMessages
BytesTransferred : 191.6 MB (200,929,681 bytes)
ItemsTransferred : 2346
EstimatedTransferItemCount : 4233
BytesTransferredPerMinute : 75.82 MB (79,505,066 bytes)