Freitag, 19. Dezember 2025

Exchange Hybrid Free Busy Error: The remote server returned an error: (403) Forbidden - on-premise to cloud

Neue Ursache für Hybrid Free Busy Problem seit ungefähr November/Dezember 2025. Probleme bestehen on-prem --> Cloud mit 403: forbidden. Gegenrichtung (Cloud zu on-prem) funktioniert.

 

Fehlerbild:


Test-OAuthConnectivity -Service EWS -TargetUri https://outlook.office365.com/ews/exchange.asmx -Mailbox testuser@domain.com -verbose | fl

RunspaceId  : 1205301b-xc51-451c-a806-a8340a0ced72
Task        : Checking EWS API Call Under Oauth
Detail      : The configuration was last successfully loaded at 26/11/2025 09:00:24 UTC. This was 7 minutes ago.
              The token cache is being cleared because "use cached token" was set to false.
              Exchange Outbound Oauth Log:
...
System.Net.WebException: The remote server returned an error: (403) Forbidden.
 

Ursache: Das SettingOverride der neuen Dedicated Hybrid App fehlt. Hinzufügen mit:

 New-SettingOverride -Name "EnableExchangeHybrid3PAppFeature" -Component "Global" -Section "ExchangeOnpremAsThirdPartyAppId" -Parameters @("Enabled=true") -Reason "Enable dedicated Exchange hybrid app feature"

 

Get-ExchangeDiagnosticInfo -Process Microsoft.Exchange.Directory.TopologyService -Component VariantConfiguration -Argument Refresh

 

Löst das Problem innerhalb von 15min.

Mittwoch, 3. September 2025

'ExternalEmailAddress' ist für 'MailUser' verbindlich - 'ExternalEmailAddress' is mandatory on MailUser

 Problem: Bei einer Exchange Infrastruktur funktionieren in der PowerShell keine Abfragen für "Get-Mailbox" mehr. Damit auch keine Befehle oder Aktionen, die auf "get-mailbox" aufsetzen, wie z.B. die Installation eines neuen CU (siehe Log unten).

 

 Ursache: Das bemängelte "ExternalEmailAddress" war nicht die Ursache des Problems. Lösung war, ein fehlendes "HomeServer"-Attribut auf einer Mailbox zu ergänzen. Herausgefunden mittels "SetupAssist.ps1" Skript von hier: https://microsoft.github.io/CSS-Exchange/Setup/SetupAssist/

 

Fehler:
Der folgende Fehler wurde generiert, als "$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];
          }

          # 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;

          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."
          }
          }
        " ausgeführt wurde: "Microsoft.Exchange.Data.DataValidationException: 'ExternalEmailAddress' ist für 'MailUser' verbindlich.
   bei Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCacheableItem`1.TryRunADOperation(ADOperation operation, Boolean throwExceptions)
   bei Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCacheableItem`1.Initialize(OrganizationId organizationId, CacheNotificationHandler cacheNotificationHandler, Object state)
   bei Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCache`1.InitializeAndAddPerTenantSettings(OrganizationId orgId, Boolean allowExceptions, TSettings& perTenantSettings, Object state)
   bei Microsoft.Exchange.Data.Directory.SystemConfiguration.TenantConfigurationCache`1.TryGetValue(OrganizationId orgId, Boolean allowExceptions, TSettings& perTenantSettings, Boolean& hasExpired, Object state)
   bei Microsoft.Exchange.Management.RecipientTasks.GetMailbox.ConvertDataObjectToPresentationObject(IConfigurable dataObject)
   bei Microsoft.Exchange.Configuration.Tasks.GetRecipientObjectTask`2.WriteResult(IConfigurable dataObject)
   bei Microsoft.Exchange.Configuration.Tasks.GetTaskBase`1.WriteResult[T](IEnumerable`1 dataObjects)
   bei Microsoft.Exchange.Configuration.Tasks.GetTaskBase`1.InternalProcessRecord()
   bei Microsoft.Exchange.Configuration.Tasks.GetObjectWithIdentityTaskBase`2.InternalProcessRecord()
   bei Microsoft.Exchange.Configuration.Tasks.GetRecipientObjectTask`2.InternalProcessRecord()
   bei Microsoft.Exchange.Management.RecipientTasks.GetRecipientWithAddressListBase`2.InternalProcessRecord()
   bei Microsoft.Exchange.Configuration.Tasks.Task.<ProcessRecord>b__91_1()
   bei Microsoft.Exchange.Configuration.Tasks.Task.InvokeRetryableFunc(String funcName, Action func, Boolean terminatePipelineIfFailed)". 

Mittwoch, 8. Juni 2022

0x800c8219 Fehler in Outlook wenn Outlook Anywhere auf Mailboxebene ausgeschaltet ist

Einige Postfächer konnten sich nicht mehr mit dem Exchangeserver verbinden - allerdings funktionierte OWA problemlos. Die Lösung war eigentlich naheliegend, der Fehlercode "0x800c8219" in Outlook aber nichtssagend.

Mittels...

CASMailbox -MAPIBlockOutlookRpcHttp:$True

....war auf den betroffenen Postfächern OA ausgeschaltet. Ein Einschalten löste das Problem:

 CASMailbox -MAPIBlockOutlookRpcHttp:$False

Donnerstag, 16. Juli 2020

Free/Busy Fehler bei Wechsel in neuen Tenant

Bei einem Kunde mit Exchange Hybrid (Exchange 2010 & 2016 mit Exchange Online) funktionierte die Anzeige der Frei/Gebuchtzeiten in beide Richtungen nicht. Auch die gesammelten Lösungen von Microsoft (https://techcommunity.microsoft.com/legacyfs/online/media/2019/01/FB_Errors.FixesV6.pdf
, eigentlich sehr hilftreich) konnten in diesem Fall nicht helfen.
Durch Test-OAuthConnectivity, Test-MigrationEndpoin & der Entwickler Konsole in IE (F12) mit OWA kamen wir auf folgende Meldung:

Autodiscover failed for email address ONPREMUSER@domain.com with error System.Net.WebException: The request failed with HTTP status 401: Unauthorized.
….
diagnostics: 2000009;reason=”The issuer of the token is unknown. Issuer was ‘00000001-0000-0000-c000-000000000000@xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’.”;error_category=”invalid_issuer”

 
Die Tenant GUID (xxxxxxx) stimmte mit der des produktiven Tenants überein. Ein "Get-AuthServer | fl" zeigte jedoch, dass on-premise noch die GUID des alten Tenants hinterlegt war. Lösung war es, den alten "ACS" AuthServer zu entfernen, und einen neuen anzulegen:

Remove-AuthServer "ACS"
New-AuthServer -Name "WindowsAzureACS" -AuthMetadataUrl https://accounts.accesscontrol.windows.net/theirdomain.com/metadata/json/1

Mittwoch, 13. Mai 2020

Send-As für Verteilergruppe in Hybridumgebung

First, grant SendAs via Exchange Admin Center, then open EXO PowerShell for the following command: Add-RecipientPermission -Identity <EmailAddress> -Trustee <UserEmailaddress> -AccessRights SendAs

Donnerstag, 30. Januar 2020

CSVDE Computer Details Export

 Bei Windows Server 2003 und älter gibt es noch keine PowerShell. Wenn man in solch alten Umgebungen Daten automatisiert exportieren muss, braucht man Tools wie CSVDE. Um z.B. Computerdetails zu exportieren (get-ADComputer), folgenden Befehl in eine CMD eingeben: CSVDE -f allComputer.csv -r (objectclass=Computer)

Montag, 11. November 2019

Exchange Hybrid nachträglich aufbauen nach Cutover Migration

Azenario: Exchange Migration lief per Cutover-Migration, Exchange wurde aus lokalem AD deinstalliert (mit allen Konsequenzen, wie verlorenen Attributen etc...).
Nachträglich wurde wieder ein Exchange Server installiert. Nun sind Mailboxes nur in der Cloud vorhanden, der lokale Exchange "weis" nichts über die O365 Postfächer.

Nachträglich kann man die Umgebungen wieder wie folgt verheiraten:
  1. Zuerst Mail User in Exchange erstellen 
  2. Set-ADUser -Identity <User>-Replace @{msExchRecipientDisplayType = "-2147483642"}
  3. Set-ADUser -Identity <User>-replace @{msExchRecipientTypeDetails = "2147483648"}
  4. Set-ADUser -Identity <User>-Replace @{msExchRemoteRecipientType = "100"}
Wobei 100 bei 4. der Wert für eine shared Mailbox ist. Normale Postfächer sind "1", Ressource Mailboxes "33".