В 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 крім наявності прав необхідно, щоб виконувалися наступні умови:
- Цільовий ящик Exchange повинен існувати;
- PST-файл потрібно розмістити в загальній мережевий папці і знати повний UNC шлях до нього (не забувайте, що до локального файлу можна завжди звернутися по мережевому шляху в форматі \\ PCName111 \ C $ \ PST \ tstmail.pst);
- У адміністратора, який виконує операцію імпорту листів в ящик 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 #"
- 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 ")
Завдання експорту також потрапляє в чергу на сервері 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