Імпорт і експорт поштових скриньок в 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
  • New-MailboxImportRequest: Імпорт листів з PST-файлу в ящик Exchange
  • New-MailboxExportRequest: Експорт поштової скриньки 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.

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

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

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

  1. Цільовий ящик Exchange повинен існувати;
  2. PST-файл потрібно розмістити в загальній мережевий папці і знати повний UNC шлях до нього (не забувайте, що до локального файлу можна завжди звернутися по мережевому шляху в форматі \\ PCName111 \ C $ \ PST \ tstmail.pst);
  3. У адміністратора, який виконує операцію імпорту листів в ящик Exchange, повинні бути права доступу на мережевий каталог, в якому зберігається PST-файл з поштовим архівом.

За допомогою наступної команди запустіть процес імпорту вмісту PST файлу з мережевої папки в поштову скриньку користувача usetest.

New-MailboxImportRequest -Mailbox mailtst -FilePath \\ HQFS01 \ PST \ usetest.pst

При виконанні імпорту в цільовому ящику вміст вже існуючих папок об'єднується, а нові папки додаються до наявної структурі поштових папок.

Вміст PST файлу можна імпортувати не в корінь ящика Exchnage, а в одну з уже існуючих папку ящика (наприклад, "Import_mail"). Наприклад, нам потрібно імпортувати з PST тільки вміст папки Inbox (Вхідні), скопіювавши його в папку ящика Exchange з ім'ям Import_mail:

New-MailboxImportRequest -Mailbox mailtst -FilePath \\ HQFS01 \ PST \ usetest.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) для конкретного ящика Exchnage можна дізнатися так:

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 ")

Також ви можете експортувати дані тільки з певною папки з результатами пошуку по шухлядах, отриманої за допомогою командлета Search-Mailbox.

Завдання експорту також потрапляє в чергу на сервері 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

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

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

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