今回は、Powershellにて、Get系のコマンドレットを実行した場合に以下のエラーが表示された事例についてご紹介したいと思います。
エラー1
The total data received from the remote client exceeded the allowed maximum.
エラー2
警告: 極めて短い遅延が適用されました。
上述したエラー内容については、大きなデータセットに対し、連続したコマンドを実行したことでスロットリングに抵触した可能性があります。
多数のユーザーの情報を取得する場合などに発生します。
なお、回避策は、Get-EXOMailbox や Get-EXOCasMailbox の先進認証のコマンドレットに変更することや Sleep コマンドを追記しスリープタイムを設定することで 1 分間に実行されるコマンド数を制御し、処理速度を意図的に均一化させることで、スロットリングを回避できる ことを確認しました。
実際にコマンドレットの変更例をご紹介したいと思います。
元のコマンドレット
Get-Mailbox -ResultSize unlimited -RecipientTypeDetails UserMailbox | Get-CASMailbox | Select DisplayName,OWAEnabled,MAPIEnabled,EwsEnabled,ActiveSyncEnabled,IMAPEnabled,POPEnabled |Export-Csv -Encoding UTF8 -NoTypeInformation -Path "C:\Temp\CASMailbox.csv"
上記のコマンドレットでは、Get-CASMailboxですべてのユーザーメールボックスのプロトコルの設定状況を確認することが可能です
変更後
$UserList = Get-EXOMailbox -Resultsize Unlimited -RecipientTypeDetails UserMailbox
$MailboxStat = $UserList | Foreach {Get-EXOCasMailbox -Identity $_.UserPrincipalName ; Start-Sleep -m 200}
$MailboxStat | select Identity,OWAEnabled,MAPIEnabled,EwsEnabled,ActiveSyncEnabled,IMAPEnabled,POPEnabled | Export-CSV -NoTypeInformation -Encoding UTF8 -Path "C:\Temp\CASMailbox.csv"