Выгрузка данных для аудита почтовых ящиков
Задача — выгрузить список общих (с которыми работают несколько пользователей) ящиков 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 : |
В качестве разделителя использую «:», так как стандартный разделитель «,» может встречаться в имени почтового ящика. Это может сильно испортить процесс дальнейшей обработки выходных данных.
Так как в заголовке указано, что данные предназначены для аудита, то список для выгрузки можно дополнить, например, списком тех у кого есть права на отсылку, или датой последнего изменения.
Comments
Anonymous
January 01, 2003
С почином.Anonymous
January 01, 2003
Спасибо!