Выгрузка данных для аудита почтовых ящиков


Задача — выгрузить список общих (с которыми работают несколько пользователей) ящиков Exchange 2010 с:

  • почтовыми адресами,
  • списком тех, у кого есть полный доступ на ящик,
  • менеджером,
  • размером ящика

Итоговый вывод примерно следующий будет:

"MailboxName1":"Email1":"FAUser1;FAUser2;":"Manager1":"MBSize1"
"MailboxName2":"Email2":"FAUser3;FAUser4;":"Manager2":"MBSize2"
....

Первые два столбца получаются через

Get-Mailbox -Database "Database" -ResultSize unlimited | Select DisplayName,
PrimarySmtpAddress

Мы предполагаем, что общие ящики находятся в одной базе, и кроме них в этой базе других ящиков (пользовательских) нет. Список пользователей, имеющих права доступа мы можем получить, используя командлет Get-MailboxPermission. Причём, нас интересуют только пользователи, которым Full Access дан непосредственно на сам общий ящик, а не на объект, находящийся выше по иерархии (то есть отфильтровываем наследуемые записи для которых параметр IsInherited принимает значение $true). Заодним убираем объект NT AUTHORITY\SELF.

$tmpUsersPermissions = Get-Mailbox $_ | Get-MailboxPermission |
?{($_.IsInherited -eq $false) -and ($_.user -notlike "NT AUTHORITY\SELF")} |
Select User

Далее массив получённых учётных записей надо «склеить»:

$UserPermissionString = "";
foreach ($UserPermission in $tmpUsersPermissions) {
     $UserPermissionString = $UserPermissionString + $UserPermission.User + "; "}

В итоге, в переменной $UserPermissionString окажется требуемый список пользователей с правами Full Access на ящик.

Следующий, интересующий нас объект — менеджер ящика (на самом деле, учётной записи, к которой прикреплён ящик). Так как сам почтовый ящик уже помещён в переменную $_, то можно её использовать для того, чтобы вытащить через Get-User из параметра Manager учётную запись менеджера почтового ящика

(Get-User $_).Manager.Name

Аналогично, через Get-MailboxStatistics и переменную $_ получаем размер ящика. Для уменьшения количества цифр конвертируем его в мегабайты

($_ | Get-MailboxStatistics).TotalItemSize.Value.ToMB()

Теперь осталось всё собрать в одну строку и вывести в csv-файл. В итоге получается примерно следующая конструкция

Get-Mailbox -Database "Database" -ResultSize unlimited | Select DisplayName,
PrimarySmtpAddress,
@{Name="FullAccess";expression={
$tmpUsersPermissions = Get-Mailbox $_ | Get-MailboxPermission |
?{($_.IsInherited -eq $false) -and ($_.user -notlike "NT AUTHORITY\SELF")} |
Select User;
$UserPermissionString = "";
foreach ($UserPermission in $tmpUsersPermissions) {
     $UserPermissionString = $UserPermissionString + $UserPermission.User + "; "};
$UserPermissionString;}},
@{Name="Manager";expression={(Get-User $_).Manager.Name}},
@{Name="MailboxSize";expression={
($_ | Get-MailboxStatistics).TotalItemSize.Value.ToMB()}} |
Export-Csv c:\Temp\mailboxes.txt -Delimiter :

В качестве разделителя использую «:», так как стандартный разделитель «,» может встречаться в имени почтового ящика. Это может сильно испортить процесс дальнейшей обработки выходных данных.

Так как в заголовке указано, что данные предназначены для аудита, то список для выгрузки можно дополнить, например, списком тех у кого есть права на отсылку, или датой последнего изменения.

 

Skip to main content