ShowinAddressbook und HiddenFromAddressListsEnabled
Bei der Arbeit an der Seite Gast-Konto oder Kontakt? habe ich auch mit der Sichtbarkeit von Einträgen im Exchange Online Adressbuch zu tun gehabt. Auf der Seite habe ich beschrieben, wie ich Gastkonten oder Kontakte in Verbindung mit Microsoft Teams und Exchange Online nutzen kann.
showinaddresbook_hiddenfromaddreslslist.mp3
Default-Einstellungen
Ich kann auf mehrere Wege ein Objekt in Exchange Online als Empfänger anlegen und im Adressbuch sichtbar machen. Fast alle Objekte erscheinen automatische im Adressbuch. Aber es gibt Ausnahmen.
Achten Sie auf den Unterschied: In Entra ID heißt das Feld "ShowinAddressbook" während Exchange das Feld HiddenFromAddressListsEnabled gerade negiert ist.
Objekt | EntraID
ShowinAddressbook (Get-EntraIDUser) |
Exchange Online
HiddenFromAddressListsEnabled (Get-Recipient) |
---|---|---|
Benutzer mit Postfach (MailboxUser) |
$null (=$true) |
|
Benutzer mit Mailadresse (MaiUser) |
$null (=$true) |
False |
Kontakt mit Mailadresse (MailContact) |
<nicht vorhanden> |
|
Gastbenutzer mit Mailadresse (GuestMailUser) |
$null (=$false) |
$False |
DiscoveryMailbox |
<Objekt nicht sichtbar> |
True |
MailUniversalSecurityGroup |
<Property nicht vorhanden> |
False |
MailUniversalDistributionGroup |
<Property nicht vorhanden> |
False |
In EntraID gibt es das Feld "ShowinAddressbook" nicht bei Kontakten. Bei den anderen Objekten ist es meistens leer, was bei den regulären Konten ein "True" bedeutet, aber bei Gastbenutzern das Gegenteil. Bei Gruppen gibt es noch ein extra Feld "HideFromOutlookClients". Hier als Referenz die PowerShell-Befehle, die ich zur Auswertung in meinem Tenant genutzt habe:
# In EntraID müssen wir jeden Elementtyp individuell abfragen # Anzeige der User get-entrauser | ft showInAddressList,mail,mailnickname,userType # Anzeige der Kontakte Get-EntraContact | ft showInAddressList,mail,mailnickname,userprincipalname
# In Exchange ist es einfacher, alle Elemente auf einmal aufzulisten Get-Recipient | ft displayname,RecipientTypeDetails,HiddenFromAddressListsEnabled
Update und interner Sync
Nun kann es natürlich passieren, dass Sie bestimmte Objekte ausblenden wollen, während sie z.B. Gäste doch lieber einblenden lassen wollen. Damit stellt sich die Frage, welche PowerShell, Befehle und welches Backend genutzt wird.
Objekt | EntraID | Exchange Online |
---|---|---|
Benutzer mit Postfach (MailboxUser) |
Set-EntraUser -ShowInAddressList |
Set-Mailbox -HiddenFromAddressListsEnabled |
Benutzer mit Mailadresse (MaiUser) |
Set-EntraUser -ShowInAddressList |
Set-MailUser -HiddenFromAddressListsEnabled |
Kontakt mit Mailadresse (MailContact) |
<nicht vorhanden> Es gibt kein "Set-EntraContact |
Set-MailContact -HiddenFromAddressListsEnabled |
Gastbenutzer mit Mailadresse (GuestMailUser) |
Set-EntraUser -ShowInAddressList |
Set-MailUser -HiddenFromAddressListsEnabled |
DiscoveryMailbox |
<Objekt nicht sichtbar> |
nicht relevant |
MailUniversalSecurityGroup |
Set-EntraIGroup hat keinen Parameter für HideFromAddressLists oder HideFromOutlookClients |
Set-DistributionGroup -HiddenFromAddressListsEnabled |
MailUniversalDistributionGroup |
Set-EntraIGroup hat keinen Parameter für HideFromAddressLists oder HideFromOutlookClients |
Set-DistributionGroup -HiddenFromAddressListsEnabled |
Damit stellt sich natürlich die Frage, was in der Cloud wie repliziert wird und welcher Eintrag maßgeblich ist.
Entra ID Provisioning Service
Die Gast-Benutzer und Kontakte sind genau genommen in zwei Verzeichnisdiensten abgelegt. Für den Abgleich der Identitäten ist der Entra ID Provisioning Service zuständig, der auch von ADSync genutzt wird.
Ausgangssituation: Alle sind "Sichtbar
Als Ausgangssituation hatte ich vier Objekte, die alle "sichtbar" waren. Das hat sowohl die Exchange PowerShell geliefert.
Und auch die Entra ID PowerShell liefert zumindest für die Benutzer die Einstellung. Kontakte haben das Feld nicht.
Änderung: Exchange Online: MSXFAQDEVU1 Gast und Kontakt "unsichtbar"
Dann habe ich einmal die Objekte "MSXFAQDEVU1" über die Exchange Online PowerShell unsichtbar gemacht
Änderung: Entra ID: MSXFAQDEVU2 GastUser "unsichtbar"
In Entra ID kann ich nur den GastBenutzer "MSXFAQDEVU2" über die Entra ID-PowerShell verstecken. Ein "Set-EntraContact" gibt es leider nicht.
Kontrolle in Exchange Online
Nach wenigen Sekunden habe ich die Änderung aus Entra ID auch in Exchange gesehen. Der Gast-Benutzer "MSXFAQDEVU2" ist auch in Exchange "verborgen" worden.
Kontrolle in Entra ID
In die Gegenrichtung wurden aber Änderungen aus Exchange Online nicht ins Entra ID übertragen:
Der Gast-Benutzer "MSXFAQDEVU1" ist laut EntraID weiterhin sichtbar. Das Verhalten hat sich auch nach einige Stunden nicht geändert.
Zwischenstand
Damit halten wir fest:
- Änderungen an EntraID-GastUsern werden zu Exchange Online repliziert
- Änderungen an EntraID Kontakten sind mangels PowerShell nicht möglich
- Änderungen an Exchange Online-Kontakten bleiben in Exchange Online erhalten aber sind in Entra ID nicht auslesbar
- Änderungen an Exchange Online-Gast-Benutzern bleiben in Exchange Online erhalten aber werden nicht zu Entra ID übertragen
Gerade da letzte Verhalten ist unschön, weil damit eine Inkonsistenz der Informationen besteht. Es ist weiterhin irritierend, warum ich in Exchange Online Felder bei Gast-Benutzern setzen kann, die durch Entra ID wieder überschrieben werden.
Overwrite ?
Natürlich wollte ich wissen, wann meine Änderung am Exchange Online User MSXFAQDEVU1 durch ein Update in EntraID überschrieben wird. Ich habe daher das Objekt in EntraID, welches immer noch auf "ShowInAddressBook=$True" steht noch einmal gesetzt:
In der Exchange Online PowerShell hat sich aber nichts geändert. Das Objekt blieb weiterhin auf "HiddenFromAddressListsEnabled=$true"
Erst als ich das Feld am Objekte zweimal geändert habe, hat dies eine Replikation zurück zu Exchange Online angestoßen.
Exchange Admin Center
Wenn ich die "Kontakte" im Exchange Admin Center unter https://admin.cloud.microsoft/exchange#/contacts nutze, dann sehe ich sowohl die echten Kontakte als auch die Gast-Benutzer, welche für Exchange ebenfalls wie Kontakte aussehen. Interessant ist, dass ich beim Gast im Februar 2025 zwar die Warnung bekommen habe, dass das Management im Azure-Portal erfolgen sollte aber ich kann hier doch die Sichtbarkeit in der GAL als auch die Mailtipps verwalten:
Da wollte ich natürlich wissen wo hin das Exchange Admin Center eine Änderung schreibt. Ich habe also den Eintrag von "No" auf "Yes" gestellt. Das Exchange Admin Center hat keine Fehlermeldung geliefert, sondern die Änderung mit einem grünen Balken bestätigt.
Im nächsten Dialog stand dann sogar ein "Yes"
Allerdings nur bis zum nächsten Reload und auch eine Kontrolle mit der Entra ID-PowerShell als auch Exchange Online PowerShell hat ergeben, dass hier nichts geschrieben wurde. Da sich das alles im Browser abspielt, konnte ich mit dem Chromium Debugger auch die Funktion dahinter sehen:
Das Frontend sendet einen Aufruf an eine REST-API mit dem Parameter "{"HiddenFromAddressListsEnabled":true}" und das Backend liefert einen 200 OK aber in der Antwort schon den Fehler, dass er die Payload nicht parsen kann. Als wenn die Funktion nicht erlaubt wäre, was sie aber genaugenommen auch nicht ist. Nur sollte der Fehler dann anders lauten und warum bietet das Exchange Admin Center dann die Option überhaupt an?
Diese Funktion ist aktuell also "gestört"
Externer Verzeichnisabgleich
Bislang habe ich alle Einstellungen mit "Cloud Only"-Konten durchgeführt. Das ist aber nur ein Teil, denn es gibt ja weitere Prozesse, die solche Einstellungen beeinflussen:
-
AzureADConnect
Speziell im Hybrid-Mode werden damit Benutzer, Verteiler aber auch Kontakte von einem lokalen Active Directory ins Entra ID und letztlich auch ins Exchange Online Verzeichnis repliziert. Allerdings können ADSync/Entra ID Connect/Entra ID Cloud Sync keine Gastbenutzer steuern. Insofern sind hier nur Kontakte relevant. Da diese dann aber das Flag "DirSync" haben, können Sie diese Objekte nicht mit der Exchange Online PowerShell oder Entra ID PowerShell verarbeiten. Sie bekommen den klassischen "Dual-Write Error" -
Cross-Tenant Sync
Der zweite Service stammt ebenfalls von Microsoft und kann Identitäten zwischen Tenants abgleichen. So können Sie Benutzer eines Tenant im anderen Tenant als Gast oder Member anlegen lassen und auch hier das "ShowInAddressbook" steuern. Für diese Objekte habe ich schon gezeigt, dass Änderungen an Gast-Benutzern in Entra ID auch zu Exchange Online übertragen werden. Allerdings sollte der Exchange Administrator die Einstellungen nie in Exchange Online ändern. - Weitere Dienste
Über Graph API, EXO PowerShell Automation, School Data Sync (SDS) und 3rd-Party Programmen können sie natürlich auch Objekte in Entra ID und Exchange Online verändern. Beachten Sie dabei dann die aktuellen Abhängigkeiten.
Hier kann ich nur dazu raten, die eigenen Prozesse genau zu prüfen. Es kann auch sein, dass Microsoft auch etwas nach meiner Analyse ändert.
Zwischenstand
Nach meinen Analysen im Februar 2025 gibt es eine Lücke im Provisioning, bei der die Einstellung zur Sichtbarkeit im Adressbuch zwischen Entra ID und Exchange Online nicht zwingend synchron sind. Diesbezügliche Änderungen an einem Entra ID Gastkonto werden mit etwas Verzögerung zu Exchange Online übertragen aber Änderungen in Exchange Online landen nicht mehr in Entra ID sind damit nicht sicher korrekt. Kontakte hingegen können über die Entra ID PowerShell weder angezeigt noch geändert werden, so das Änderung in Exchange Online erfolgen müssen.
Für Microsoft Teams sind die Einstellungen in EntraID maßgeblich und zeigt nur die Gäste an. Dabei ist es egal, ob diese mit "ShowInAddressBooks" auf true oder false stehen. Gäste werden angezeigt. Exchange Clients orientieren sich hingegen am Exchange Adressbuch.
Weitere Links
- Graph API
- EXO PowerShell Automation
- School Data Sync (SDS)
- AzureADConnect
- Cross-Tenant Sync
- Gast-Konto oder Kontakt?
- How to Hide Teams-Enabled Groups from
Exchange Online
https://office365itpros.com/2021/07/08/hide-teams-from-exchange/