web-dev-qa-db-ja.com

すべてのメールボックスのExchange2010AutoMappingを削除するスクリプト

MSExchangeISからアプリケーションイベントエラー9646を取得しているExchange2010SP3サーバーがあります。

Mapiセッション[ID] [ADユーザー]がタイプ「objtFolder」の最大500個のオブジェクトを超えました

これを調査すると、原因は他の人のメールボックスに多くのフルアクセス許可を持つ複数のユーザーであることが判明しました。

これがSP1で変更された方法が原因で Technetの記事はこちら になり、必要な場合にのみユーザーを追加したり開いたりするのではなく、アクセスできるすべてのユーザーを自動的に開くようになりました。

理想的には、すべてのユーザーの-Automapping $ true文字列をグローバルに削除するために実行できるスクリプトが必要です。これにより、必要なときにメールボックスにアクセスできるようになりますが、メールボックスが自動的に開かず、MAPIセッションが使用されなくなります。

上記のURLからMicrosoftTechnetスクリプトを試しましたが、意図したとおりに機能していないようです。

[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に変更します。

これは可能ですか?

5
Dave

それは信じられないほど簡単です。メールボックスのリストを取得して、それぞれに対して例を実行するだけです。

# 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
    }
}
6