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.
Eine "Langform" finden Sie auf Externe Member, Gast, Kontakt
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
- OrganizationRelationsShip
Ich habe einfach beide Tenants mit einer bidirektionalen "OrgRelationship" über das Exchange Admin Center (https://admin.cloud.microsoft/exchange#/organizationsharing) gegenseitig konfiguriert. - Shared Channel RelationShip
Damit ich auch das Szenario mit Shared Channels testen kann, habe ich zwischen den Organisationen die "Cross-Tenant Access Settings - "B2B Direct Connect" (https://portal.azure.com/#view/Microsoft_AAD_IAM/CompanyRelationshipsMenuBlade/~/CrossTenantAccessSettings) eingerichtet. - Teams Federation war erlaubt
Beide Tenants hatten eine "offene Federation" und da ein Tenant nur eine "Trial_Version wa", habe ich die Kommunikation mit Test-Tenants ebenfalls zugelassen und einige Stunden gewartet, damit die Einstellungen wirken können.
Das war die Startvoraussetzung.
Testserie: Basisfunktion
Zuerst wollte ich wissen, was in der Grundeinstellung ganz ohne Gäste und Kontakte funktioniert:
Szenario | Bild |
---|---|
Outlook AdressbuchIch habe noch keine Kontakte oder Gäste angelegt. Entsprechend gibt es keine Treffer. |
![]() |
Free/BusyZuerst 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 FederationIch 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 ChannelHier 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äleDa 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.
- EOL MSOnline und AzureAD PowerShell
- Important update: Deprecation of Azure AD PowerShell and MSOnline PowerShell
modules
https://techcommunity.microsoft.com/blog/identity/important-update-deprecation-of-azure-ad-powershell-and-msonline-powershell-modu/4094536 - Find Azure AD PowerShell and MSOnline cmdlets in Microsoft Graph PowerShell
https://learn.microsoft.com/en-us/powershell/microsoftgraph/azuread-msoline-cmdlet-map
Microsoft verweist nun auf die Graph-PowerShell. Allerdings gibt es hier eine Besonderheit mit Update-MGUser.
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.
- Manage guest users with Microsoft Entra
PowerShell
https://learn.microsoft.com/en-us/powershell/entra-powershell/manage-guest-users?view=entra-powershell
Nutzung in Outlook und Teams
Die nun angelegten GastUser und Mailkontakte habe ich wieder in Outlook und Teams gesucht.
Szenario | Bild |
---|---|
Outlook AdressbuchNach dem beide Empfänger "sichtbar" gemacht wurden, konnte ich auch beide im Adressbuch finden. |
![]() |
Free/BusyBei 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 FederationNachdem 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. |
|
Teams Shared ChannelNicht 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äleIch 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
- Externe Member, Gast, Kontakt
- Gast-Identität
- T2T Free/Busy
- ADSync GALSync
- Cloud ProxyAddresses
- EOL MSOnline und AzureAD PowerShell
- ShowinAddressbook und HiddenFromAddressListsEnabled
- Manage guest users with Microsoft Entra PowerShell
https://learn.microsoft.com/en-us/powershell/entra-powershell/manage-guest-users?view=entra-powershell - Mehrmandantenfähige Organisationsfähigkeiten in Microsoft Entra ID
https://learn.microsoft.com/de-de/entra/identity/multi-tenant-organizations/overview - Was ist mandantenübergreifende Synchronisierung?
https://learn.microsoft.com/de-de/entra/identity/multi-tenant-organizations/cross-tenant-synchronization-overview - Collaborate across M365 tenants with Entra ID multi-tenant organization
https://techcommunity.microsoft.com/blog/identity/collaborate-across-m365-tenants-with-entra-id-multi-tenant-organization/4120309 - Proxy address conflict when syncing contacts into Azure AD then attempting
to create guest users
https://techcommunity.microsoft.com/discussions/microsoft-365/proxy-address-conflict-when-syncing-contacts-into-azure-ad-then-attempting-to-cr/3290619 - Guest Account conflicts with Exchange Online
https://neroblanco.co.uk/2020/05/guest-account-conflicts-with-exchange-online/ - Migrating Exchange Online Mail Contacts to Entra ID Guest Accounts
https://practical365.com/migrate-mail-contact-azure-ad-guest-accounts/ - Five Ways to Enhance Collaboration Between Tenants
https://practical365.com/five-ways-to-enhance-collaboration-between-tenants/ - Comparing Azure AD Guest Accounts and Exchange Online Mail Contacts
https://office365itpros.com/2023/03/02/mail-contacts-vs-guest-accounts/ - Resolving conflicts between Guest accounts and mail users in Azure AD
https://cloudrun.co.uk/azure-ad/resolving-conflicts-between-guest-accounts-and-mail-users-in-azure-ad/ - Setup Calendar Sharing between Office 365 tenants
https://cloudinfra.net/how-to-setup-calendar-sharing-between-office-365-tenants/#2-calendar-free-busy-info-is-available-from-the-first-tenant-but-not-from-the-second-tenant