我有一台 Exchange 2010 SP3 服务器,它从 MSExchangeIS 获取应用程序事件错误 9646:
Mapi 会话 [ID] [AD 用户] 超出了“objtFolder”类型对象的最大数量(500 个)
调查后发现,原因是多个用户对其他人的邮箱拥有大量完全访问权限。
由于 SP1 中发生了变化请参阅此处的 Technet 文章,他们现在会自动打开所有他们有权访问的用户,而不是仅在需要时才能够添加或打开他们。
理想情况下,我想要一个可以运行的脚本来全局删除所有用户的 -Automapping $true 字符串:这应该让他们可以在需要时访问邮箱,但阻止它自动打开,占用 MAPI 会话。
我尝试了上述 URL 中的 Microsoft Technet 脚本,但它似乎没有按预期工作:
[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 以获得邮箱的任何访问权限。
这可能吗?
答案1
这非常简单。您只需检索邮箱列表并针对每个邮箱运行示例:
# 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
}
}