После того, как внедрение сервера 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.
Научившись получать данные и фильтровать их вывод надо научиться сохранять эти данные в файл. Для перенаправления вывода команды в файл используется также конвейер с командой 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
В результате получаем следующую картину:
Рис.5: Использование скрипта ReportTemplate.ps1
Мы можем записать в переменную $Data различные наборы данных, на которые, впоследствии, можно просто наложить шаблон и получить красивую HTML-страничку.
Заключение
Отчеты, это очень нужная вещь и, чем лучше в них будет отображена та или иная информация, тем проще будет с ней работать. Потратив однажды немного времени на создание шаблона, вы с легкостью сможете создать удобочитаемый документ с тем набором данных, который вам необходим в конкретный момент времени.
Богомолов Алексей (Alexx)
http://alexxhost.ru
Спасибо за статью. Возьму на заметку. И не только для Exchange 🙂
>Для вставки конвейера используется горизонтальная черта | .
Может вертикальная? 😉
Да, действительно, она вертикальная… описочка вышла, бывает… 🙂
Доступно и понятно. Спасбо.
>Примечание: Если не указан путь к файлу, то файл будет сохранен в
>каталог, откуда запущенна консоль PowerShell.
Не совсем так.. в текущий каталог…
Огромное спасибо за статью. Полезная!
Очень интересно. Спасибо. А есть еще что-нибудь про отчеты в Exchange 2010?