The administration of a hybrid deployment that connects on-premises Exchange Server with Exchange Online, enabling seamless integration and centralized control.
Hi @Mike Sulser
Thank you for sharing your concerns.
First, I’d like to clarify that this is a user‑to‑user support forum. Moderators participating here do not have access to backend systems, nor can we directly intervene in Microsoft product functionality. Our role is limited to providing technical guidance and sharing best‑practice recommendations based on reported issues, requests, and scenarios.
Based on your description, looks like the Exchange SE ECP page only works when the legacy Exchange 2016 server is powered on. When that server is offline, you encounter an HTTP 500 error. This behavior strongly indicates that the new Exchange SE server is still dependent on components hosted on your Exchange 2016 server.
You could start by validating arbitration mailboxes. Based on my research, in hybrid environments, Exchange management components (such as ECP) rely on system mailboxes and internal proxy routing. If these components (for example, arbitration mailboxes or organization mailbox) are still associated with the old Exchange 2016 server, the new server will not be able to process the request independently and will return a HTTP 500 error. You could also verify the organization mailbox, as ECP depends on it as well.
You can begin by running the following command:
Get-Mailbox -Arbitration | Format-Table Name, ServerName, Database -AutoSize
Check the ServerName column carefully. If any of the arbitration mailboxes are still showing EXCH2016, this can cause the issue you are experiencing.
If so, you can resolve this by moving the arbitration mailboxes to EXCHSE. First, ensure that you have a mailbox database on Exchange SE. If one does not already exist, create a small on‑premises mailbox database, as at least one database is required to host system mailboxes.
Once the database is available, move all arbitration mailboxes by running:
Get-Mailbox -Arbitration | New-MoveRequest -TargetDatabase "SystemDB" -BatchName "ArbitrationMove"
Monitor the move requests until all of them show Completed status:
Get-MoveRequest | Get-MoveRequestStatistics | Format-Table DisplayName, Status, PercentComplete, TargetDatabase -AutoSize
After the moves have completed, clean up the completed move requests:
Get-MoveRequest -Status Completed | Remove-MoveRequest
Next, restart the ECP application pool, or simply perform an IIS reset:
Restart-WebAppPool MSExchangeECPAppPool
After completing these steps, power off EXCH2016 and test again https://localhost/ecp (as well as the external ECP URL) directly on EXCHSE. ECP should load successfully without returning an HTTP 500 error.
I have also found some relevant articles that may be helpful for further reference. You can refer to them here:
HTTP server error status (500) when signing in to EAC - Exchange | Microsoft Learn
Unable to Login to ECP on First Exchange 2019 in Exchange 2013/2016 org – Learn Tech Future
How to Fix HTTP ERROR 500 in ECP/EAC after Login
Note: This information is provided as a convenience to you. These sites are not controlled by Microsoft, and Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. Please ensure that you fully understand the risks before using any suggestions from the above link.
Please let me know if this helps. If you have any additional concerns, feel free to comment below. I would be more than happy to assist.
Note: Please follow the steps in [our documentation] to enable e-mail notifications if you want to receive the related email notification for this thread.