I recently got to dive into an issue that I found pretty interesting. It involved a user going over the database quotas for Issue Warning and Prohibit Send but never receiving a notification about it. First, I searched their mailbox to see if they did receive the messages but maybe they were redirected to a subfolder or deleted (this was not the case). Next, I searched the message tracking logs to see if any messages were generated for them over the past week:

Get-MessageTrackingLog -Server <SERVER> -MessageSubject "Your Mailbox Is" -Recipients <USER>

Again, this turned up nothing as well. I then went to the server hosting the mailbox in question and looked for events in the Application logs to see if generated anything there. The events would look something like this:

MSExchangeIS Event ID: 1077

Again I found nothing matching the mailbox GUID in the event viewer. I found several other messages being generated that matched the user’s database GUID, so the database is sending out the notifications as expected. Searching the message tracking logs also showed other people receiving the quota messages.

As it turns out, there is an issue pre-CU8 for Exchange 2013 for mailboxes migrated from Exchange 2010. During the mailbox migration process, the Windows Language Code Identifier (LCID) is not transferred to Exchange 2013. This property sets the locale and language for the mailbox, and since this information is not available, the quota messages cannot be generated and submitted to the mailbox. Luckily this is documented in knowledge article 3036952 from Microsoft (https://support.microsoft.com/en-us/kb/3036952). The article also shows that the mailbox in question should generate the following Event Viewer log when it failed to generate the quota notification message:

The resolution for this issue is pretty easy and there are two options. One, simply run:

Set-MailboxRegionalConfiguration <users> -Language <language code>

to set the LCID property for the user. If the users already has a valid value set for their language, run the following command to reapply the existing LCID property:

Get-MailboxRegionalConfiguration <user> | Set-MailboxRegionalConfiguration

If you have a lot of mailboxes to run this against, you can gather all mailbox and pipe it to the set command:

Get-Mailbox | Set-MailboxRegionalConfiguration

Or do what I did and break down the mailboxes into groups and save them to a text file (for example, the mailbox email address), get the content of the file, and set the LCID property:

Get-Content .\MailboxQuotaRemediation.txt | Get-MailboxRegionalConfiguration | Set-MailboxRegionalConfiguration

In reviewing the KB article, the “More Information” section contains an interesting bit of information on how to check and to see if this is affecting your mailboxes. First, log into an Exchange mailbox server and open the Exchange Management Shell. Next, load up the additional Store Query commands by running the following command (note the period at the beginning and quotes around the path):

.'C:\Program Files\Microsoft\Exchange Server\V15\Scripts\ManagedStoreDiagnosticFunctions.ps1'

Run the following query to check an individual mailbox (you will need the mailbox’s GUID information):

Get-StoreQuery -Database <DATABASE> -Query "select * from Mailbox where MailboxGuid = '<MAILBOXGUID>'"

This will show the value for LCID. If it is 0, then this mailbox will not be able to receive the quota notification messages and will need to be remediated using the steps above. This information will also show when the mailbox should be getting the quota notification messages (for me, the time listed was in UTC):

Following the KB article, you can search all mailboxes to see which ones are affected by this. First, get all mailboxes hosted on Exchange 2013:

$2013Mailboxes = Get-Mailbox -ResultSize Unlimited | Where-Object {$_.ExchangeVersion.ExchangeBuild.Major -ge 15}

Next, run each mailbox through the Store Query above and save this to another variable:

$2013MailboxSQ = $2013 Mailboxes | ForEach-Object {Get-StoreQuery -Database $_.Database -Query "select * from Mailbox where MailboxGuid = '${$_.ExchangeGuid_'"}

Finally, search the mailbox store query information for mailboxes where the LCID value is equal to 0:

$2013MailboxSQ | Where-Object {$_.LCID -eq 0} | Format-List DisplayName, MailboxGuid, LCID

From here you can take this list and run the remediation against those mailboxes. This issue is fixed in CU8, so if you are about to migrate your Exchange 2010 mailboxes, upgrade to at least CU8 before continuing.

Leave a Reply