После того, как внедрение сервера Exchange завершено и у вас все прекрасно работает, перед администратором встает задача качественного мониторинга системы. Вариантов подобного мониторинга может быть масса, в этой статье мы поговорим про получение различного рода отчетов, помогающих оценить состояние сервера в целом. Более того, я покажу, как сгенерировать подобные отчеты не просто в консоли PowerShell, но сделать красивый и удобочитаемый документ, который будет не стыдно положить на стол руководителю.
Начнем с азов
Думаю ни для кого не секрет, что начиная с версии Microsoft Exchange 2007, архитектурная модель сервера базируется на Microsoft .NET Framework. В результате теперь главную роль играют командлеты PowerShell, которые покрывают все функциональные возможности сервера, а задача графической консоли сводится лишь к визуализации их использования; в отличие от более ранних версий, где все было с точностью до наоборот. Раз так, то получается, что в консоли PowerShell мы можем получить абсолютно любую информацию, касающуюся состояния сервера Exchange.
Структура команд
Команда в PowerShell строятся из трех элементов – глагола (Get-, Set-, New-, Remove- и т.п.), существительного (Mailbox, MailboxDatabase и т.п.) и списка параметров (-Identity, -Name, -Server, -User и т.п.), например:
Get-Mailbox –Identity User
Выведет на экран информацию о почтовом ящике пользователя User.
Для получения отчетов нам понадобятся только Get-командлеты, они ни чего не изменяют в конфигурации, а лишь считывают данные из указанных объектов.
Получение помощи
Если вы не уверены в синтаксисе той или иной команды, то вам поможет команда Get-Help, которая выведет подробную справку с примерами. Воспользоваться ей можно, например так:
Get-Help Get-Mailbox –full
Посмотреть список всех доступных команд можно при помощи Get-Command. Вывести все доступные Get-командлеты можно следующим образом:
Get-Command Get-*
Если вы не знаете какой командлет используется для выполнения конкретного действия, но знаете как это действие выполнить в Exchange Management Console, то консоль сама вам подскажет выполняемую команду:
Во-первых, при внесении каких-либо изменений, вы всегда можете воспользоваться кнопкой, расположенной в левой нижней части окна, при нажатии на неё будет выведена команда, которая будет выполнена после нажатия кнопки ОК.
Рис.1: Просмотр команды, планирующейся к выполнению.
Во-вторых, если вы выполняете какое-либо действие при помощи мастера, то на последнем его шаге будет выведена информация по результатам выполнения определенной команды и сама команда. Результаты всегда можно скопировать при помощи сочетания клавиш Ctrl+C и далее использовать.
Конвейеры и форматирование вывода
Если вы выполните предыдущую команду
Get-Mailbox –Identity User
то заметите, что на экран вывелась далеко не вся информация о почтовом ящике. Для того, чтобы увидеть необходимый набор параметров, следует воспользоваться функцией форматирования вывода. Существует три формы вывода информации:
- Детальный список - Format-List
- Таблица - Format-Table
- Две колонки - Format-Wide
Разрешается сокращать эти команды до FL, FT и FW соответственно.
Чтобы передать вывод одной команды на вход другой применяются конвейеры. Для вставки конвейера используется горизонтальная черта | . Например, чтобы получить действительно полный список параметров почтового ящика, необходимо воспользоваться следующей конструкцией:
Get-Mailbox –Identity User | FL
В результате вы получите огромное количество информации, анализировать которое достаточно не просто. Чтобы вывести на экран только часть параметров нужно воспользоваться фильтром, например следующим образом:
Get-Mailbox –Identity User | FL Name,Alias,*Quota*
В результате будет выведено значение только имени, псевдонима и всех параметров, в которых встречается слово Quota.
Вместе с функцией фильтрации данных очень удобно использовать функцию сортировки, она сильно облегчит вам визуальный анализ полученных результатов. Для сортировки вывода используется командлет Sort-Object, в качестве параметра у которого необходимо указать поле по которому вы хотите отсортировать вывод. В результате команда будет выглядеть примерно так:
Get-Mailbox –Identity User | FL Name,Alias,ArchiveQuota | Sort-Object ArchiveQuota
Научившись получать данные, фильтровать и сортировать их вывод, надо научиться сохранять эти данные в файл. Для перенаправления вывода команды в файл используется также конвейер с командой Out-File. Заменить эту конструкцию можно символом > .
Get-Mailbox –Identity User | FL Name,Alias,*Quota* | Out-File c:\test.txt
аналогично
Get-Mailbox –Identity User | FL Name,Alias,*Quota* > c:\test.txt
Примечание: Если не указан путь к файлу, то файл будет сохранен в каталог, откуда запущенна консоль PowerShell.
Конвертируем в HTML-формат
Разобравшись с тем, как создавать отчеты, давайте перейдем к вопросу их форматирования.
Для конвертации вывода команд PowerShell в HTML-формат используется конвейер с командой ConvertTo-Html.
Примечание: Существует ещё конвертер в CSV формат ConvertTo-Csv, но о нем мы говорить не будем.
Для демонстрации возможностей давайте разберем конкретную задачу:
Необходимо сгенерировать отчет отображающий использование почтовыми ящиками пользователей дискового пространства на сервере. В отчет следует включить отображаемое имя почтового ящика, сервер на котором он расположен и имя базы данных.
Для решения поставленной задачи воспользуемся командлетом Get-MailboxStatistics, на вход которой отправим все почтовые ящики. В результате команда будет выглядеть следующим образом:
Get-Mailbox | Get-MailboxStatistics | ConvertTo-Html DisplayName, Servername, Database, TotalItemSize > c:\Report.htm
Get-Mailbox | Get-MailboxStatistics | ConvertTo-Html DisplayName, Servername, Database, TotalItemSize | Out-File c:\Report.htm
Get-Mailbox | Get-MailboxStatistics | Select-Object DisplayName, Servername, Database, TotalItemSize | ConvertTo-Html > c:\Report.htm
Все три команды дадут идентичный эффект, результатом которого станет генерация файла Report.htm в корне диска C: (рис.2).
Рис.2: Сгенерированный отчет.
Красиво? Да!, но не достаточно, такой отчет на стол начальнику не положишь. Следовательно, разбираемся дальше.
Использование HTML-тэгов
Раз речь зашла о конвертации в HTML, то логично было бы предположить, что существует возможно использовать HTML-тэги при генерации документов. Такая возможность действительно есть. Давайте посмотрим, как можно «украсить» полученную таблицу.
Во-первых, мы можем использовать тэги типа –Head, -Body, -Title и т.п., указав их сразу после командлета ConvertTo-Html. Например так:
Get-Mailbox | Get-MailboxStatistics | ConvertTo-Html –Title “Mega Report” –Body “<H2>Information about mailboxes</H2>” DisplayName, Servername, Database, TotalItemSize > c:\Report.htm
В результате получиться отчет, показанный на рис.3.
Рис.3: Отчет с заголовками.
Уже лучше, но можно и ещё кое-что подправить. Например, гораздо удобнее будет, если табличка с данными будет иметь очерченные границы и будет выделена другим цветом.
Для этого воспользуемся стилями. Для вставки стилей в HTML используется конструкция <style>…</style>. В данном случае будет уместнее собрать стили документа в одну составную переменную, которую нужно будет в последствии использовать в командлете ConvertTo-Html. Сделаем это следующим образом:
$Style = ”<style>”
$Style = $Style + "BODY{background-color:#DCE5F1;}"
$Style = $Style + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$Style = $Style + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#4D81BE}"
$Style = $Style + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#B8CBE3}"
$Style = $Style + ”</style>”
Далее указываем переменную $Style в качестве параметра для тэга -Head в командлете ConvertTo-Html:
Get-Mailbox | Get-MailboxStatistics | ConvertTo-Html –Title “Mega Report” -Head $Style –Body “<H2>Information about mailboxes</H2>” DisplayName, Servername, Database, TotalItemSize > c:\Report.htm
Проще всего сохранить этот листинг в виде отдельно PowerShell скрипта, например Report.ps1 (см.рис.4).
Рис.4: Цветовое оформление отчетов.
Примечание: Коды цветов для HTML можно легко найти в сети Интернет.
Теперь получилось красиво и полезно, но не универсально. Чтобы использовать один и тот же шаблон отчета, но для разных типов данных я предлагаю сохранить часть когда, которая отвечает за конвертацию и оформление информации в отдельный скрипт, например ReportTemplate.ps1 и использовать его следующим образом:
1. Сохраняем в переменную $Data массив с нужными данными, например:
$Data = Get-Mailbox | Get-MailboxStatistics | Select-Object DisplayName, Servername, Database, TotalItemSize
2. Запускаем скрипт ReportTemplate.ps1, со следующим содержимым:
$Style = ”<style>”
$Style = $Style + "BODY{background-color:#DCE5F1;}"
$Style = $Style + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$Style = $Style + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#4D81BE}"
$Style = $Style + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#B8CBE3}"
$Style = $Style + ”</style>”
$Data | ConvertTo-Html –Title “Mega Report” -Head $Style –Body “<H2>Report:</H2>” > c:\Report.htm
В результате получаем следующую картину:
Рис.4: Использование скрипта ReportTemplate.ps1
Мы можем записать в переменную $Data различные наборы данных, на которые, впоследствии, можно просто наложить шаблон и получить красивую HTML-страничку.
Заключение
Отчеты, это очень нужная вещь и, чем лучше в них будет отображена та или иная информация, тем проще будет с ней работать. Потратив однажды немного времени на создание шаблона, вы с легкостью сможете создать удобочитаемый документ с тем набором данных, который вам необходим в конкретный момент времени.
15 комментариев:
День добрый,
как добавить контакты с внешними адресами в Exchange?
А какая связь с темой статьи?
Контакты можно создать в разделе Настройка получателей - Почтовые контакты.
Понятно, а если их много, автоматизировать можно как-то?
А если много - то PowerShell вам в помощь!
А что именно прописать подскажите.
А как правильно сделать сортировку по Обьему.
Алексей, вы можете привести пример экспорта/импорта списка контактов (почтовых ящиков) в Exchange 2010
Так всеже речь идет про контакты, или почтовые ящики?
Что касается создания списка контактов либо почтовых ящиков из csv файла (импорта) - у меня есть скрипты. Напишите мне на электронку, я с вами поделюсь.
Что касается экспорта, то тут проблем не вижу. Используйте командлеты Get-Mailbox и Get-MailContact.
Просто здорово. Столько времени тратил. а все так просто и доступно объяснил
Алексей, добрый день. Не подскажите, как создать отчет по сообщениям в конкретном почтовом ящике - таблицу типа дата/время, кому/от, заголовок, размер, с сортировкой по "кому" ? В Get-Mailbox ничего похожего не нашёл, наверное надо как - то по - другому.. Спасибо.
Воспользуйтесь вот этим скриптом http://gallery.technet.microsoft.com/scriptcenter/bb94b422-eb9e-4c53-a454-f7da6ddfb5d6?SRC=Home
Добрый день.
В списке баз данных exchange есть отключенная. Когда скрипт доходит до ящиков, размещенных в ней - спотыкается и html ломается.
Есть параметр -database для обработки данных конкретной БД, но в какое место его указывать - что то не соображу.
Подскажите пож-та. Спасибо.
В самое начало - Get-Mailbox -Database 123 | Get-...
а не подскажете, как скорректировать Ваш отчет.
Мне нужно получить поля Company и Departament.
а они есть только в выводе команды get-adUser.
до использования скрипта тег -Title работал. после - нет.
Отправить комментарий