Gast-Konto oder Kontakt?

Wenn zwei Tenants enger zusammenarbeiten wollen, stellt sich schnell die Frage, wie Anwender des jeweils anderen Tenants im Outlook Adressbuch erscheinen und Frei/Belegt abgefragt werden können und natürlich auch in Teams und Shared Channels mitarbeiten können. Und schon sind wir in der Welt der Gäste, MailContacts und all ihre Feinheiten, Unstimmigkeiten und Problemen.

gastkonto_oder_kontakt.mp3

Fragestellung

Wie so oft war es eine Anfrage eines Kunden, wie er in einer Firma die Zusammenarbeit verbessern kann, wenn es zwei Microsoft 365 Tenants gibt. Das ist gar nicht mal so ungewöhnlich und auch nicht immer eine XXL-Konzern. Sehr oft hat ein Geschäftsführer mehrere Firmen. Interessanterweise habe ich allein zwei Firmen kennengelernt, die sowohl in der IT unterwegs sind als auch in der Logistikbranche mit Lebensmitten handeln. Es ist immer gut, mehrere Standbeine zu haben. Manchmal reicht aber auch einfach eine Spinoff, welches gleich mit einem eigenen Tenant angefangen hat, um bei einem späteren Verkauf keine Exit-Migration durchführen zu müssen. Die Gründe können vielfältig sein und will ich nicht weiter vertiefen.

Natürlich kam dann die Frage, wie man das denn nun machen, denn man möchte ja schon.

  • Die Empfänger der jeweils anderen Seite im Exchange Adressbuch sehen
    Also brauchen wir irgendwas wie einen GalSync, d.h. meine Postfächer sind deine Kontakte oder etwas ähnliches
  • Die Frei/Belegt-Zeiten angezeigt bekommen
    Das geht mit dem entsprechenden "OrganizationRelationship" zwischen den Exchange Organisationen
  • Teams Federation
    Natürlich möchten die Anwender auch zwischen den Tenants per Federation Chatten, Sprechen (VoIP-Telefonieren) und Meetings abhalten. Das ist eigentlich gar kein Problem
  • Zusammenarbeite in Teams
    Dazu braucht es aktuell natürlich Gastkonten, wenn ich in einem anderen Tenant in einem Team zusammenarbeiten will.
    Gäste sind für "Shared Channels" nicht möglich

Damit laufen wir aber in einige Unstimmigkeiten, z.B. dass In einem Tenant eine Mailadresse immer nur einmal vergeben werden kann, was bei Gästen und Kontakten zu Problemen führt. Wer mit ADSync ein lokales AD repliziert und vielleicht noch Exchange Hybrid nutzt, sollte keine Empfänger in der Cloud ohne lokale Objekte anlegen. Also starten wir:

Verzeichnisdienste

Alle Objekte, die Exchange, Teams und andere Produkte referenzieren, liegen in Verzeichnisdiensten, von denen es mehrere gibt. Die Herausforderung bei diesen Koexistenz-Umgebungen sind die verschiedenen Objekte in der Cloud Wir haben mindestens drei , eher vier Verzeichnisdienste

  • Das lokale AD
    Dort sind Anmeldekonten, die zusätzlich Exchange Mailbox, RemoteMailbox oder MailUser sein können
    Und es gibt Kontakte, die zusätzlich Exchange Kontakt sein können.
    Das hat alles nichts mit der Cloud zu tun
  • Entra ID/AzureAD
    Das ist das Gegenstück in der Cloud, wo verschiedene Objekte manuell oder durch einen Verzeichnisabgleich (ADSync) angelegt werden können
    Hier gibt es dann Cloud-User, Cloud-Kontakte, DirSync-User, DirSync-Kontakte, Cloud-Gäste (die gibt es im lokale AD nicht)
  • Exchange Online Verzeichnis
    Diesen Verzeichnisdienst „sehen“ Administratoren eigentlich nicht du wird durch das Entra ID gesteuert.
    Aber er hat weitere Felder, die nicht im Entra ID auftauchten, z.B. die Einstellungen zu OP3/IMAP4/OWA/ActiveSync etc.
    Outlook und OWA nutzen dieses Verzeichnis.
  • Microsoft Teams hat wohl ebenfalls ein Verzeichnis. Das Vorgängerprodukt (Skype for Business) hatte auf jeden Fall eines
    und Vermutlich gibt es noch ein „Business Voice Directory“ (BVD) für die Verwaltung von Rufnummern
  • Auch SharePoint u.a. haben eigene Verzeichnisdienste.

Vielleicht wird so etwas klarer, warum manchmal Änderungen auch mal einige Stunden dauern oder veraltet sind. Dazu kommen natürlich noch Caching-Mechanismen, z.B. das Offline Addressbuch, die Replikation über verschiedene Datacenter etc.

Was wäre wenn?

Ihre Herausforderung ist nun, dass wir zwei Tenants haben und eigentlich etwas „abgleichen“. Und da gibt es viele Optionen. Um das Bild nicht zu komplex werden zu lassen, betrachten wir nur eine Richtung, d.h. Benutzer im Tenant1 möchten mehr Informationen von Anwendern im Tenant2

  • Sie könnten die User der Firma 2 als Kontakte im AD der Firma 1 an
    Das wäre der richtige Weg, wenn wir Exchange OnPremises haben, da nur so die lokalen Exchange Server diese Empfänger kennen würden. Dann wäre auch ADSync der Prozess, der die Kontakte ins Azure AD und damit zu Exchange Online repliziert.
    Und alles wäre perfekt? Leider nicht, denn wenn es einen Exchange Kontakt über den Weg gibt, dann kann es keinen Gast mehr geben da die Mailadresse identisch ist und das Entra ID verhindert. Wir können also keine Benutzer aus Tenant2 als Gäste in Teams einladen.
  • Dann anders: Wir legen legt die User von Firma2 als Gäste in Firma1 an.
    Dann können Sie auch in Teams zusammenarbeiten. Sie sind aber erst einmal nicht in Exchange Online sichtbar. Aber das lässt sich ändern. Ist da nu besser? Nicht wirklich, denn Gäste in der Cloud gibt es nie im lokalen AD und können auch nicht in Verteiler addiert werden, die aus dem lokalen AD kommen. Ärgerlich ist aber das Verhalten in Microsoft Teams. Ein Chat an den Gast geht nicht über Federation zur andere Firma, sondern an den Gast im gleichen Tenant. Der Anwender im Tenant2 bekommt die Nachricht nicht sofort, sondern einige Zeit später eine Mail, dass er etwas "verpasst" hat. Der Anwender im Tenant 2 muss mit seinem Teams einen "Tenant Wechsel" machen. Das geht seit Teams 2.1 deutlich schneller und einfacher aber ist nicht elegant.

Aus „Datenschutzüberlegungen“ ist das dennoch für Firma 1 ideal, da der Benutzer aus Firma 2 sich dann als Gast in ihrem Tenant bewegen muss. Aber darunter leidet die Usability.

Viele übersehen aber noch eine andere Problematik: Wenn sie nicht aufpassen, können zwei Gäste unterschiedlicher Firmen in ihrem Tenant miteinander chatten, was den beiden anderen Tenant-Admins nichts gefallen wird. Ich kann das "Live" bei Microsoft erleben, wo ich als Net at Work-Konto aus Compliance-Gründen nicht mit einem anderen Tenant chatten kann. Ich kann aber als "Gast bei Microsoft" sehr wohl mit der Person chatten, die ebenfalls ein Gast-Konto bei Microsoft hat und wir im gleichen Team sind. Gäste sind normalerweise auch nicht in der GAL sichtbar, was man aber pro Gast anpassen kann. Aber eben nicht als Default.

Lösung? Keine: Das Problem ist schon lange aktuell und es wird schon länger darüber diskutiert, wie das zu lösen sei. Es geistern Begriffe wie „Unified Identity“ herum, d.h. dass man keine Gäste mehr braucht. Das ist ja beim „Shared Channel“ schon der Fall, d.h. Benutzer von Firma2 können in einem Kanal bei Firma1 mitarbeiten, ohne dass Sie ein Gastkonto brauchen. Dann „stört“ auch kein Kontakt. oder vielleicht wird der Teams Client zukünftig auch alle Chats und Anrufe an Gastkonten direkt ohne "Wechsel" anzeigen. wir wissen es nicht.

Das hilft ihnen als Firma aber nicht weiter und daher stelle ich einfach die beiden Optionen vor, so dass Sie selbst entscheiden können, welche Variante die benötigten Vorteile bei tolerierbaren Einschränkungen bringt. Insofern sehe ich aktuell ein „Entweder oder“ und kein "Sowohl als auch".

Option 1: Kontakte

Fangen wir damit an, dass die Benutzer des anderen Tenants als "Mailcontacts" angelegt werden. Das muss bei Exchange Hybrid im lokalen AD erfolgen, so dass ADSync diese Objekte in den eigenen Tenant repliziert. Ohne lokales Exchange können Sie die Kontakte in Exchange Online anlegen. Die Kontakte werden zwar im AzureAD angelegt, aber im Azure Portal oder Microsoft 365 Admin Portal werden Kontakte komplett ignoriert.

  • Sie werden in Exchange Online oder Exchange OnPremise (mit ADSync) angelegt
  • Man sieht sie im Adressbuch
  • Man kann sie auch in Exchange Verteiler aufnehmen
  • Free/Busy ist möglich
  • Sie können aber danach keine Gäste mit der gleichen Mailadresse anlegen.
  • Teams Collaboration geht nur mit Shared Channels, keine volle Team-Zusammenarbeit
  • Teams Chat geht über Federation

Option2: Gastkonten

Sie laden also alle Personen als Gast in ihren Tenant ein. Das ist natürlich unschön aber Microsoft hat mit "Cross Tenant Sync" eine fertige Lösung, die sie nur einrichten müssen.

  • Gäste sind aber nur in Entra AD vorhanden
  • Man kann sie nur ein „Cloud Only“ -Verteiler aufnehmen
  • Exchange Hybrid mit ADSync ist stark eingeschränkt oder man pflegt lokale AD-Kontakte, die nicht in die Cloud synchronisiert werden
  • Volle Teams Zusammenarbeit ist möglich
  • Chat geht aber dann vom User zum GastUser, wenn man nicht aufpasst
  • Gäste können Sie auch sichtbar machen
  • Free/Busy könnte dann auch gehen (mit Einschränkungen)

Testserie: Vorarbeiten

Leider sind die Aussagen dazu auch auf verschiedenen Webseiten und bei Microsoft alles andere als einheitlich. Das mag auch daran liegen, dass Microsoft in der Cloud auch immer mal wieder Funktionen verändert. Also habe ich meine beiden Tenants "MSXFAQLAB" und "MSXFADEV" genutzt, um das Szenario nachzustellen.

  • MSXFAQLAB
    Das ist mein "Tenant 1", in dem ich arbeite und die Benutzer aus Tenant 2 als Gast einlade bzw. als MailKontakt anlege.
    Hier habe ich einen Testuser "frank.carius2@uclabor.de" mit einer Office 365 E5 Lizenz
  • MSXFAQDEV
    Das ist mein "Tenant2" mit den Benutzern MSXFAQDEVU1@msxfaq.net und MSXFAQDEVU2@msxfaq.net, die ebenfalls mit einer Microsoft 365 E5 Developer Lizenz versehen wareh

Das war die Startvoraussetzung.

Testserie: Basisfunktion

Zuerst wollte ich wissen, was in der Grundeinstellung ganz ohne Gäste und Kontakte funktioniert:

Szenario Bild

Outlook Adressbuch

Ich habe noch keine Kontakte oder Gäste angelegt. Entsprechend gibt es keine Treffer.

Free/Busy

Zuerst habe ich von meinem MSXFAQLAB-User die beiden Anwender in MSXFAQDEV und eine ungültige Adresse eingeladen. Auch wenn die Benutzer in MSXFAQDEV zu der Zeit keine Termin zur Anzeige hatten, sieht man sehr wohl, dass sie "Frei" sind während der ungültige Empfänger eben grau ist.

Teams Federation

Ich kann den UPN der MSXFAQDEV-User eingeben aber Teams zeigt natürlich keinen "Match" an. Ich kann aber "extern suchen" und damit eine Federation starten, wenn Federation erlaubt ist. Das Bild zeigt nur einen User aber die Federation-Suche macht keine Teilstring-Suche. Ich muss den UPN komplett eingeben. Wenn ich den zweiten Namen eingebe, finde ich den anderen Benutzer. Soweit auch nichts Ungewöhnliches.

Teams Shared Channel

Hier prüfe ich, ob ich den Benutzer des anderen Tenants in einen Shared Channel einladen kann. Das funktioniert problemlos, da ich vorab ja "B2B Direct Connect" aktiviert habe. Aber auch hier gibt es keine richtig "suche", sondern ich muss schon den UPN komplett eingeben und auch hier kann ich beide Personen im anderen Tenant nutzen.

 

Teams Team und Kanäle

Da es noch keinen Gast gibt, kann ich keinen der Anwender in einem Microsoft Team verwenden. Das ist auch erwartet. Aber Teams findet den Benutzer dennoch über eine Suche und bietet mir an, dass ich ihn als Gast anlege.

Das funktioniert so natürlich nur, wenn der Administrator diese Funktion nicht abgeschaltet hat.

Ich beschreibe auf Checkliste Tenant Einrichtung, wie diese Funktion abgeschaltet werden kann, damit Anwender nicht selbst Gäste einladen, sondern Sie als Firma vielleicht einen entsprechenden Beantragungsworkflow umsetzen.

Testserie: Gast und Kontakt

Nun wurde es Zeit die Objekte einmal richtig anzulegen.

  • Einladung von MSXFAQDEVU1@msxfaq.net als "Gast"
    Die Einladung musste ich nicht mehr aussprechen, denn schon im vorherigen Schritt habe ich den Benutzer als Gast addiert.
  • Anlegen von MSXFAQDEVU2@msxfaq.net als "Kontakt"
    Das zweite Konto soll ein MailContact werden. Diesen habe ich im Exchange Admin Center von MSXFAQLAB angelegt.

Im Exchange Admin Center sehe ich beide Objekte unter Kontakte (https://admin.cloud.microsoft/exchange#/contacts)

Im Microsoft Admin Center (https://admin.microsoft.com/Adminportal/Home/#/Contact) sind die Kontakte ebenfalls da.

Das Azure Portal unter "https://portal.azure.com" zeigt aber nur "User" und damit auch den "GastUser" an. Eine MailKontakte sind in dem Portal nicht zu sehen. Per Microsoft Graph und die Microsoft.Entra-PowerShell aber sehr wohl. Auch im Microsoft 365 Admin-Center können Sie die Gäste und Kontakte sehen.

Denken Sie aber daran, dass die Exchange Ansicht aus dem Exchange Online Verzeichnis kommt während das Microsoft 365 Admin Portal sich die Daten aus dem AzureAD bezieht.

Sichtbarkeit

Wenn ich einen Gast anlege, dann wird dieser auch automatisch zu einem "GuestMailUser"

Sie sehen, dass die Mailadresse der Einladung in mehreren Feldern erscheint und das Objekt erst einmal "versteckt" ist.

Dass Gäste per Default versteckt sind, ist eine gute Einstellung, denn in vielen Tenants können Anwender auch externe Personen in Teams einladen und legen damit im Hintergrund all diese Personen als Gäste an. Das wäre sicher keine gute Idee, wenn diese dann im Exchange Adressbuch (GAL) auflösbar und sich zwischen die internen Empfänger mischen.

Wenn Sie aber eine befreundete Firma einbinden wollen, dann kann es ja gerade gewünscht sein, dass die Gäste auch im Exchange Adressbuch sichtbar sein sollen.

Ich habe noch keine eingebaute Funktion gefunden, den Default zu ändern. Sie können natürlich per Skript und Automatisierung den Wert anpassen. Für verbundene Firmen und Tenants kann aber auch die Funktion Cross-Tenant Sync entsprechende angepasst werden.

Dort kann der exportierende Tenant im Attribute Mapping das Feld "showInAddressList" entweder aus der Quelle übernehmen oder mit einer Konstante belegen.

Ohne Cross-Tenant Sync wäre die manuelle Änderungen im Exchange Admin Center oder Microsoft 365 Admin Center eine Option:

Lassen Sie sich im Exchange Admin Center nicht von der Warnung verunsichern. Der Link zu "Manage hide from GAL" ist aktiv und ich kann die Einstellung sogar ändern und ohne Fehler speichern.

Selbst nach einem Refresh wurde die Änderung aber nicht sofort angezeigt. Nach einiger Zeit war sie aber dann doch sichtbar. Hier sollten Sie also immer etwas Geduld mitbringen.

Ich vermute, dass der Schreibzugriff ins Entra ID erfolgt aber dann erst wieder zum Exchange Verzeichnis zurückrepliziert werden muss.

Ich habe aber das Objekt im Azure Portal kontrolliert und weder im Auditlog noch im Provisoininglog eine Änderung oder Fehlermeldung gesehen. Maßgeblich ist aber das Entra ID. Ich wollte dann mit der AzureAD-PowerShell und "Get/Set-AzureADUser" mir folgendem Befehl bearbeiten.

# Dieser Befehl funktioniert NICHT mehr, seit dem die AzureAD PowerShell abgekündigt ist.
Set-AzureADUser -ObjectId <GUID> -ShowInAddressList:$True

Allerdings hat Microsoft die AzureAD PowerShell schon lange zusammen mit der MSOnline-PowerShell abgekündigt und mittlerweile ist sie nicht mehr nutzbar.

Microsoft verweist nun auf die Graph-PowerShell. Allerdings gibt es hier eine Besonderheit mit Update-MGUser.


Update-MGUser https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users/update-mguser?view=graph-powershell-1.0#-showinaddresslist

Damit ist dieser Weg verbaut und das folgende Skript funktioniert nicht.

# Achtung: Skript funktionierte im Jan 2025 noch nicht.
# Verbinden mit dem Tenant
Connect-MgGraph -TenantId msxfaqlab.onmicrosoft.com

# Ich brauche die UserID und suche daher mit einem Filter
$u1 = Get-MgUser -Filter "startsWith(DisplayName, 'msxfaqdevu1')"

# Aktualisieren der Einstellungen
Update-MgUser -userId $u1.Id -ShowInAddressList

# Anzeige der Einstellung
(Get-MgUser -userId $u1.Id).ShowInAddressList

Aber ebenfalls im Januar 2025 wurde als Nachfolger der AzureAD-PowerShell die "Microsoft.Entra"-PowerShell freigegeben, und damit habe ich die Werte auslesen und ändern können.

Install-Module -Name Microsoft.Entra -Repository PSGallery -Scope CurrentUser 
-Force -AllowClobber
Connect-Entra -TenantId msxfaqlab.onmicrosoft.com
$u1=Get-EntraUser -Filter "startswith(displayname,'msxfaqdevu1')"
Set-EntraUser -UserId $u1.id -ShowInAddressList $true
Get-EntraUser -Filter "startswith(displayname,'msxfaqdevu1')" | fl *addr*

Für Gäste und Kontakte müssen sie unterschiedliche Commandlets nutzen.

Interessant finde ich hier, dass  bei einem Kontakt kein Feld "showInAddressList" vorhanden ist. Zu Entra Contact gibt es auch nur ein GET und REMOVE  aber kein Set/New/Update

Hier wir schon deutlich, dass Kontakte eigentlich in Exchange verwaltet und dann zum Entra ID zurückgeschrieben werden. Den Status können Sie natürlich auch in der Exchange Online PowerShell einsehen

# Anzeige der Recipients in der Exchange Online PowerShell
Get-Recipient msxfaqdev* | fl 
displayname,emailaddresses,HiddenFromAddressListsEnabled,recipient*

Ich kann per Exchange Online PowerShell sogar die Eigenschaften im Exchange Verzeichnis verändern.

Set-MailUser    msxfaqdevu1 -HiddenFromAddressListsEnabled:$true
Set-MailContact msxfaqdevu2 -HiddenFromAddressListsEnabled:$true

Ich kann in Entra ID aber das Attribut bei Kontakten lesen aber nicht schreiben, das geht nur in der Exchange Online PowerShell

Achtung:
Ich betrachte hier nur "CloudOnly" MailContacts die nicht durch ADSync o.ä. gesperrt sind. Gäste werden durch ADSync nicht blockiert.

Nutzung in Outlook und Teams

Die nun angelegten GastUser und Mailkontakte habe ich wieder in Outlook und Teams gesucht.

Szenario Bild

Outlook Adressbuch

Nach dem beide Empfänger "sichtbar" gemacht wurden, konnte ich auch beide im Adressbuch finden.

Free/Busy

Bei der Anzeige der Frei/Belegt-Zeiten hab ich keine Veränderung erwartet. Interessant war aber, ob ich nun den Gast-Benutzer und den MailContact auch suchen kann.

 

 

Teams Federation

Nachdem es nun den Gast und den Kontakt gibt, habe ich die Personen im Teams Client gesucht, um einen Federation-Chat zu starten. Ich habe hier nur das Gastkonto aber nicht den Kontakt gefunden.

Wenn ich aber den kompletten UPN eingebe, dann biete mir Teams auch eine "Extern Suche" an. Das wäre dann der Weg, wie ich als Benutzer entscheiden kann, welche Identität ich erreichen möchte.

Diese Unterscheidung muss natürlich geschult werden. 

Diese Konstellation ist für Anwender ansonsten unschön, denn Sie kommunizieren sehr einfach mit dem "Gast", der davon erst verspätet oder gar nichts mitbekommt, bis er wieder in das entsprechende Team wechselt.

  • Suche nach Teilstring. Zeigt nur Gastkonto an
  • Sucht nach UPN, Zeit Gastkonto an und bietet auch externe Suche an.
  • Externe Suche liefert dann Federated Account.

Teams Shared Channel

Nicht in Shared Channel zu finden

Hier kommen also weder der Exchange Kontakt noch das Gastkonto zum Zuge

 

Wenn ich aber den UPN komplett eingebe, dann sind beide Benutzer des anderen Tenants addierbar.

Teams Team und Kanäle

Ich kann in einem Kanal natürlich über "@" auch die Gäste des Kanals direkt finden und erwähnen. Allerding zeigt mir Microsoft Teams hier nicht den Kontakt an. Das habe ich aber auch so erwartet.

 
 

Dubletten erzeugen

Dann habe ich versucht, die beiden Objekte zu doppeln.

Szenario Szenario Beschreibung
GastUser vorhanden
Kontakt anlegen

Fail

Wenn ich schon einen Gastbenutzer habe, dann ist die Mailadresse geblockt. Ich kann dann zumindest über das Admin Center keinen Kontakt anlegen.

Kontakt vorhanden
GastUser anlegen

Geht

Wenn es bisher einen Kontakt gibt, dann kann ich dennoch einen Gast in ein Team einladen, Hier kann ich aber den Gast als neues Objekt in einem Team anlegen und addieren.

Ich habe mit dann die Eigenschaften per Entra ID und Exchange Online PowerShell angeschaut:

Get-Recipient -Filter "Displayname -like 'msxfaqdev*'" `
| fl DisplayName,RecipientTypeDetails,ExternalEmailAddress,othermail,UserPrincipalName,emailaddresses

DisplayName          : MSXFAQDEVU1
RecipientTypeDetails : GuestMailUser
ExternalEmailAddress : SMTP:msxfaqdevu1@msxfaq.net
EmailAddresses       : {SMTP:msxfaqdevu1@msxfaq.net}

DisplayName          : msxfaqdevu2
RecipientTypeDetails : GuestMailUser
ExternalEmailAddress : SMTP:msxfaqdevu2@msxfaq.net
EmailAddresses       : {}

DisplayName          : MSXFAQDEVU2@msxfaq.net
RecipientTypeDetails : MailContact
ExternalEmailAddress : SMTP:MSXFAQDEVU2@msxfaq.net
EmailAddresses       : {SMTP:MSXFAQDEVU2@msxfaq.net}

Ergänzend habe ich noch die Default mit Get-MailContact und Get-MailUser ausgegeben, da Get-Recipient nicht alle Felder liefert.

PS C:\> get-mailuser -Filter "Displayname -like 'msxfaqdev*'" | fl DisplayName,RecipientTypeDetails,ExternalEmailAddress,othermail,UserPrincipalName,emailaddresses

DisplayName : MSXFAQDEVU1
RecipientTypeDetails : GuestMailUser
ExternalEmailAddress : SMTP:msxfaqdevu1@msxfaq.net
OtherMail : msxfaqdevu1@msxfaq.net
UserPrincipalName : msxfaqdevu1_msxfaq.net#EXT#@msxfaqlab.onmicrosoft.com
EmailAddresses : {SMTP:msxfaqdevu1@msxfaq.net}

DisplayName : msxfaqdevu2
RecipientTypeDetails : GuestMailUser
ExternalEmailAddress : SMTP:msxfaqdevu2@msxfaq.net
OtherMail : msxfaqdevu2@msxfaq.net
UserPrincipalName : msxfaqdevu2_msxfaq.net#EXT#@msxfaqlab.onmicrosoft.com
EmailAddresses : {}

PS C:\> get-mailcontact -Filter "Displayname -like 'msxfaqdev*'" | fl DisplayName,RecipientTypeDetails,ExternalEmailAddress,othermail,UserPrincipalName,emailaddresses

DisplayName : MSXFAQDEVU2@msxfaq.net
RecipientTypeDetails : MailContact
ExternalEmailAddress : SMTP:MSXFAQDEVU2@msxfaq.net
EmailAddresses : {SMTP:MSXFAQDEVU2@msxfaq.net}

Interessant ist hier das Feld "EmailAddresses", welches vielen Exchange Administratoren wohl eher als "ProxyAddresses" bekannt ist.

  • Der GastBenutzer "MSXFAQDEVU1" belegt die EMail Adresse als "ExternalEmailAddress" als auch "EmailAddresses". (ProxyAddresses).
  • Der Kontakt "MSXFAQDEVU2" belegt ebenfalls die EMail-Adresse als "ExternalEmailAddress" als auch "EmailAddresses". (ProxyAddresses).
  • Der Gast "MSXFAQDEVU2" hingegen hat keine EmailAddresses, d.h. die ProxyAddressen wurden hier nicht gefüllt

Entra ID/AzureAD stellt wohl sicher, dass die Einträge im Feld "ProxyAdresses" innerhalb eines Tenants eindeutig sind. Damit stellt sich mir die Frage, ob ich bei dem bestehenden GuestMailUser "MSXFAQDEVU1" vielleicht das Feld "MailAddresses" einfach löschen könnte um dann noch einen zweiten Kontakt anzulegen. Das musste ich natürlich ausprobieren:

PS C:\> set-mailuser msxfaqdevu1 -EmailAddresses $null
PS C:\> get-mailuser -Filter "Displayname -like 'msxfaqdevu1'" | fl DisplayName,RecipientTypeDetails,ExternalEmailAddress,othermail,UserPrincipalName,emailaddresses

DisplayName          : MSXFAQDEVU1
RecipientTypeDetails : GuestMailUser
ExternalEmailAddress : SMTP:msxfaqdevu1@msxfaq.net
OtherMail            : msxfaqdevu1@msxfaq.net
UserPrincipalName    : msxfaqdevu1_msxfaq.net#EXT#@msxfaqlab.onmicrosoft.com
EmailAddresses       : {}

Das hat tatsächlich geklappt.

Als Endergebnis haben wir nun zwei Objekte, die sowohl als Kontakt als auch als GastUser im gleichen Entra ID und Exchange Online vorliegen.

Get-Recipient -Filter "Displayname -like 'msxfaqdev*'" `
| fl DisplayName,RecipientTypeDetails,ExternalEmailAddress,othermail,UserPrincipalName,emailaddresses

DisplayName : MSXFAQDEVU1
RecipientTypeDetails : GuestMailUser
ExternalEmailAddress : SMTP:msxfaqdevu1@msxfaq.net
EmailAddresses : {}

DisplayName : MSXFAQDEVU1
RecipientTypeDetails : MailContact
ExternalEmailAddress : SMTP:MSXFAQDEVU1@msxfaq.net
EmailAddresses : {SMTP:MSXFAQDEVU1@msxfaq.net}

DisplayName : msxfaqdevu2
RecipientTypeDetails : GuestMailUser
ExternalEmailAddress : SMTP:msxfaqdevu2@msxfaq.net
EmailAddresses : {}

DisplayName : MSXFAQDEVU2@msxfaq.net
RecipientTypeDetails : MailContact
ExternalEmailAddress : SMTP:MSXFAQDEVU2@msxfaq.net
EmailAddresses : {SMTP:MSXFAQDEVU2@msxfaq.net}

Ob das nun sinnvoll ist, lasse ich Sie gerne selbst bestimmen.

Sichtbarkeit in Entra AD und Exchange Online

Siehe dazu die Seite  ShowinAddressbook und HiddenFromAddressListsEnabled

Lernkurze

Sie wissen nun, dass sie Gäste im Adressbuch sichtbar machen können und daher keine Kontakte benötigen. Aber Kontakte haben immer noch ihre Vorteile. Sie sind im Grunde "sicherer", da es keine Anmeldekonten sind. Damit haben wir auch unsere Empfehlungen:

  • Sie brauchen ein Konto mit dem ein Benutzer aus einem anderen Tenant bei ihnen als Gast mitarbeiten soll...
    Dann sollten sie Gast-Konten manuell, per Cross-Tenant Sync oder einen entsprechenden Prozess anlegen.
  • Soll dieses Konto dann auch in Exchange Online für ihre Anwender auffindbar sein
    Dann machen Sie es im Adressbuch "sichtbar". Sie werden damit aber nicht in Teams auffindbar
  • Sie können Gast-Konten auch in CloudOnly-Verteilergruppen aufnehmen
    Das gilt aber nicht, wenn die Verteiler durch ADSync verwaltet werden, denn Gäste gibt es nicht im lokalen AD
  • Wenn Sie nur einen Eintrag im Outlook Adressbuch brauchen
    Dann ist ein Kontakt in Exchange Online vermutlich besser und sicherer
  • Kein Upgrade/Downgrade
    Ähnlich wie im lokalen AD können Sie auch in Entra ID aus einem "Gast" keinen "Kontakt" und umgekehrt machen. Sie müssen das vorhandene Objekt löschen und neu anlegen
  • Kontakte sind nicht in Teams auflösbar, Gäste sind keine Federation
    Hier müssen Sie ihre Anwender informieren, wenn sie per Chat einen Partner ansprechen möchten. Es ist ein himmelweiter unterschied, ob der den vorgeschlagenen Gast nutzt oder ihn durch Eingabe des UPN über Federation anspricht.

Leider gibt es hier schon die Lücke, dass in Teams nur Gäste aber keine Kontakte auffindbar sind (Stand Feb 2025) und die Anwender zwischen einem Chat mit einem Gast und Federation unterscheiden müssen.

Zusammenfassung

Gäste sind immer noch der bevorzugte Weg, wenn Sie Mitarbeiter aus einer anderen Firma in einem Team in ihrem Tenant mitarbeiten lassen wollen. Das Gastkonto blockiert auch nicht die Nutzung von Shared Channels über "B2B Connect" und auf die Ermittlung von Frei/Belegt-Zeiten haben die Einträge sowieso keinen direkten Einfluss. Sie können Kontakte aber auch Gäste im Exchange Online Adressbuch erscheinen lassen, so dass die Mitarbeiter ihre Kollegen der anderen Firma einfach finden können.

Die Anlage der der Gäste können Sie mit Cross-Tenant Sync sogar sehr effektiv anlegen. In der Standardeinstellung sind aber die angelegten Gäste nicht sichtbar. Das können Sie aber über das Attribute Mapping in Cross-Tenant-Sync anpassen.

Allerdings müssen die Mitarbeiter der anderen Firma mit dem "Gastzugriff" umgehen können und wenn Sie das gleichen Prinzip in Gegenrichtung nutzen, müssen sie auch ihre Mitarbeiter entsprechend unterweisen.

Wenn Sie Gäste und Kontakte aber auch noch in Exchange Verteiler aufnehmen wollen, dann sollten die Verteiler "CloudOnly" sein. Ansonsten müssten Sie die Verteiler im lokalen AD verwalten und dort gibt es keine Gäste. Das spräche dann wieder für MailContacts mit anderen Einschränkungen. Auf die besonderen Anforderungen von Exchange Hybrid bin ich auf der Seite gar nicht eingegangen

Sie sehen schon. Die Thematik ist alles andere als einfach und diese Seite kann nur eine Teilmenge davon aufgreifen. Sie sind aber herzlich eingeladen, das persönliche Gespräch mit meinem Kollegen und mir zu suchen.

Weitere Links