This Powershell script will help you to locate messages that are larger than 150 MB from user's on-premise mailbox and export to CSV. You can the use this report to inform users to archive or delete the items found. This is important action point in Office 365 mailbox migration...

-- More Information --

You receive the following error message when migrating mailbox from on-premise to Exchange Online:

FailureType : TooManyLargeItemsPermanentException
FailureSide : Target
Message : Error: This mailbox exceeded the maximum number of large items that were specified for this request. --> MapiExceptionMaxSubmissionExceeded: IExchangeFastTransferEx.TransferBuffer failed (hr=0x80004005, ec=1242)

This issue occurs if the user's mailbox contains one or more messages that exceed the 150-megabyte (MB) message limit.

PowerShell
Edit|Remove
<####################################################################### 
 
    OBJECTIVE: 
    This script will locate messages larger than 35 MB  
    in a user's mailbox and export it to CSV file 
 
########################################################################> 
 
<####################################################################### 
 
    REQUIREMENT: 
    <1> A .csv file with the Primary SMTP addresses of all mailboxes  
    thet need to be scanned. The heading of the list should be  
    "EmailAddress" 
 
    <2> PowerShell v3.0 is required 
 
########################################################################> 
 
<####################################################################### 
 
    SYNTAX: 
    ./O365-LargeItemReport.ps1 -filePath <path> 
 
#########################################################################> 
 
<######################################################################## 
 
    OUPUT FILES: 
    <1> LargeItemReport.csv - This has information of large items  
    in users mailbox and its location 
 
    <2> FailedRecords.txt - Details of Email Addresses for which the  
    scan could not be performed. 
 
#########################################################################> 
 
<######################################################################## 
 
    AUTHOR          : SANDEEP MANJREKAR 
    VERSION         : 1.0 
    CREATED DATE    : 03-JUNE-2014 
    LAST MODIFIED   : 10-JUNE-2014 
 
##########################################################################> 
 
 
# PARAM 
[CmdletBinding()] 
Param( 
  [Parameter(Mandatory=$True,Position=1)] 
   [string]$filePath 
) 
 
# IMPORT LIST INTO VARIABLE 
$IDs = Import-Csv $filePath 
 
# DELETE ANY EXISTING OUTPUT FILES 
If (!(Test-Path .\LargeItemReport.csv) -eq $false) {Remove-Item .\LargeItemReport.csv} 
If (!(Test-Path .\FailedRecords.txt) -eq $false) {Remove-Item .\FailedRecords.txt} 
 
# FOR-EACH PROCESS STARTS 
$IDs | ForEach -Begin {Clear-Host;$i=0} ` 
-Process { 
    $i=$i+1 
  
# PROGRESS BAR        
    Write-Progress ` 
    -Activity ("Scanning " + $IDs.Count + " Mailboxes for Large Items. Currently Scanning...") ` 
    -Status ($i.ToString() + "> " + $_.EmailAddress) ` 
    -PercentComplete ($i/$IDs.Count*100) 
 
# IF CONDITION FOR ERROR HANDLING 
    If (!(Get-Recipient $_.Emailaddress -ErrorAction SilentlyContinue)) { 
        $outFile = $_.EmailAddress + " - no such recipient found" 
        $outFile | Tee-Object -FilePath .\FailedRecords.txt -Append 
    }     
    ElseIf ((Get-Recipient $_.Emailaddress).RecipientType -ne 'UserMailbox') { 
        $outFile = $_.EmailAddress + " - " + (Get-Recipient $_.Emailaddress).RecipientType 
        $outFile | Tee-Object -FilePath .\FailedRecords.txt -Append 
    }     
    Else { 
 
# RUN FOLDER STATISTICS AND FINDS TOPSUBJECTSIZE THAT HAS 'MB' IN IT AND CHECK IF IT IS LARGER THAN 35 MB 
        Get-MailboxFolderStatistics -Identity $_.EmailAddress -IncludeAnalysis -FolderScope All | ` 
        Where-Object {($_.TopSubjectSize -Match "MB"-and ([int](($_.TopSubjectSize).SubString(0,5)) -GE 150.00)}  | ` 

        Select-Object @{Name="Identity";Expression={($_.Identity.Split("\"))[0]}}, FolderPath, TopSubject, TopSubjectSize  | ` 
        Export-Csv -Path .\LargeItemReport.csv -NoTypeInformation -Append     
    }       
 } ` 
# OPEN BOTH FILES AFTER THE PROCESS IS COMPLETE 
 -End {.\LargeItemReport.csv;.\FailedrRecords.txt}