В 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
Ну и нужно не забывать очищать успешно законченные запросы на имопрт/экспорт в pst:
Get-MailboxImportRequest -Status Completed | Remove-MailboxImportRequest
Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest
С одиночными пользователями понятно (хотя у меня выдает что нет доступа к папке, для выгрузки). А как массово выгружать ящики? Например всех пользователей в определенной OU?
1. Проверяйте права на папку. У группы Exchange Trusted Subsystem должны быть права на запись.
2. Для получения списка пользвоателей в OU нужно использовать командлет Get-ADUser (https://winitpro.ru/index.php/2015/05/21/powershell-get-aduser-poluchenie-dannih-o-polzovatelyax-active-directory/).
Что-то вроде:
Import-Module ActiveDirectory
$Users=Get-ADUser -Filter * -SearchBase 'OU=Users, DC=winitpro, DC=ru'
ForEach($User in $Users){
New-MailboxExportRequest -Mailbox $User.name -FilePath "\\srv1\share\($User.displayname) + '.pst'"
}
А как быть если почта пользователя уже выгружена? Скрипт снова начнет выгружать почту?
Почта из ящика не удаляется. По сути делается копия в pst.
То есть pst будет пухнуть, пока не грохнешь ящик?
Спасибо!
После пересобирания рейда, совсем забыл про добавление группы ))
А как сделать что бы PST файл создавался автоматически, при выполнении экспорта?
При выполении экспорта ящика с помощью команды вида
New-MailboxExportRequest –Mailbox mailtst –FilePath \\HQFS01\ExportPST\mailtst.pst
PST файл создается автоматически.
Спасибо за ответ, уже разобрался. Оказывается при выполнении экспорта на шару, у Exchange не было прав, помогло добавление прав для группы «Exchange Trusted Subsystem»
Андрей 09.10.2018
То есть pst будет пухнуть, пока не грохнешь ящик?
Андрей, конечно. Посмотрите размеры почтовых ящиков: https://winitpro.ru/index.php/2014/02/02/poluchaem-razmery-pochtovyx-yashhikov-v-exchange-2010/ они все понемного подбираютяс к квоте (а у вас она задана?). Далее пользователь сам должен решать, что оставить в ящике, а что забрать в локальные pst или включить автоматическую архивацию. Есть еще личные архивы Exchange и т.д.
Вариантов много.
Подскажите следующий вопрос.
Размер почтового ящика 19 гб (да я знаю, много, но все-таки).
Выгрузка зацикливается, ставили выгрузку ящика на выходные, за выходные выгрузилось 160 гигов, при этом в процентном соотношении ( командой Get-MailboxExportRequest | Get-MailboxImportRequestStatistics) выдает 30% и продолжает выгружать. Как лечить, куда копать?
Пользователь отключен.
19 Гб это не так уж и много. Мне кажется нужно просто дождаться окончания экспорта ящика.
ну конечно, с такими командлетами любой дурак сможет…
а вот у меня ни одного из них нет в Shell, ни Get-.., ни New-…, ни Import, ни Export
Какая версия Exchange?
Убедитесь, что вы используете Exchange Management Shell, а не обычную консоль PowerShell. Ну и обязательно должны быть права в Exchange через механизм RBAC.
Exchange 2016 CU5
Совершенно точно я использую EMS, не обычный PS.
Вот про RBAC, к сожалению, не слышал, но из того, что успел прочитать, создалось впечатление, что это общий концептуальный подход, а не какая-то его техническая реализация..
Правильно, RBAC это концепция предоставления доступа. Проверьте текущие разрешения в Exchange RBAC с помощью скрипта _https://gallery.technet.microsoft.com/office/RBAC-Role-Group-Membership-ed4e12ad
Этот скрипт вернул мне нули во всех строках и всех столбцах
Похоже прав нет…. В Exchange ECP под вашим аккаунтом пускает (_https://FQDNExchangeServer/ECP)?
Разумеется, я его админю последние года два
Опечатки:
«Запустите
импортЭКСПОРТ ящиков пользователей в PST файлы:Import-CSV «C:\ps\user_to_export_pst.csv» | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst»}
Опечатка:
«полученные после 1 января 2019 года»
(Received –lt “01/01/2019”)
-ge (greater-than-or-equal-to)…
–lt (less-than)
должно быть -ge
Принято! Ваше и предудущее замечания 🙂
Подскажите, пожалуйста, как выгрузить все письма за определенный период из всех почтовых ящиков на сервере в один PST или несколько?
Интересно, как ограничения по датам выставить при импорте в почтовый ящик из pst файла?
Знает кто?
Добрый день ,
Я устроился на работу в одну предприятию , смотрю тут почтовый клиент стоит Exchange 2007.
Хочу мигрировать все почтовые ящики в новый клиент Exchange 2016 так как есть лицензия.
Вот только вопрос :
1) Могу ли я выгрузить все .pst файлы и закинуть их в новый почтовый клиент Exchange 2016 ? Если да , то какие могут быть последствия?
2) Или же развернуть Exchange 2013 и после переход на 2016 ?
если домен один, как вы ПСТ из одного сервера в другой перенесёте?…
я бы посоветовал обновлять
2007-2010-2013-2016-2019
с поэтапным расширением домена…
или сначала делаю экспорт, а потом отдельно «поиск и удаление» по тем же фильтрам
1) экспорт PST
1.1) Удаление запроса экспорта в PST
2) проверка PST (в первые разы, особенно если выгрузка не всего ящика а по датам/именам/и т.д.)
3) удаление через запрос
4) удаления запроса
Спасибо. Посоветуйте программу для проверки pst (типо stellar edb).
или может есть какие командлеты powershell для подключения pst и дальнейшего анализа, чтобы можно было сверить после очистки активного ящика ( количество писем в исходном ящике = pst+очищенный ящик)
Целостность можно проверить встроенной утилитой SCANPST.EXE.
А зачем сранвивать после экспорта? можно просто при экспорте указать параметр BadItemLimit 0 и если при экспорте в PST будет ошибка, он просто прервется.
В любом случае врядли вы будете вручную сверять список писем в ящике и в PST.
Понял)спасибо.
Вроде BadItemLimit 0 по дефолту.
Да хотел , чтобы показать результаты, что все соответствует. Что было вот столько, стало вот столько, остальное вот тут (в pst).
Глазками можно и просто в outlook-е посмотреть, подключив pst, но это же каждый фал надо подключать (а большие файлы медленно подключаются) и просматривать
Добрый день. Еще вопросик.
При копировании даже одного почтового ящика размером в 50-60 Гб, отъедается вся ОЗУ (системой). Становится невозможным запуск в рабочее время.
При запуске экспортирования большого количества ящиков (10-20шт), скорость работы вообще падает до минимума и доступ к системе становится практически невозможен.
На почтовом сервере 20гб ОЗУ (для 40 человек с запасом)
копирую pst-шники на файловый Win сервер.
Все на ферме esxi6.7.
Есть ли какие то методы решения вопроса с ОЗУ ?
Не встречался с таким. Сколько памяти потребляет Exchnage в обычном состоянии?
А если в локальный PST выгружать ящик тоже RAM кушает сильно?
добрый день, есть задача выгрузить ящики пользователе в о365 в пст файл, но проблема что у некоторых пользователей ящики по 130-160гб. Плюс доступа на сервере админского нет, есть только условно логин пароль пользователя.
Какие есть варианты выгрузить такое огромные ящики? Может быть есть какой то софт, который сможет выгрузить ящик и при этом разбить на 3-4 файла результат?
У меня не было опыта со сторонними тулзами. В самомо простом случае можно прям из Oultook сделать экспорт
Здравствуйте.
при выполнении команды из ЕПШ или из веб интерфейса выдает ошибку «Не удается найти контейнер Enterprise Organization.» Как быть ?
все разобрался спасибо, права надо дать. думал удалить свой коммент но нет могу. удалите пожалуйста, чтоб не засорять чат.