Главная Exchange/UC, Без рубрики, Новое HTML-отчеты в Exchange 2010
  • HTML-отчеты в Exchange 2010

    clip_image002После того, как внедрение сервера 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, то консоль сама вам подскажет выполняемую команду:

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

    clip_image003

    Рис.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.

    Научившись получать данные и фильтровать их вывод надо научиться сохранять эти данные в файл. Для перенаправления вывода команды в файл используется также конвейер с командой OutFile. Заменить эту конструкцию можно символом > .

    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).

    clip_image005

    Рис.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.

    clip_image007

    Рис.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).

    clip_image009

    Рис.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

    В результате получаем следующую картину:

    image

    Рис.5: Использование скрипта ReportTemplate.ps1

    Мы можем записать в переменную $Data различные наборы данных, на которые, впоследствии, можно просто наложить шаблон и получить красивую HTML-страничку.

    Заключение

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

    Богомолов Алексей (Alexx)
    http://alexxhost.ru

Комментарии

  1. Спасибо за статью. Возьму на заметку. И не только для Exchange 🙂

  2. >Для вставки конвейера используется горизонтальная черта | .
    Может вертикальная? 😉

  3. Да, действительно, она вертикальная… описочка вышла, бывает… 🙂

  4. Доступно и понятно. Спасбо.

  5. >Примечание: Если не указан путь к файлу, то файл будет сохранен в
    >каталог, откуда запущенна консоль PowerShell.
    Не совсем так.. в текущий каталог…

  6. Огромное спасибо за статью. Полезная!

  7. Очень интересно. Спасибо. А есть еще что-нибудь про отчеты в Exchange 2010?