Отчет об активности пользователей Exchange.

CCAJD4WB7CAJKJK5QCA0P03NYCAF03RK2CAM8D4L6CATSQ071CAZPWDVZCAFS1A8HCA19U9YWCAVRB2XJCALAL6YYCATH70JECA78Z4UQCACLRDM2CAPFF0THCAUXVGDUCAD803SCCAX9IM6KCALBRJY1 У некоторых администраторов и их руководителей иногда возникают грустные мысли. У администратора: “А нужна вообще моя работа, может никто и не пользуется этой несчастной почтой…”, у руководителя: “А нужна ли нам вообще электронная почта? Может ей и не пользуется никто… Может все-таки уволить Ваську нафиг?” И как же получить быстрый ответ на эти вопросы? Я предлагаю самый скромный вариант.

Так как это бюджетный вариант – мы поступим примитивно – проверим время последнего доступа в ящик. Для этого мы можем использовать вывод командлета Get-MailboxStatistics, а именно нас интересует LastLogonTime. Да-да, это опять PowerShell, а как же?

Итак,  нас интересуют не все значения LastLogonTime, а только лишь, например, за последний месяц. Для этого мы используем оператор Where, в котором отберем только удовлетворяющие условиям значения.

Для начала нам нужно получить текущую дату, и загнать ее в переменную (я тупой повершелловец, может можно и по другому, но у меня не получилось):

$t = Get-Date

Теперь проверим:

[PS] C:\Windows\System32>$t

28 августа 2009 г. 12:28:06

Оно! То, что нужно.

Дальше нам нужно “убавить” дату на 30 дней. Это мы сделаем при помощи .addDays(-30). Например так

[PS] C:\Windows\System32>$t.addDays(-30)

29 июля 2009 г. 12:28:06

Отлично!

Далее получаем статистику ящиков и берем из вывода только DisplayName и LastLogonTime.

[PS] C:\Windows\System32>Get-MailboxStatistics | Select DisplayName, LastLogonTime

DisplayName                             LastLogonTime
————                             ————-
Ольга Ракчеева                          28.08.2009 8:55:31
Михаил Буслаев                          28.08.2009 15:02:06
Вячеслав Селихов                        28.08.2009 9:54:14
Роман Баловнев                          07.08.2009 17:11:23
Олег Крылов                             28.08.2009 14:05:50
Глеб Якунин                             28.08.2009 13:15:07
Борис Анипченко                         28.08.2009 10:59:49
Нонна Мочарашвили                       28.08.2009 14:03:07
Алексей Ляс                             28.08.2009 15:05:09
Александр Новиков                       28.08.2009 15:35:41
Олеся Зиновьева                         26.08.2009 9:10:44
Сергей Прокофьев                        28.08.2009 15:02:50
Артём Синицын                           28.08.2009 15:46:28
Анна Соболь                             27.08.2009 9:38:19
Александр Голанов                       19.08.2009 11:40:40
Александр Кутненко                      28.08.2009 9:43:54
Антон Еремеев                           22.06.2009 17:04:15
Александр Семенов                       21.08.2009 0:37:32
Вадим Куринский                         28.08.2009 15:26:53
Елена Дельцова                          28.08.2009 12:35:24
Олег Крылов                             29.07.2009 13:49:27
IVRAdmin                                22.06.2009 14:51:41
Ольга Ильясова                          28.08.2009 15:18:20
Александр Ефимов                        28.08.2009 12:37:54
Людмила Полякова                        28.08.2009 9:30:30
Сергей Филин                            28.08.2009 14:58:27
Дарья Дударева                          28.08.2009 12:24:03
Татьяна Швалева                         28.08.2009 9:34:44
SystemMailbox{9452849A-87D4-454F-BAD… 26.08.2009 23:55:40
Степан Голосунов                        28.08.2009 15:51:56
Илгиз Мамышев                           28.08.2009 11:04:15
Денис Дягилев                           26.08.2009 15:49:32
Надежда Бусыгина                        28.08.2009 15:50:21

Мы получили вывод ВСЕХ ящиков, в том числе и системных. Нам этого не надо.

Фильтруем по LastLogonTime:

Get-MailboxStatistics | Select DisplayName, LastLogonTime | Where { $_.LastlogonTime -ge ($($t.addDays(-30)))}

Вывод очень даже ничего. Но присутствуют ящики вида SystemMailbox{GUID} и Microsoft System Attendant. Мы и так знаем, что это самые постоянные пользователи почты, поэтому о них нам сведения не нужны. Фильтруем:

Get-MailboxStatistics | Select DisplayName, LastLogonTime | Where { $_.LastlogonTime -ge ($($t.addDays(-30)))} | Where { $_.DisplayName -notmatch "System*"}

Отлично. То что надо. Вот в принципе и отчет. Но делать его каждый день лениво, надо бы сунуть его в шедулер и получать на почту. Для отправки нам неплохо бы сконвертировать вывод в HTML. Для этого используем ConvertTo-HTML, без аргументов. И итоговый вид получения отчета будет такой:

Get-MailboxStatistics | Select DisplayName, LastLogonTime | Where { $_.LastlogonTime -ge ($($t.addDays(-30)))} | Where { $_.DisplayName
-notmatch "System*"} | ConvertTo-HTML

Теперь отправка в почту. К сожалению PowerShell v 1.0 не умеет отправлять почту сам. Надо научить :) Самый великий учитель PoSH’a у нас кто? Правильно, Вася :D Стучим к Васе в мессенджер. Вася дает ссылку на свой блог. Забираем его скрипт. Сохраняем в папке C:\Program Files\Microsoft\Exchange\Scripts под именем Send-SMTPMessage.ps1.

!!! Сразу оговорюсь об одной очень важной вещи:

Если использовать Васин скрипт без изменений, получим в случае простого вывода пустое письмо, в случае вывода в HTML – письмо с HTML-кодом. Т.е. со всеми тэгами и абсолютно нечитабельное. Поэтому правим Васин скрипт. Добавляем свойство сообщения $Message.IsBodyHtml = $true. Сразу после комментария “Устанавливаем свойства объектов”.

В качестве аргумента оператора –body – подставим наш отчет в виде HTML. Для этого загоним его в переменную $report

$report = Get-MailboxStatistics | Select DisplayName, LastLogonTime | Where { $_.LastlogonTime -ge ($($t.addDays(-30)))} | Where { $_.DisplayName -notmatch "System*"} | ConvertTo-HTML

И запускаем Васин скрипт, подставляя необходимые параметры (которые тоже можно определить в виде переменных, но я не стал заморачиваться)

Send-SMTPMail -Server wz-exch1.ad.webzavod.ru -From "Oleg Kryov<krylov@webzavod.ru>" -To krylov@webzavod.ru -Subject "Отчет об использовании системы" -body "$report"

Получаем письмо:

image

То, что должно быть. Ура!

Сохраняем наш скрипт в файл (я не знаю, как правильно форматировать скрипты в красивый набор строчек, поэтому я сделал три строчки в блокноте. В конце каждой строчки нажал Enter)

$t = Get-Date [Enter]

$report = Get-MailboxStatistics | Select DisplayName, LastLogonTime | Where { $_.LastlogonTime -ge ($($t.addDays(-30)))} | Where { $_.DisplayName -notmatch "System*"} | ConvertTo-HTML [Enter]

Send-SMTPMail -Server wz-exch1.ad.webzavod.ru -From "Oleg Kryov<krylov@webzavod.ru>" -To krylov@webzavod.ru -Subject "Отчет об использовании системы" -body "$report"

Вот и все. Сохраняем в виде файла в папке C:\Program Files\Microsoft\Exchange\Scripts под именем Send-UsageReport.ps1. И вешаем его в качестве задания шедулеру.

P.S. Возможно это все слишком по детски. Я потратил на это каких-то 4 часа. Можно добавить оператор Count для подсчета общего количества объектов, можно исключить различные предупреждения, которые появляются при попытке получить данные о ящиках, в которые не было ни одного логона (-WarningAction SilentlyContinue), можно, можно, можно… Буду рад критике и замечаниям, впрочем как и всегда :)

P.P.S. Васька, над увольнением которого раздумывает наш гипотетический руководитель и Вася – абсолютно разные люди. Любые совпадения случайны.

Реклама
Отчет об активности пользователей Exchange.

Отчет об активности пользователей Exchange.: 5 комментариев

  1. Олег, у тебя ошибка в регулярном выражении :)
    PS C:\Users\Xaegr> «Usystemeev» -match «System*»
    True
    Такое выражение означает примерно следующее:
    Встречающаяся в любом месте строки последовательность («Syste» и 0 или более символов «s»)

    Тебе же нужно либо:
    Where { $_.DisplayName -notmatch «^System»}
    либо использовать простые символы подстановки (кстати будет производительнее):
    Where { $_.DisplayName -notlike «System*»}

    Хотя конечно работать будет и так, это я придираюсь =)

  2. Олег Крылов:

    Да, но для большого количества объектов — производительность критична. Спасибо Вась, попробую с -notlike

  3. Firsov Alexey:

    Очень полезная статья. Надо будет скрипт маленько под себя расширить и автоматизировать и будет просто супер. Олег, как всегда, на высоте :)

  4. Browsing des.oiculicom I noticed your website book-marked as: Install Plugins » Somnangblogs. I’m assuming you book-marked it yourself and wanted to ask if social bookmarking gets you a good deal of targeted traffic? I’ve been considering doing some book-marking for a few of my sites but wasn’t certain if it would produce any positive results. Appreciate it.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s