In order to phase out our aging Exchange 2013 system, we're opting to go for an Exchange 2019 installation. The goal is to install Exchange 2019 on-prem, next to the Exchange 2013 machine, and gradually move the local mailboxes and roles over (SMTP, communication with Exchange Online and so forth), with the endgoal of removing the Exchange 2013 machine. Exchange 2013 is currently set up in a hybrid environment where the bulk of the storage and mailing is handled by Exchange Online. However there are some mailboxes and functionality that we need on-premise to justify a server being kept.
We created a new VM, and issued the installation of the Exchange 2019 setup after fulfilling all the pre-requisites. During the setup however (specifically step 9, Mailbox role), the installation errors out and we're just presented with an 'Exit' button to close the installation. On the next run of the installation, the incomplete installation is detected, and automatically resumed, again erroring out at the same step.
While the error is elaborate (included for completion sake below), it boils down to two notices (which we found have little to nothing on when searching the internet, tho other similar errors have popped up here and there):
"Microsoft.Exchange.Management.Tasks.RecipientTaskException: Enable-Mailbox on this mail user is disallowed because the mailbox has been migrated.
"System.Management.Automation.ParameterBindingValidationException: Cannot bind argument to parameter 'Identity' because it is null.
The first seems to hail (according to the Exchange logs) from one of the SystemMailbox accounts, which we verified on the ECP of the old 2013 server to have been migrated to the Office365 environment. I surmise the second is (for now) a result of the first.
The Exchange 2019 server is at present showing up in the on prem organization of mailservers, tho the installation has (as stated) not yet run to completion.
We're unsure how to proceed.
A possible migration of the SystemMailbox from Office365 to on-prem, would be the most obvious answer, but this doesn't seem possible to do from the GUI. Might still be possible using Powershell tho, but unsure how to exactly go about that. Also, the SystemMailbox was not manually migrated by us, so we're also unsure what might break if we start moving that thing. Also note that we're unsure if that will even fix the issue with the install.
Other than that we might try to uninstall Exchange (where I'm assuming it would remove the server from the on-prem Exchange environment, and just completely clean up it's installation. Which we may follow-up with a reinstallation from scratch. But prior to possibly causing issues with the environment we're holding off on that in waiting for possible further insights from the community.
I'm hoping someone in the community may have some insight in what is going on here, and how we can resolve the issue at hand.
Below the full error presented:
Error:
The following error was generated when "$error.Clear();
if (!$RoleIsDatacenter -and !$RoleIsDatacenterDedicated)
{
$mailboxId = "SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}";
$displayName = "E4E Encryption Store - Active";
$existingArbitrationMailboxes = @(Get-Mailbox -Arbitration -Filter {Name -eq $mailboxId} -IgnoreDefaultScope -ResultSize 1);
if ($existingArbitrationMailboxes.Length -eq 0)
{
$mailboxDatabase = @(get-MailboxDatabase -Server:$RoleFqdnOrName -DomainController $RoleDomainController);
if ($mailboxDatabase.Length -ne 0)
{
$mailboxUsers = @(Get-User -Filter {LastName -eq $mailboxId} -IgnoreDefaultScope -ResultSize 1);
if ($mailboxUsers.Length -ne 0)
{
$orgMailbox = Enable-Mailbox -Arbitration -Identity $mailboxUsers[0] -Database $mailboxDatabase[0].Identity;
Set-Mailbox -Arbitration `
-Identity $orgMailbox `
-RequireSenderAuthenticationEnabled $false `
-UseDatabaseQuotaDefaults $false `
-SCLDeleteEnabled $false `
-SCLJunkEnabled $false `
-SCLQuarantineEnabled $false `
-SCLRejectEnabled $false `
-HiddenFromAddressListsEnabled $true `
-DisplayName $displayName `
-Force;
}
}
}
}
" was run: "Microsoft.Exchange.Management.Tasks.RecipientTaskException: Enable-Mailbox on this mail user is disallowed because the mailbox has been migrated.
at Microsoft.Exchange.Configuration.Tasks.Task.ThrowError(Exception exception, ErrorCategory errorCategory, Object target, String helpUrl)
at Microsoft.Exchange.Management.RecipientTasks.EnableMailbox.PrepareRecipientObject(ADUser& user)
at Microsoft.Exchange.Management.RecipientTasks.EnableRecipientObjectTask`2.PrepareDataObject()
at Microsoft.Exchange.Configuration.Tasks.SetTaskBase`1.InternalValidate()
at Microsoft.Exchange.Configuration.Tasks.RecipientObjectActionTask`2.InternalValidate()
at Microsoft.Exchange.Management.RecipientTasks.EnableMailbox.InternalValidate()
at Microsoft.Exchange.Configuration.Tasks.Task.<ProcessRecord>b__91_1()
at Microsoft.Exchange.Configuration.Tasks.Task.InvokeRetryableFunc(String funcName, Action func, Boolean terminatePipelineIfFailed)".
Error:
The following error was generated when "$error.Clear();
if (!$RoleIsDatacenter -and !$RoleIsDatacenterDedicated)
{
$mailboxId = "SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}";
$displayName = "E4E Encryption Store - Active";
$existingArbitrationMailboxes = @(Get-Mailbox -Arbitration -Filter {Name -eq $mailboxId} -IgnoreDefaultScope -ResultSize 1);
if ($existingArbitrationMailboxes.Length -eq 0)
{
$mailboxDatabase = @(get-MailboxDatabase -Server:$RoleFqdnOrName -DomainController $RoleDomainController);
if ($mailboxDatabase.Length -ne 0)
{
$mailboxUsers = @(Get-User -Filter {LastName -eq $mailboxId} -IgnoreDefaultScope -ResultSize 1);
if ($mailboxUsers.Length -ne 0)
{
$orgMailbox = Enable-Mailbox -Arbitration -Identity $mailboxUsers[0] -Database $mailboxDatabase[0].Identity;
Set-Mailbox -Arbitration `
-Identity $orgMailbox `
-RequireSenderAuthenticationEnabled $false `
-UseDatabaseQuotaDefaults $false `
-SCLDeleteEnabled $false `
-SCLJunkEnabled $false `
-SCLQuarantineEnabled $false `
-SCLRejectEnabled $false `
-HiddenFromAddressListsEnabled $true `
-DisplayName $displayName `
-Force;
}
}
}
}
" was run: "System.Management.Automation.ParameterBindingValidationException: Cannot bind argument to parameter 'Identity' because it is null.
at System.Management.Automation.ParameterBinderBase.ValidateNullOrEmptyArgument(CommandParameterInternal parameter, CompiledCommandParameter parameterMetadata, Type argumentType, Object parameterValue, Boolean recurseIntoCollections)
at System.Management.Automation.ParameterBinderBase.BindParameter(CommandParameterInternal parameter, CompiledCommandParameter parameterMetadata, ParameterBindingFlags flags)
at System.Management.Automation.CmdletParameterBinderController.BindParameter(CommandParameterInternal argument, MergedCompiledCommandParameter parameter, ParameterBindingFlags flags)
at System.Management.Automation.CmdletParameterBinderController.BindParameter(UInt32 parameterSets, CommandParameterInternal argument, MergedCompiledCommandParameter parameter, ParameterBindingFlags flags)
at System.Management.Automation.CmdletParameterBinderController.BindParameters(UInt32 parameterSets, Collection`1 arguments)
at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParametersNoValidation(Collection`1 arguments)
at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParameters(Collection`1 arguments)
at System.Management.Automation.CommandProcessor.BindCommandLineParameters()
at System.Management.Automation.CommandProcessor.Prepare(IDictionary psDefaultParameterValues)
at System.Management.Automation.CommandProcessorBase.DoPrepare(IDictionary psDefaultParameterValues)
at System.Management.Automation.Internal.PipelineProcessor.Start(Boolean incomingStream)
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input)
at System.Management.Automation.PipelineOps.InvokePipeline(Object input, Boolean ignoreInput, CommandParameterInternal[][] pipeElements, CommandBaseAst[] pipeElementAsts, CommandRedirection[][] commandRedirections, FunctionContext funcContext)
at System.Management.Automation.Interpreter.ActionCallInstruction`6.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)".