The detailed error message provide below in the error message:
Error: The following error was generated when "$error.Clear(); if ($RoleIsDatacenter -ne $true -and $RoleIsDatacenterDedicated -ne $true) { if (Test-ExchangeServersWriteAccess -DomainController $RoleDomainController -ErrorAction SilentlyContinue) { $sysMbx = $null; $name = "SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}"; $dispName = "Microsoft Exchange"; Write-ExchangeSetupLog -Info ("Retrieving mailboxes with Name=$name."); $mbxs = @(Get-Mailbox -Arbitration -Filter {name -eq $name} -IgnoreDefaultScope -ResultSize 1 ); if ($mbxs.Length -eq 0) { Write-ExchangeSetupLog -Info ("Retrieving mailbox databases on Server=$RoleFqdnOrName."); $dbs = @(Get-MailboxDatabase -Server:$RoleFqdnOrName -DomainController $RoleDomainController); if ($dbs.Length -ne 0) { Write-ExchangeSetupLog -Info ("Retrieving users with Name=$name."); $arbUsers = @(Get-User -Filter {name -eq $name} -IgnoreDefaultScope -ResultSize 1); if ($arbUsers.Length -ne 0) { Write-ExchangeSetupLog -Info ("Enabling mailbox $name."); $sysMbx = Enable-Mailbox -Arbitration -Identity $arbUsers[0] -DisplayName $dispName -database $dbs[0].Identity; } } } else { if ($mbxs[0].DisplayName -ne $dispName ) { Write-ExchangeSetupLog -Info ("Setting DisplayName=$dispName."); Set-Mailbox -Arbitration -Identity $mbxs[0] -DisplayName $dispName -Force; } $sysMbx = $mbxs[0]; } &nbsp; # Set the Organization Capabilities needed for this mailbox if ($sysMbx -ne $null) { # We need 1 GB for uploading large OAB files to the organization mailbox Write-ExchangeSetupLog -Info ("Setting mailbox properties."); set-mailbox -Arbitration -identity $sysMbx -UMGrammar:$true -OABGen:$true -GMGen:$true -ClientExtensions:$true -MailRouting:$true -MessageTracking:$true -PstProvider:$true -MaxSendSize 1GB -Force; &nbsp; Write-ExchangeSetupLog -Info ("Configuring offline address book(s) for this mailbox"); Get-OfflineAddressBook | where {$_.ExchangeVersion.CompareTo([Microsoft.Exchange.Data.ExchangeObjectVersion]::Exchange2012) -ge 0 -and $_.GeneratingMailbox -eq $null} | Set-OfflineAddressBook -GeneratingMailbox $sysMbx.Identity; } else { Write-ExchangeSetupLog -Info ("Cannot find arbitration mailbox with name=$name."); } } else { Write-ExchangeSetupLog -Info "Skipping creating E15 System Mailbox because of insufficient permission." } } " was run: "Microsoft.Exchange.Data.DataValidationException: Database is mandatory on UserMailbox. at Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCacheableItem`1.TryRunADOperation(ADOperation operation, Boolean throwExceptions) at Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCacheableItem`1.Initialize(OrganizationId organizationId, CacheNotificationHandler cacheNotificationHandler, Object state) at Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCache`1.InitializeAndAddPerTenantSettings(OrganizationId orgId, Boolean allowExceptions, TSettings& perTenantSettings, Object state) at Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCache`1.TryGetValue(OrganizationId orgId, Boolean allowExceptions, TSettings& perTenantSettings, Boolean& hasExpired, Object state) at Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCache`1.GetValue(OrganizationId orgId) at Microsoft.Exchange.Management.RecipientTasks.GetMailbox.ConvertDataObjectToPresentationObject(IConfigurable dataObject) at Microsoft.Exchange.Configuration.Tasks.GetRecipientObjectTask`2.WriteResult(IConfigurable dataObject) at Microsoft.Exchange.Configuration.Tasks.GetTaskBase`1.WriteResult[T](IEnumerable`1 dataObjects) at Microsoft.Exchange.Configuration.Tasks.GetTaskBase`1.InternalProcessRecord() at Microsoft.Exchange.Configuration.Tasks.GetObjectWithIdentityTaskBase`2.InternalProcessRecord() at Microsoft.Exchange.Configuration.Tasks.GetRecipientObjectTask`2.InternalProcessRecord() at Microsoft.Exchange.Management.RecipientTasks.GetRecipientWithAddressListBase`2.InternalProcessRecord() at Microsoft.Exchange.Configuration.Tasks.Task.<ProcessRecord>b__b() at Microsoft.Exchange.Configuration.Tasks.Task.InvokeRetryableFunc(String funcName, Action func, Boolean terminatePipelineIfFailed)".
The error message is pretty vague with a lot of information that, while relevant, seems a bit convoluted. However, if we check the bottom of the error message text, we see this cryptic error message:
Well. It sort of explains the errors. However, which user is causing the errors? Maybe there is some addition information in the rest of the error message. What you will notice is that the beginning of the error is a lot of PowerShell code…. When examined, I see one clue that may relate to the error message about a user missing a Database:
A bit lower down, we see that the system mailbox, stored above in a variable called ‘$Name’ is used in a Get-Mailbox cmdlet:
It appears that we have a possible issue with one of the System Mailboxes. Maybe one of the attributes is corrupt or missing. We did some investigation of the mailbox attributes of this particular mailbox. First, we ran a ‘Get-Mailbox -Arbitration’ to check out the system mailboxes. However, we received this error:
Nice. Now we have a broken cmdlet on top of the broken upgrade attempt … or is it related to the System Mailbox? Usually when a SystemMailbox is broken, or has corrupt/missing attributes we can reset the accounts with the Setup /PrepareAD cmdlet. The procedure is outlined here:
https://technet.microsoft.com/en-us/library/gg588318%28v=exchg.150%29.aspx
Unfortunately for us, this did not seem to work. Quite mystifying actually. The client and I tried a few more steps, but ran out of time that day to figure out the issue. The next day, the client opened a case with Microsoft and spent the better part of the day trying to resolve the problem. These calls normally end with some sort of resolution, but Microsoft was unable to find the fault.
Solution
As it turned out, there was an object in Active Directory that was causing a problem. It was found using PowerShell to explore all attributed that were stored on mail enabled objects in Active Directory. It was not the HomeMDB value, which is what I would have expected from the error message that was originally generated. Instead, the offending values was ‘msExchHomeServerName’. No. Really? Yes. How was this value found? From Windows PowerShell, on a Domain Controller, I ran this cmdlet:
get-aduser -filter * -properties * | ft name,msExchHomeServerName,homemdb
However, finding the actual attribute was not that simple, only because we were initially misled by the HomeMDB attribute. Either way. We found the offending mailbox, added the ‘msExchHomeServerName’ value (copied from another mailbox) and then waiting for Active Directory replication. Once that was complete, the upgrade completed with no more complaints.
Below is an example of what we saw:
As a side note, this error with the Get-Mailbox cmdlet can be reproduced. If you can remove the ‘msExchHomeServerName’ value from one mailbox, Get-Mailbox no longer works… So don’t do that!
THANK YOU!!!