Импорт и экспорт почтовых ящиков в PST-файлы в Exchange 2016/2013/2010

Импорт и экспорт почтовых ящиков в PST-файлы в Exchange 2016/2013/2010

В Exchange Server 2010 SP1 (и выше) для импорта / экспорта содержимого почтового ящика Exchange из/в PST-файлы появились специальные командлеты PowerShell: New-MailboxImportRequest и New-MailboxExportRequest. В предыдущих версиях Exchange для импорта/экспорт данных из Exchange в PST файлы приходилось использовать сторонние утилиты (чаще всего использовалась утилита ExMerge, знакомство с которым не смог избежать ни один Exchange-администратор).

В Exchange 2016, 2013 и Office 365 разработчики расширили функционал командлетов Exchange для импорта/экспорта в PST файлы, несколько расширив функционал и увеличив их производительность. В этой статье мы рассмотрим типовые примеры импорта/экспорта данных из почтовых ящиков Exchange в файлы личных папок (PST).

Права доступа для импорта или экспорта данных в ящики Exchange

Учетной записи, под которой выполняется импорт или экспорт писем из почтового ящика Exchange, должна быть назначена RBAC роль “Mailbox Import Export” (по-умолчанию этими правами не обладает даже администратор Exchange). Вы можете предоставить администратору Exchange данную роль с помощью Exchange Management Shell:

New-ManagementRoleAssignment –Role “Mailbox Import Export” –User exch_admin_name

Где exch_admin_name – имя учетной записи, которой предоставляются права.

Совет. Для упрощения администрирования роль Mailbox Import Export обычно назначается на группу безопасности AD. Впоследствии, если необходимо предоставить данное право другому пользователю, достаточно будет добавить его учетную запись в эту доменную группу. Синтаксис команды в этом случае немного другой (допустим имя группы AD — ExchangeAdmGroup):

New-ManagementRoleAssignment -Role "Mailbox Import Export" -SecurityGroup ExchangeAdmGroup

Тоже самое можно сделать и из графического интерфейса EAC (Exchange Admin Center), назначив нужному пользователю или группе роль Mailbox Import Export.

Право "Mailbox Import Export" в Exchange 2013 Admin Center

После предоставления прав консоль EAC или Exchange Management Shell нужно перезапустить.

New-MailboxImportRequest: Импорт писем из PST-файла в ящик Exchange

Для импорта PST файла в почтовый ящик Exchange помимо наличия прав необходимо, чтобы выполнялись следующие условия:

  1. Целевой ящик Exchange должен существовать;
  2. PST-файл нужно разместить в общей сетевой папке и знать полный UNC путь к нему (не забывайте, что к локальному файлу можно всегда обратится по сетевому пути в формате PCName111C$PSTtstmail.pst);
  3. У администратора, который выполняет операцию импорта писем в ящик Exchange, должны быть права доступа на сетевой каталог, в котором хранится PST-файл с почтовым архивом.

С помощью следующей команды запустите процесс импорта содержимого PST файла из сетевой папки в почтовый ящик пользователя usetest.

New-MailboxImportRequest -Mailbox mailtst -FilePath HQFS01PSTusetest.pst

При выполнении импорта в целевом ящике содержимое уже существующих папок объединяется, а новые папки добавляются к имеющейся структуре почтовых папок.

Содержимое PST файла можно импортировать не в корень ящика Exchange, а в одну из уже существующих папку ящика (например, “Import_mail”). Например, нам нужно импортировать из PST только содержимое папки Inbox (Входящие), скопировав его в папку ящика Exchange с именем Import_mail:

New-MailboxImportRequest -Mailbox mailtst -FilePath HQFS01PSTusetest.pst -TargetRootFolder "Old_mail" -IncludeFolders "#Inbox#"

Совет. Полный список имен стандартных почтовых папок ящика Exchange:
  • Inbox
  • SentItems
  • DeletedItems
  • Calendar
  • Contacts
  • Drafts
  • Journal
  • Tasks
  • Notes
  • JunkEmail
  • CommunicationHistory
  • Voicemail
  • Fax
  • Conflicts
  • SyncIssues
  • LocalFailures
  • ServerFailures

После запуска команды импорта, запрос попадает в очередь на обработку сервером Exchange (обработка выполняется на сервере с ролью Client Access Server). Чтобы увидеть содержимое очереди задания импорта, выполните команду:

Get-MailboxImportRequest

Статус выполнения задания импорта (InProgress, Completed, Queued) для конкретного ящика Exchange можно узнать так:

Get-MailboxImportRequest mailtst

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

Get-MailboxImportRequest | Get-MailboxImportRequestStatistics

Get-MailboxImportRequestStatistics- статистика импорта pst архива в ящик пользователя

Завершенные запросы на импорт можно удалить из текущей очереди с помощью команды:

Get-MailboxImportRequest -Status Completed | Remove-MailboxImportRequest

Remove-MailboxImportRequest - удалить запрос импорта в Exchange 2016

Для массового импорта данных из PST файлов в ящики нескольких пользователей можно воспользоваться такой командой (предполагается, что имена pst-файлов соответствуют именам ящиков пользователей):

Foreach ($i in (Get-Mailbox)) {New-MailboxImportRequest -Mailbox $i -FilePath "HQFS01PST$($i.Alias).pst" }

Если в процессе импорта произошел сбой, более подробную информацию о его причинах можно получить из отчета, сформированного так:

Get-MailboxImportRequest -Status Failed | Get-MailboxImportRequestStatistics -IncludeReport | Format-List > FullImportReports.txt

В большинстве случаях ошибки импорта происходят из-за:

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

New-MailboxImportRequest -Mailbox mailtst -FilePath HQFS01PSTusetest.pst -BadItemLimit 10

New-MailboxExportRequest: Экспорт почтового ящика Exchange в PST архив

Процедура экспорта содержимого почтового ящика Exchange аналогична импорту. Для экспорта содержимого ящика в PST файл используется командлет New-MailboxExportRequest. Чтобы экспортировать почтовый ящик пользователя mailtst в сетевую папку (каталог должен быть создан предварительно и на него даны права чтения и записи для доменной группы Exchange Trusted Subsystem) выполните такую команду:

New-MailboxExportRequest –Mailbox mailtst –FilePath HQFS01ExportPSTmailtst.pst

New-MailboxExportRequest - экпорт писем из ящика exchange в pst файл с помощью powershell

Если нужно выгрузить в PST-файл только письма из определённой папки, например, Inbox (Входящие), команда будет выглядеть так:

New-MailboxExportRequest –Mailbox mailtst –FilePath HQFS01ExportPSTmailtst.pst -IncludeFolders “#Inbox#”

Чтобы исключить из выгрузки папку, воспользуйтесь параметром ExcludeFolders. Например, вам не нужно, чтобы в PST файл экспортировалось удаленные элементы:

New-MailboxExportRequest –Mailbox mailtst –FilePath HQFS01ExportPSTmailtst.pst - ExcludeFolders “#DeletedItems#”

Рассмотрим более сложное задание: допустим, необходимо выгрузить из ящика все письма, полученные после 1 января 2019 года, содержащие в теле письма ключевые слова “MSProject” и “Moscow”.

New-MailboxExportRequest –Mailbox mailtst –FilePath HQFS01ExportPSTmailtst.pst –ContentFilter {(body –like “*MSProject*”) –and {body –like “*Moscow*”) –and (Received –gt “01/01/2019”)}

Также вы можете экспортировать данные только из определенной папки с результатами поиска по ящикам, полученной с помощью командлета Search-Mailbox.

Задание экспорта также попадает в очередь на сервере Exchange. Чтобы проверить статус задания экспорта, выполните команду:

Get-MailboxExportRequest -Mailbox "mailtst" | Format-List

Get-MailboxExportRequest

RunspaceId : 2623f0d3-1b4b-4610-b0a2-6f29a077cc54
FilePath : HQFS01ExportPSTmailtst.pst
SourceDatabase : db1
Mailbox :
Name : MailboxExport
RequestGuid : e03de23f-4376-424a-95fa-53faaf97ebf9
RequestQueue : db1
Flags : IntraOrg, Push
BatchName :
Status : Completed
Protect : False
Suspend : False
Direction : Push
RequestStyle : IntraOrg
OrganizationId :
Identity : mailtstMailboxExport
IsValid : True
ObjectState : New

Не забывайте периодически очищать успешно выполненные запросы на экспорт ящиков в PST файлы:

Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest

При экспорте данных из ящика в PST файл, содержимое ящика пользователя на сервере Exchange не очищается.

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

Username, UNCPathtoPst
aaivanov,HQFS01ExportPSTaaivanov.pst
ebpetrov,HQFS01ExportPSTebpetrov.pst

Запустите экспорт ящиков пользователей в PST файлы:

Import-CSV "C:psuser_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst

PowerShell
Импорт и экспорт почтовых ящиков в PST-файлы в Exchange 2016/2013/2010