Назад | Перейти на главную страницу

Скрипт для удаления Exchange 2010 AutoMapping для всех почтовых ящиков

У меня есть сервер Exchange 2010 SP3, который получает ошибку события приложения 9646 от MSExchangeIS:

Сеанс Mapi [ID] [Пользователь AD] превысил максимальное количество объектов типа "objtFolder" - 500.

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

Из-за того, как это изменилось в SP1 См. Статью Technet ЗДЕСЬ, Теперь они автоматически открывают всех пользователей, к которым у них есть доступ, вместо того, чтобы добавлять или открывать их только при необходимости.

В идеале мне нужен сценарий, который я могу запустить, чтобы глобально удалить строку -Automapping $ true для всех пользователей: это должно оставить им доступ к почтовому ящику, когда это необходимо, но не дать ему автоматически открываться, занимая сеансы MAPI.

Я попробовал Microsoft Technet Script из приведенного выше URL-адреса, но, похоже, он не работал должным образом:

[PS]$FixAutoMapping = Get-MailboxPermission sharedmailbox|where {$_AccessRights -eq "FullAccess" -and $_IsInherited -eq $false}
The operation couldn't be performed because object sharedmailbox couldn't be found on '[Servername]'.
    + CategoryInfo          : InvalidData: (:) [Get-MailboxPermission], ManagementObjectNotFoundException
+ FullyQualifiedErrorId : B485A4C7,Microsoft.Exchange.Management.RecipientTasks.GetMailboxPermission

Я предполагаю, что sharedmailbox - это конкретный пример почтового ящика, которого нет на моем сервере: мне нужен сценарий, который просматривает все почтовые ящики, а затем меняет Automapping $ true на Automapping $ false для любых разрешений доступа к почтовому ящику.

Возможно ли это сделать?

Это невероятно просто. Вам просто нужно получить список почтовых ящиков и запустить пример для каждого из них:

# Get all mailboxes in the forest
$Mailboxes = Get-Mailbox -ResultSize unlimited -IgnoreDefaultScope
$ConfirmPreference = 'None'

# Iterate over each mailbox
foreach($Mailbox in $Mailboxes)
{
    try 
    {
        # Try to run the example fix against the current $Mailbox
        $FixAutoMapping = Get-MailboxPermission $Mailbox |where {$_.AccessRights -eq "FullAccess" -and $_.IsInherited -eq $false}
        $FixAutoMapping | Remove-MailboxPermission
        $FixAutoMapping | ForEach {Add-MailboxPermission -Identity $_.Identity -User $_.User -AccessRights:FullAccess -AutoMapping $false} 
    }
    catch
    {
        # Inform about the error if unsuccessful
        Write-Host "Encountered error: $($Error[0].Exception) on mailbox $($Mailbox.DisplayName)" -ForegroundColor Red
    }
}