Skip to content

Powershell: enumerate all Exchange 2010 mailbox permissions

28.12.2012

Навыдавали пользователям прав? Все лазают друг у друга в ящиках и благодаря этому происходит полная вакханалия? Нужно понять, кто имеет доступ к какому ящику? Их есть у нас! Перечислить права доступа к почтовым ящикам в Exchange 2010 можно следующим образом:

Clear-Host
Write-Host "Setting variables..."
$Counter1 = 0
$ExcludeAccounts = @(
"NT AUTHORITY\SELF"
)
Write-Host "Importing modules..."
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue
Import-Module ActiveDirectory -ErrorAction SilentlyContinue
Write-Host "Reading mailbox list..." -NoNewline
$AllMailboxes = Get-Mailbox -ResultSize Unlimited
Write-Host "$($AllMailboxes.Count) total"
Write-Host "Mailbox;User;Permissions"
$AllMailboxes | % {
 $Counter1++
 $PercentComplete = (($Counter1 / $AllMailboxes.Count)*100)
 Write-Progress -Activity "Working hard!" -Status "Complete: $([Math]::Round($PercentComplete,1))%" -PercentComplete $PercentComplete
 Get-MailboxPermission $_ | % {
 if ($ExcludeAccounts -notcontains $_.User -and $_.IsInherited -eq $False -and $_.Deny -eq $False) {
 $CurrentMailbox = $_.Identity.ToString().Substring($_.Identity.ToString().LastIndexOf("/")+1)
 $CurrentUserDirty = $($_.User.ToString().Substring($_.User.ToString().IndexOf("\")+1)).ToString()
 if (Get-ADObject -Filter "name -eq '$CurrentUserDirty' -or samaccountname -eq '$CurrentUserDirty'") {
 $CurrentUserObjectClass = (Get-ADObject -Filter "name -eq '$CurrentUserDirty' -or samaccountname -eq '$CurrentUserDirty'" | ? { $_.ObjectClass -eq 'group' -or $_.ObjectClass -eq 'user' }).ObjectClass
 if ($CurrentUserObjectClass -eq "user") {
 $CurrentUser = (Get-ADUser $_.User.ToString().Substring($_.User.ToString().IndexOf("\")+1) -ErrorAction SilentlyContinue).Name
 }
 if ($CurrentUserObjectClass -eq "group") {
 Get-ADGroupMember $CurrentUserDirty -Recursive | % {
 $CurrentGroupMembers += "$($_.name),"
 }
 $CurrentUser=$CurrentGroupMembers.TrimEnd(',')
 }
 } else {
 $CurrentUser = $_.User.ToString()
 }
 $CurrentAccessRight = $_.AccessRights
 $CurrentSendAs = 0
 if ($CurrentMailbox -ne $CurrentUser -and $CurrentUser -ne $null) {
 $OutResult = "$CurrentMailbox;$CurrentUser;$CurrentAccessRight"
 Write-Host $OutResult
 $OutResult | Out-File "d:\result.csv" -Append
 }
 Remove-Variable CurrentMailbox,CurrentUser,CurrentAccessRight,CurrentGroupMembers,CurrentUserObjectClass,CurrentGroupMembers -ErrorAction SilentlyContinue
 }
 }
}

Скрипт перечисляет права доступа к почтовым ящикам, выданные на административном уровне. Но ведь пользователи могут выдавать доступ к своему ящику и папкам/календарям/адресным книгам в нем самостоятельно из Outlook! Как получить перечень таких прав доступа — в следующем выпуске.

Реклама

From → Exchange, Powershell

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

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

%d такие блоггеры, как: