В 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 – имя учетной записи, которой предоставляются права.
New-ManagementRoleAssignment -Role "Mailbox Import Export" -SecurityGroup ExchangeAdmGroup
Тоже самое можно сделать и из графического интерфейса EAC (Exchange Admin Center), назначив нужному пользователю или группе роль Mailbox Import Export.
После предоставления прав консоль EAC или Exchange Management Shell нужно перезапустить.
New-MailboxImportRequest: Импорт писем из PST-файла в ящик Exchange
Для импорта PST файла в почтовый ящик Exchange помимо наличия прав необходимо, чтобы выполнялись следующие условия:
- Целевой ящик Exchange должен существовать;
- PST-файл нужно разместить в общей сетевой папке и знать полный UNC путь к нему (не забывайте, что к локальному файлу можно всегда обратится по сетевому пути в формате \\PCName111\C$\PST\tstmail.pst);
- У администратора, который выполняет операцию импорта писем в ящик Exchange, должны быть права доступа на сетевой каталог, в котором хранится PST-файл с почтовым архивом.
С помощью следующей команды запустите процесс импорта содержимого PST файла из сетевой папки в почтовый ящик пользователя usetest.
New-MailboxImportRequest -Mailbox mailtst -FilePath \\HQFS01\PST\usetest.pst
При выполнении импорта в целевом ящике содержимое уже существующих папок объединяется, а новые папки добавляются к имеющейся структуре почтовых папок.
Содержимое PST файла можно импортировать не в корень ящика Exchange, а в одну из уже существующих папку ящика (например, “Import_mail”). Например, нам нужно импортировать из PST только содержимое папки Inbox (Входящие), скопировав его в папку ящика Exchange с именем Import_mail:
New-MailboxImportRequest -Mailbox mailtst -FilePath \\HQFS01\PST\usetest.pst -TargetRootFolder "Old_mail" -IncludeFolders "#Inbox#"
- 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-MailboxImportRequest -Status Completed | Remove-MailboxImportRequest
Для массового импорта данных из PST файлов в ящики нескольких пользователей можно воспользоваться такой командой (предполагается, что имена pst-файлов соответствуют именам ящиков пользователей):
Foreach ($i in (Get-Mailbox)) {New-MailboxImportRequest -Mailbox $i -FilePath "\\HQFS01\PST\$($i.Alias).pst" }
Если в процессе импорта произошел сбой, более подробную информацию о его причинах можно получить из отчета, сформированного так:
Get-MailboxImportRequest -Status Failed | Get-MailboxImportRequestStatistics -IncludeReport | Format-List > FullImportReports.txt
В большинстве случаях ошибки импорта происходят из-за:
- Логических повреждениях в структуре PST файлов (как восстановить pst файлы с помощью встроенных средств);
- При превышении размера ящика заданных лимитов.
Можно указать лимит количества сбойных элементов PST файлов, которых можно пропустить при экспорте. Следующая команда выполнит импорт данных из PST файла в ящик и пропустит десять первых сбойных элементов, прежде чем выдать ошибку импорта:
New-MailboxImportRequest -Mailbox mailtst -FilePath \\HQFS01\PST\usetest.pst -BadItemLimit 10
New-MailboxExportRequest: Экспорт почтового ящика Exchange в PST архив
Процедура экспорта содержимого почтового ящика Exchange аналогична импорту. Для экспорта содержимого ящика в PST файл используется командлет New-MailboxExportRequest. Чтобы экспортировать почтовый ящик пользователя mailtst в сетевую папку (каталог должен быть создан предварительно и на него даны права чтения и записи для доменной группы Exchange Trusted Subsystem) выполните такую команду:
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQFS01\ExportPST\mailtst.pst
Если нужно выгрузить в PST-файл только письма из определённой папки, например, Inbox (Входящие), команда будет выглядеть так:
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQFS01\ExportPST\mailtst.pst -IncludeFolders “#Inbox#”
Чтобы исключить из выгрузки папку, воспользуйтесь параметром ExcludeFolders. Например, вам не нужно, чтобы в PST файл экспортировалось удаленные элементы:
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQFS01\ExportPST\mailtst.pst - ExcludeFolders “#DeletedItems#”
Рассмотрим более сложное задание: допустим, необходимо выгрузить из ящика все письма, полученные после 1 января 2019 года, содержащие в теле письма ключевые слова “MSProject” и “Moscow”.
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQFS01\ExportPST\mailtst.pst –ContentFilter {(body –like “*MSProject*”) –and {body –like “*Moscow*”) –and (Received –gt “01/01/2019”)}
Задание экспорта также попадает в очередь на сервере Exchange. Чтобы проверить статус задания экспорта, выполните команду:
Get-MailboxExportRequest -Mailbox "mailtst" | Format-List
RunspaceId : 2623f0d3-1b4b-4610-b0a2-6f29a077cc54
FilePath : \\HQFS01\ExportPST\mailtst.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 : mailtst\MailboxExport
IsValid : True
ObjectState : New
Не забывайте периодически очищать успешно выполненные запросы на экспорт ящиков в PST файлы:
Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest
Вы можете массово выгрузить ящики нескольких пользователей. Создайте текстовый файл следующего формата:
Username, UNCPathtoPst
aaivanov,\\HQFS01\ExportPST\aaivanov.pst
ebpetrov,\\HQFS01\ExportPST\ebpetrov.pst
Запустите экспорт ящиков пользователей в PST файлы:
Import-CSV "C:\ps\user_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst