В 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
Принято! Ваше и предудущее замечания 🙂
Чтобы использовать этот командлет администратор должен обладать соответствующими правами. По умолчанию группы ролей RBAC обладающей правами для запуска этого командлета не существует, поэтому её надо создать и добавить администратора в эту группу. Делается это следующим образом:
New-RoleGroup “Import-Export Admins” -Roles “Mailbox Import Export”
Add-RoleGroupMember “Import-Export Admins” -Member Administrator
Здесь “Import-Export Admins” – название новой группы прав, которой назначена роль “Mailbox Import Export”, затем в неё добавлен пользовател Administrator. После этого можно запускать командлет для импорта содержимого pst-файла:
Это только для EXC 2010 ? https://www.buldakov.ru/?p=1100
Подскажите, пожалуйста, как выгрузить все письма за определенный период из всех почтовых ящиков на сервере в один 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 сделать экспорт
Если ящики доступны по протоколу IMAP, то imapsync поможет.
Здравствуйте.
при выполнении команды из ЕПШ или из веб интерфейса выдает ошибку «Не удается найти контейнер Enterprise Organization.» Как быть ?
все разобрался спасибо, права надо дать. думал удалить свой коммент но нет могу. удалите пожалуйста, чтоб не засорять чат.
Здравствуйте!
Как выгрузить архивный ящик?
# Экспорт одного ящика
New-MailboxExportRequest -Mailbox USERNAME -FilePath «\\FILESERVER\Shared\ArchiveMailbox\Personal_Archive_USERNAME.pst» -IsArchive
# Экспорт из файла «.csv»
Import-CSV «C:\Scripts\DismissedUserMailboxArchive.csv» | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst -IsArchive}
Microsoft Exchange 2013 SP1 для выгрузки всех писем, полученные после определенной даты, ОБЯЗАТЕЛЬНО ТРЕБУЕТСЯ УКАЗАТЬ ЧАСЫ. без указания часов команда пишет ошибку синтаксиса. Потратил 3 часа на это…
New-MailboxExportRequest –ContentFilter «Received -gt ‘1/1/2022 9:00′» -Mailbox ИмяПочтовогоЯщика -FilePath «\\ПутьКПапкеСохранения.pst»
Вот так попробуйте. у меня работает.
New-MailboxExportRequest –ContentFilter {Received -gt «01/01/2024»} -Mailbox ИмяПочтовогоЯщика -FilePath «\\ПутьКПапкеСохранения.pst»
пытаюсь из pst импортировать в почтовый ящик . Сначала пробовал открыть pst из Outlook — сообщает «у вас отсутствуют необходимые права для доступа к файлу», хотя все права на файл есть. Теперь запустил команду Get-MailboxImportRequest на сервере но файл небольшой, а статистика через час показывает 0%
Доброго дня, подскажите, где можно найти логи при выполнении экспорта/импорта?
У командлетов получения статистики импорта/экспорта есть ключ IncludeReport
Get-MailboxImportRequestStatistics -Identity tstimportjob1 -IncludeReport