среда, 21 июля 2010 г.

Удаление почтового сообщения из почтовых ящиков Microsoft Exchange 2007 скриптом Exchange Power Shell

Возникла необходимость удалить, разосланное всем сообщение из почтовых ящиков пользователей, для этих целей использовал скрипт на Exchange Power Shell:

содержимое файла скрипта "Delete message from many mailboxes.ps1":

#переменная имени файла
$File_Name="D:\MailboxList.txt"
#заполняем массив строками из файла
$mass=Get-Content $File_Name
#админская учетка
$Admin_username="NETBIOSDOMAINNAME\Admin_Exch"
#параметры поиска для удаления письма
#текст в письме
$Text_ContentKeywords="Бла, бла, бла."
#имя вложения
$Text_AttachmentFilenames="Список.xls"
#дата начала поиска
$Text_StartDate="20/07/2010 14:00:00"
#цикл перебора строк из файла
foreach($string in $mass)
{
#присваиваем переменной имени пользователя строку из файла
$user_mailbox=$string
#добавляем права адмиской учетке на ящик
Add-MailboxPermission -identity $user_mailbox -Accessrights FULLACCESS -User $Admin_username
#Удаляем элемент из почтового ящика
Export-Mailbox -Identity $user_mailbox -ContentKeywords $Text_ContentKeywords -AttachmentFilenames $Text_AttachmentFilenames -StartDate $Text_StartDate -DeleteContent -Confirm:$false
}

поскольку файл с почтовыми ящиками содержал >1200 записей - разбил его на 3 части(надо было на большее число частей, что бы ещё быстрее) и запустил на разных серверах Exchange 2007.

Нагрузка(Workload) на 4х процессорный сервер(активная нода CCR кластера почтовых ящиков) с Xeon 3ГГц процессорами была в районе 50%, нагрузка на диски была не большаяпри этом был RAID5 на 4х дисках, а общий объем занимаемый базами почтовых ящиков был чуть больше 320Гб. По памяти на ноде было 16Гб RAM.

Надо сказать, что сообщение, подлежащее удалению, было отозвано отправителем через 40 минут, и ему стали сыпаться уведомления о недоставке. Мы сформировали список пользователей из письма, которым было отправлено это почтовое сообщение (делали в excel), исключили из него тех, у кого сообщение было успешно отозвано(ждали ночное время), и, вытащив из Active Directory имена пользователей (distinguishedname) с логинами(LoginName) и именами почтовых ящиков (mail) (как это делается см. следующий пост) сопоставили через Acces c теми, у кого почта была не отозвана, получив таким образом список почтовых ящиков из которых необходимо было удалить злополучное письмо в виде текстового файла (в скрипте это переменная $File_Name).

Из работы скрипта, а точнее команды Export-Mailbox не понравилось то, что она не ищет во вложенных папках, т.е. если пользователь в Microsoft Outlook клиенте у себя в папке Входящие(Inbox), например, создал еще какую-то папку, и искомое письмо оказалось в ней, то оно не будет удалено скриптом, в том виде скрипта в каком он указан в настоящий момент. Хоть у команды Export-Mailbox и есть ключ -IncludeFolders он не позволяет указывать маску поиска подпапок, а только перечислять конкретные имена папок(проверено).

Кстати, поначалу тоже столкнулся с ошибкой:

The export-mailbox task for mailbox 'test test' failed.

Error: Failed to copy messages to the destination mailbox store with error:

MAPI or an unspecified service provider.

ID no: 00000000-0000-00000000, error code: -1056749164

Даже мысли не возникло, с подозрением на нехватку прав на почтовый ящик, поскольку пользователь из-под которого это всё запускалось был в группах DomainAdmin, Exchange Administrator, Enterprise Administrator, но как оказалось без строки в коде:

#добавляем права адмиской учетке на ящик
Add-MailboxPermission -identity $user_mailbox -Accessrights FULLACCESS -User $Admin_username

Это не работает, всё-равно.

Полезные ссылки:
http://shss.wordpress.com/2010/07/08/ad-add-telephone-numbers-using-excel-application-as-data-soutce/
http://blogs.sysfaq.ru/powershell/category/learn/page/2/
http://window.edu.ru/window_catalog/pdf2txt?p_id=31200&p_page=5
http://mcp.su/2009/09/powershell-exchange-2007-ad/
http://technet.microsoft.com/ru-ru/library/bb676491(EXCHG.80).aspx
http://www.intuit.ru/department/os/compromtwin/19/2.html
http://www.osp.ru/win2000/2007/03/4245842/
http://sysadmins.ru/topic265273.html
http://www.osp.ru/win2000/2007/03/4245842/
http://www.exchangeinbox.com/article.aspx?i=102

Комментариев нет:

Отправить комментарий