Задача – выгрузить список общих (с которыми работают несколько пользователей) ящиков 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 AUTHORITYSELF.
$tmpUsersPermissions = Get-Mailbox $_ | Get-MailboxPermission | ?{($_.IsInherited -eq $false) -and ($_.user -notlike "NT AUTHORITYSELF")} | 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 AUTHORITYSELF")} | 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:Tempmailboxes.txt -Delimiter :
В качестве разделителя использую “:”, так как стандартный разделитель “,” может встречаться в имени почтового ящика. Это может сильно испортить процесс дальнейшей обработки выходных данных.
Так как в заголовке указано, что данные предназначены для аудита, то список для выгрузки можно дополнить, например, списком тех у кого есть права на отсылку, или датой последнего изменения.
1 thought on “Exchange 2010: выгрузка данных для аудита почтовых ящиков”