headermask image
Рекомендую: Фриланс-биржа | Кэшбэк-сервис | Интернет-бухгалтерия

Получение статистики почтовых ящиков в Exchange 2007

Получение списка почтовых ящиков вместе с их размерами должно занять довольно высокое место в списке часто задаваемых вопросов от администраторов Exchange. В Exchange 2000 и Exchange 2003 эту информацию можно было посмотреть с помощью оснастки Exchange System Manager. Также можно было экспортировать информацию, представленную в Exchange System Manager в текстовый формат и затем импортировать эту информацию в такое приложение как Excel. Другие члены Exchange сообщества публиковали VB сценарии, использовавшие Windows Management Instrumentation (WMI) или Messaging Application Programming Interface (MAPI), чтобы выполнять практически то же самое. Конечно, некоторым администраторам было иногда трудно понять эти сценарии и модифицировать их. Как вы наверняка теперь знаете, Exchange 2007 предлагает Exchange Management Shell для администрирования Exchange 2007 с помощью командной строки, или команд cmdlets, как их теперь называют, которые значительно упрощают способы получения статистических данных о почтовых ящиках.

Основы Get-MailboxStatistics

Самой основной командой Exchange Management Shell является команда Get-MailboxStatistics. На рисунке 1 показан пример данных, полученных после использования этой команды без каких-либо дополнительных параметров. Эта команда запущена на локальном почтовом сервере.

01.jpg
Рисунок 1: Результаты запуска команды Get-MailboxStatistics по умолчанию

Как вы видите, по умолчанию мы имеем четыре раздела информации для каждого почтового ящика на локальном почтовом сервере, отображаемое имя ящика, количество объектов в ящике, статус ограничения объема хранения ящика и последнее время входа. Действительный размер ящика не отображается по умолчанию, поэтому первой задачей будет определение атрибута, хранящего это значение. Одним из способов определения доступных атрибутов, которые можно получить, является передача результатов команды в Format-List cmdlet, и fl, если говорить короче. Например, наша команда теперь будет выглядеть так:

Get-MailboxStatistics | fl

На рисунке 2 показаны результаты применения этой команды, где показаны атрибуты почтового ящика пользователя User2.
1.jpg
Рисунок 2: Результаты команды Get-MailboxStatistics | fl

Теперь можно просматривать другие важные компоненты информации, например TotalItemSize атрибут, который имеет значение в 1584504B, приблизительно 1.5MB. Очевидно, что пользователь User2 не использует большой почтовый ящик в Exchange 2007. Теперь, когда мы знаем, что интересующий нас атрибут называется TotalItemSize, мы можем изменять оригинальную команду, чтобы извлекать эту информацию наряду с именем почтового ящика и количеством объектов в нем. Используемая для этого команда приведена ниже. Обратите внимание на тот факт, что в этот раз мы использовали команду Format-Table, или коротко ft, чтобы получить данные в формате таблицы:

Get-MailboxStatistics | ft DisplayName,TotalItemSize,ItemCount

Результаты использования этой команды показаны на рисунке 3.
2.jpg
Рисунок 3: Get-MailboxStatistics с размерами почтовых ящиков

Как продвинуться дальше, если это довольно сжатые результаты, говорящие нам практически обо всем, что нужно знать. Однако у этих данных есть пара недостатков. Во-первых, данные приведены ни в восходящей и не в нисходящей последовательности, поэтому не сразу видно, какой ящик имеет самый большой размер. Во-вторых, столбец TotalItemSize по умолчанию показан в байтах, что также не очень удобно при чтении.

Дополнительные форматы Get-MailboxStatistics

Давайте сначала обратимся к порядку данных результата. Сортировка объектов с помощью PowerShell на самом деле проста, если использовать, как вы догадались, команду Sort-Object. Все, что вам для этого потребуется, это получить статистику почтовых ящиков и обработать результаты с помощью команды Sort-Object, прежде чем обрабатывать их с помощью Format-Table cmdlet. Для обработки информации в команде Sort-Object нам нужно определить, какой столбец мы хотим упорядочить, и по какому критерию мы будем это делать. Первый параметр, который нам нужно добавить в Sort-Object, это название столбца, которое в нашем случае будет TotalItemSize. Затем мы добавляем либо ‘Descending (в порядке убывания), либо ‘Ascending (в порядке возрастания) направление упорядочивания. Давайте для начала отобразим самые большие почтовые ящики, что в большинстве случаев является именно тем, что нужно знать администраторам. Команда теперь будет такой:

Get-MailboxStatistics | Sort-Object TotalItemSize 'Descending | ft
DisplayName,TotalItemSize,ItemCount

Результаты использования этой команды показаны на рисунке 4.
3.jpg
Рисунок 4: Get-MailboxStatistics с размерами ящиков в нисходящей последовательности

Далее нам нужно преобразовать размеры ящиков из байт в нечто более удобное. Мегабайты будут очевидным ответом, хотя с учетом стремительного роста размеров почтовых ящиков не исключено, что в ближайшем будущем по умолчанию будут использоваться гигабайты. Однако в моей тестовой системе используются ящики относительно небольших размеров, я собираюсь использовать отображение размеров в килобайтах. Для этого нам потребуется заменить параметр TotalItemSize в нашей команде чем-то более сложным:

@{ expression={$_.TotalItemSize.Value.ToKB()}}

Теперь наша команда выглядит следующим образом:

Get-MailboxStatistics | Sort-Object TotalItemSize 'Descending | ft
DisplayName,@{ expression={$_.TotalItemSize.Value.ToKB()}},ItemCount

Результаты использования этой команды показаны на рисунке 5. Если вы хотите отображать размеры ящиков в мегабайтах, используйте TotalItemSize.Value.ToMB в этой команде. Или вы можете использовать TotalItemSize.Value.ToGB для отображения размеров в гигабайтах.
4.jpg
Рисунок 5: Get-MailboxStatistics с размерами ящиков в KB

Так гораздо лучше. Но подождите! Посмотрите на названия столбцов теперь. Столбец, который ранее назывался TotalItemSize, теперь имеет весьма громоздкое название $_.TotalItemSize.Value.ToKB(). Мы можем исправить это довольно легко путем добавления нового ярлыка команде. На самом деле для этого вам нужно добавить изменение в команду, чтобы правильно обозначить столбец. Новая команда показана ниже:

Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft
DisplayName,@{label="TotalItemSize(KB)";expression={$_.TotalItemSize.Value.ToKB()}},
ItemCount

Результаты использования команды показаны на рисунке 6:
5.jpg
Рисунок 6: Get-MailboxStatistics с обозначенным столбцом названий

Наконец, у нас есть результаты, которые имеют удобный формат и которые можно использовать, чтобы определить самые большие почтовые ящики. Теперь вам нужно будет лишь запускать этот сценарий каждый день, неделю или месяц. Очевидно, что такие приложения, как System Center Operations Manager (SCOM) 2007 выводят эту информацию с помощью консоли управления, поэтому как нам выполнить эти же действия в оболочке Exchange Management Shell? Самым простым способом является отправка этой информации по электронной почте, поэтому давайте посмотрим, как это можно сделать.

Отправка результатов по электронной почте

На рисунке 7 показан PowerShell сценарий под названием sendstats.ps1, который можно использовать сначала для генерирования статистки почтовых ящиков с помощью команды, созданной в этой статье, а затем для отправки результатов этой команды по электронной почте администратору. Первое, что нужно учитывать в этом сценарии, это то, что результаты команды Get-MailboxStatistics были направлены в mailboxes.txt файл. Этот файл создается в той папке, из которой запущен сценарий. Другие строки сценария создают и отправляют электронное письмо, прикрепляя файл mailboxes.txt в качестве вкладыша. Важно также учитывать, что строка, начинающаяся с $SendingServer, ссылается на FQDN почтовый сервер, который отвечает за отправку сообщений. Поэтому необходимо убедиться, что данный сервер сможет на самом деле отправлять сообщения.

###Отправка сценария статистики почтовых ящиков

###Сначала, администратор должен изменить значения
###сообщения следующим образом
section$FromAddress = “MailboxReport@ngh.net”$ToAddress =
“administrator@ngh.net”$MessageSubject = “Mailbox Size Report”$MessageBody =
“Attached is the current list of mailbox sizes.”$SendingServer = “e2k7.ngh.net”

###Теперь получить статистику и сохранить ее в
###текстовом файле
Get-MailboxStatistics | Sort-Object
TotalItemSize -Descending | ft
isplayName,@{label=”TotalItemSize(KB)”;expression={$_.TotalItemSize.Value.ToKB()}},
ItemCount > mailboxes.txt

###Создать сообщение и добавить текстовый файл
###статистики как
вкладыш$SMTPMessage = New-Object System.Net.Mail.MailMessage
$FromAddress, $ToAddress, $MessageSubject,
$MessageBody$Attachment = New-Object Net.Mail.Attachment(“./
ailboxes.txt”)$SMTPMessage.Attachments.Add($Attachment)

###Отправить сообщение
$SMTPClient = New-Object System.Net.Mail.SMTPClient
SendingServer$SMTPClient.Send($SMTPMessage)

Рисунок 7: Сценарий SendStats.PS1

Как только эти действия выполнены, сценарий отправит сообщение, как показано на рисунке 8. Открытие вкладыша отобразит результаты сценария Get-MailboxStatistics, как показано на рисунке 9.
6.jpg
Рисунок 8: Отчет, отправленный по почте
7.jpg
Рисунок 9: Содержимое вкладыша

Хотя эти действия дают нам почтовое сообщение с соответствующими данными, содержащимися в нем, в самом сценарии ничего не содержится, если учитывать, что он запускается регулярно. Чтобы этого добиться, мы можем воспользоваться службой планировки Windows и выполнять сценарий на регулярной основе. Для этого нам нужно запустить Exchange Management Shell и определить сценарий, который необходимо выполнить. Это можно сделать с помощью следующей команды:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange
Server\Bin\ExShell.psc1" -Command "./sendstats.ps1"

Здесь мы видим запуск PowerShell и загрузку файла консоли Exchange, расположенного на диске C: в этом примере. Этот параметр можно менять в зависимости от того, на какой диск был установлен Exchange 2007. Параметр ‘Command используется для определения сценария, который мы хотим запустить, а именно sendstats.ps1.

Заключение

В этой статье мы рассмотрели общие проблемные вопросы, с которыми сталкиваются администраторы Exchange, а если говорить точнее, возможность создания списков почтовых ящиков и их размеров. Хотя такие инструменты, как SCOM 2007 могут делать это за вас, из примеров видно, что эти результаты можно очень просто получить, используя Exchange Management Shell команду Get-MailboxStatistics. PowerShell может стать начальным и в то же время сложным витком обучения, но это то, на что стоит потратить время и силы.

Похожие посты
  • Демонстрация Exchange Server 2007
  • Ошибка “An IIS directory entry couldn’t be created. The error message is Access is denied ” после установки Exchange 2010
  • Как узнать размер базы Exchange с помощью PowerShell
  • Бэкап Exchange 2010 и Exchange 2007 SP2 с помощью Windows Server Backup
  • Общие папки с Exchange 2007 не реплицируются на Exchange 2010
  • Как дать пользователю права на управление списком рассылки в Exchange 2007
  • Настройка запрета отправки почты внешним адресатам в Exchange 2007…
  • Установка необходимых компонент для Exchange 2010 в Windows 2008 SP2
  • Работа в режиме хостинга Exchange 2010 SP1. Часть 4 – получение и отправка почты
  • Конфигурирование Outlook 2007 на сервере Exchange Server 2007