Office 365 Profilfoto Sync

Das ist sicher nicht die erste Seite zu Profilbildern von Anwendern in Office 365. Das Thema "verfolgt" mich immer wieder und ist auch darin begründet, dass einige Änderungen viel Zeit brauchen, bis diese beim Anwender sichtbar werden. Diese Seite ist die Dokumentation einer UserPhoto-Sync Session, um die Zusammenhänge besser zu verstehen.

Zusammenhang

Früher war das Profilbild im lokale AD (ADPhoto, Feld ThumbnailPhoto). In der Cloud ist das nicht mehr sinnvoll und daher Microsoft das Exchange Postfach als primären Speicherplatz auserkoren, was natürlich für Benutzer ohne Postfach (z.B. Microsoft 365 F1) wieder eine Sonderbehandlung erfordert. Allerdings kommen diese Bilder bei der Migration des Postfachs problemlos mit. Auch die lokalen AD-Fotos könnten ja mit ADSync in die Cloud repliziert werden. Das passiert sogar, aber nur einmalig. Microsoft hat selbst dazu mittlerweile einen Bog-Artikel geschrieben:

In dem Artikel stehen aber viele Details schon als Notizen drin.

A photo sync is attempted every time the user requests their own photo in SharePoint Online.
https://support.microsoft.com/en-us/office/information-about-profile-picture-synchronization-in-microsoft-365-20594d76-d054-4af4-a660-401133e3d48a

NOTE: When a user doesn't have an Exchange Online license, the Picture property will have an Upload picture button. The Picture Exchange Sync State is set to 0.
https://support.microsoft.com/en-us/office/information-about-profile-picture-synchronization-in-microsoft-365-20594d76-d054-4af4-a660-401133e3d48a

Delve: Users who are not configured for Exchange Online won't see their user photo displayed on the suite navigation bar. Instead, their default initials will be displayed. To have their user photo displayed on the suite navigation bar, users must be licensed for Exchange Online and with a photo uploaded to their Exchange mailbox.
https://support.microsoft.com/en-us/office/information-about-profile-picture-synchronization-in-microsoft-365-20594d76-d054-4af4-a660-401133e3d48a

Wie haben also mehrere Speicherorte für Bilder:

  • Lokales AD: ThumbnailPhoto
    Das hier abgelegt "LoRes"-Foto mit max. 100kbyte kann von älteren On-Premises-Applikationen genutzt werden. ADSync repliziert es auch ins AzureAD, wenn dort jemand das Bild abfragen würde
  • Exchange Postfach
    Höher auflösende Bilder landen im Exchange Postfach (On-Premises oder Cloud) und zumindest lokal kann Exchange ein vom Benutzer hochgeladenes Bild auch ins AD-Attribut schreiben. In der Cloud passiert dies nicht. Ein weiteres Zeichen, dass ThumbnailPhoto im AzureAD kaum noch einer braucht. Aber wenn in Exchange Online erstmalig kein Foto hinterlegt ist, dann wird das AzureAD-Konto einmalig zu Exchange Online übertragen. Knifflig wird es, wenn ein Anwender gar kein Exchange Postfach hat (z.B. Microsoft 365 F1 oder ohne Lizenz)
  • Sharepoint
    Auch hier gibt es schon lange eine eigenständige Benutzerdatenbank, die mit dem Verzeichnisdienst (AD oder AzureAD) repliziert wird. Sharepoint holt sich eigentlich die Bilder aus dem Exchange Postfach.

Leider ist das nur die Theorie, denn nicht alles funktioniert immer.

Bild als Benutzer setzen

Ohne lokales AD und mit einem Exchange Online Postfach ist es am einfachsten, wenn entweder der Benutzer selbst das Bild aktualisiert oder ein Administrator dies übernimmt. Wege dazu hat der Benutzer ja genug, die aber alle irgendwie zu Exchange Online verweisen.

Bilder haben idealerweise eine Auflösung von 648 x 648 Pixel und sind unter 500kByte groß.

Zugang Beschreibung

PersonalInfo-Portal

Einstieg über das "Personal Info"-Portal. https://portal.office.com/account/#personalinfo

Fragen Sie mich nicht, warum hier grade kein Bild zu sehen war.

Delve

Per Delve kann ich als Anwender unter der Url https://eur.delve.office.com  auch mein Konto ändern.

Anscheinend liest und schreibt Delve hier nach SharePoint

SharePoint Profil

Im SharePoint Portal
Der Link dort verweist auf https://fcarius-admin.sharepoint.com/_layouts/15/changephoto.aspx, der dann wieder zu OWA springt

Bild als Admin ändern

Als Administrator gibt es auch mehrere Optionen. Allerdings funktionieren auch hier nicht Optionen, wenn ADSync aktiv ist.

Zugang Beschreibung

AzureAD Portal

Als Administrator kann ich auf dem AzureAD-Portal (https://portal.azure.com) die Eigenschaften des Anwender sehen.

Admin per Exchange PowerShell

Als Administrator kann ich den Weg für die Anwender auch unterbinden. Dies geht, wie sollte es anders sein, über eine Exchange OWA Policy. Sie nutzen dazu eine bestehende OWAMailboxPolicy oder legen eine neue Richtlinie an, in der Sie den Parameter "-SetPhotoEnabled" entsprechend auf "$False" setzen.

Set-OWAMailboxPolicy `
   -Identity "DisableUserPhotoUpdate" `
   -SetPhotoEnabled $False
Set-CASMailbox `
   -Identity user1@msxfaq.de `
   -OwaMailboxPolicy DisableUserPhotoUpdate

Admin in SharePoint

Obwohl SharePoint Online das Bild aus Exchange synchronisieren sollte, kann der Administrator das Bild auch in SharePoint hochladen

Hier gibt es auch das Attribut "Picture Exchange Sync State", welches aber aktuell leer ist

Es gibt aber wohl auch einen schlechten Weg: Wenn Sie das "ThumbnailPhoto" im lokalen AD ändern und ADSync dieses ins Azure AD repliziert, dann landen "LowRes"-Bilder in Exchange und die Bilder werden auch nicht zu SharePoint repliziert.

NOTE: This method produces low-resolution profile pictures. The ThumbnailPhoto Active Directory attribute isn't synced to SharePoint from Azure Active Directory.
https://support.microsoft.com/en-us/office/information-about-profile-picture-synchronization-in-microsoft-365-20594d76-d054-4af4-a660-401133e3d48a

Vielleicht sollten wir aufhören das Feld im lokalen AD zu pflegen und sich allein auf die Cloud konzentrieren oder den Abgleich durch ADSync unterbinden.

Ausgangssituation

Ich habe für eine Testserie einen per ADSync aus dem lokalen AD ins AzureAD abgeglichen Benutzer verwendet, der aber kein Foto hat. Ich habe mich mehrerer PowerShells bedient:

  • AzureAD PowerShell 5.3.1
  • Exchange Online Powershell 2.0.3
  • PNP-PowerShell

Der Benutzer hatte den UPN und Mailadresse "fctest1@UCLABOR.DE" aber kein Foto.

# PowerShell Module laden und instanzieren
Install-Module -Name ExchangeOnlineManagement 
Import-Module AzureAD -useWindowsPowerShell
Connect-AzureAD

Install-Module -Name ExchangeOnlineManagement 
Import-Module ExchangeOnline
Connect-ExchangeOnline

#Installation der aktuellen Version
Install-Package System.IdentityModel.Tokens.Jwt   # ggfls als Admin
Install-Module PnP.PowerShell
Import-Module PnP.PowerShell
# beim ersten Mal pro tenant die App regisstrieren
Register-PnPManagementShellAccess
Connect-PnPOnline -Url "https://fcarius.sharepoint.com"


$upn = "fctest1@UCLABOR.DE"
$azureaduser= Get-AzureADUser -SearchString $upn
$exmailbox=get-mailbox $upn

Get-AzureADUserThumbnailPhoto -ObjectId $azureaduser.ObjectId
Get-AzureADUserThumbnailPhoto : Error occurred while executing GetAzureADUserThumbnailPhoto
Code: Request_ResourceNotFound
Message: Resource 'thumbnailPhoto' does not exist or one of its queried reference-property objects are not present.

Get-UserPhoto -Identity $upn
Fehler bei Proxybefehl 'Get-UserPhoto -Identity:'CN=fctest1,OU=fcarius.onmicrosoft.com,OU=Microsoft Exchange Hosted
Organizations,DC=NAMPR20A001,DC=PROD,DC=OUTLOOK,DC=COM'' an Server MWHPR20MB1230.namprd20.prod.outlook.com:
Serverversion 15.20.4478.0000, Proxymethode PSWS:
Cmdlet-Fehler mit folgender Fehlermeldung:
Microsoft.Exchange.Data.Storage.UserPhotoNotFoundException: Hier ist kein Foto gespeichert.

In SharePoint ist auch kein Exchange Sync-Status zu sehen.

Das Feld ist leer.

Bild addieren 18:00

Der nächste Schritt ist es nun ein Bild zu addieren. Das kann der Benutzer selbst machen oder ein Administrator. Hauptsache es kommt ein Bild in das Exchange Postfach des Anwenders. Ich habe dazu einfach folgendes einfache Logo genutzt, welches mit 506x600 Pixel und 16 Kilobyte gut reinpasst:

Ich habe das Bild hier nur über HTML-Tags "kleiner" gemacht. Wenn Sie die PNG-Datei herunterladen, ist sie in der richtigen Größe. Das Bild habe ich als Administrator mittels Exchange Online PowerShell eingespielt:

$UserPhoto = "c:\temp\fctest1a.jpg"
Set-UserPhoto `
   -Identity $upn `
   -PictureData ([System.IO.File]::ReadAllBytes($UserPhoto)) `
   -Confirm:$False

Der Upload dauert ein paar Sekunden. Über den gleichen Weg können Sie auch Group-Mailboxen mit einem Bild versehen. Addieren Sie einfach "-GroupMailbox" als Parameter. AzureAD-Gäste haben natürlich kein Postfach aber können auch mit einem Bild versehen werden. Siehe dazu auch Gast-Identität.

Microsoft Teams haben auch ein Bild, was aber über die Teams PowerShell aktualisiert wird 

Set-TeamPicture `
   -GroupId $ObjectId `
   -ImagePath c:\temp\Privacy.jpg

Nun war etwas Warten angesagt, denn das neue Bild im Exchange Postfach erscheint nicht "sofort" in den anderen Systemen. Im Hintergrund gibt es einen oder mehrere Synchronisationsprozesse, die sich die Daten holen.

Verifikation 18:30

Ich habe dann in verschiedenen Abständen an den unterschiedlichen Stellen den Fortschritt untersucht.

Ort 0,5h 24h 48h 48h Beschreibung

Exchange PowerShell

Die Exchange PowerShell hat das Bild schon mal geliefert. Es ist also im Postfach gelandet.

PS C:\> Get-UserPhoto -Identity $upn

RunspaceId  : 4eac6e88-34f3-47d8-aa29-3612f57bfd2a
Identity    : fctest1
PictureData : {255, 216, 255, 224...}
Thumbprint  : 1576237373
IsValid     : True
ObjectState : New

AzurePowerShell

Im AzureAD ist das Objekte aber nicht angekommen:

PS C:\> $upn = "fctest1@UCLABOR.DE"
PS C:\> $azureaduser= Get-AzureADUser -SearchString $upn
PS C:\> Get-AzureADUserThumbnailPhoto -ObjectId $azureaduser.ObjectId
Get-AzureADUserThumbnailPhoto : Error occurred while executing GetAzureADUserThumbnailPhoto
Code: Request_ResourceNotFound
Message: Resource 'thumbnailPhoto' does not exist or one of its queried reference-property objects are not present.

Das Bild im AzureAD ist bei per ADSync verwalteten Benutzern "ReadOnly" und wird aus dem lokalen AD befüllt. Dies beschreibe ich weiter unten noch einmal.

Azure Portal

Im Portal wurde das neue Bild aber schon angezeigt. Das hier angezeigte Bild muss aber wohl aus dem Exchange Postfach kommen, denn im AzureAD selbst hat der Benutzer kein Bild.

Das Bild im AzureAD ist bei per ADSync verwalteten Benutzern nämlich "ReadOnly" und wird aus dem lokalen AD befüllt.

User MyAccount

Analog dazu sehe ich mein Bild auch in MyAccount auf https://myaccount.microsoft.com/

Outlook Web Access

Beim Zugriff auf mein Exchange Postfach sehe ich schon das Exchange Bild als Profilfoto:

Exchange Admin Portal

Die Exchange Administratoren sehen kein Bild. Auch nach 24h ist das Bild hier nicht sichtbar. Anscheinend wird es hier generell nicht angezeigt.

SharePoint User

Wenn ich als Benutzer selbst angemeldet bin, dann sehe ich mein Bild rechts oben im Profil.

SharePoint Suche

Wenn ich im Sharepoint nach dem Benutzer suche, dann finde ich diesen in der Ergebnislist aber ohne Bild.

Auch die Details zum Benutzer sind leer.

Delve

Und auch in Delve ist das neue Foto sehr schnell sichtbar.

SharePoint Admin

Im SharePoint Admin Portal selbst ist der Benutzer aber ohne Foto vorhanden und auch das Feld "Picture Exchange Sync State" bleibt bei mir leer.

Selbst nach 24h war das Bilder immer noch nicht abgeglichen. Angeblich kann es bis 72h dauern, was dann sehr lange wäre.

if the picture exchange sync state property doesn’t get reflected, please set it to 1 manually. By setting this as 1 we’re informing the SYNC that we have got an update profile Photo for the users that needs to be synced

The picture is synced down from Exchange Online only once every 72 hours.
Quelle: https://www.sharepointpals.com/post/fix-for-users-profile-pictures-not-displayed-in-sharepoint-online-sites-and-delve/

Ich bin dem Hinweis gefolgt, und habe nach 24h im SharePoint Benutzerprofil einfach mal eine "1" eingetragen:

Auch 48 Stunden nach der Änderung des Bilds und 24h nach dem Eintragen einer "1" hat sich nichts geändert.

Yammer

Nachdem der Benutzer ein Exchange Profilfoto bekommen hat, habe ich mich erstmals an Yammer angemeldet. Yammer hat darauf das Benutzerprofil neu angelegt und das Foto direkt mit kopiert:

Man sieht allerdings schon, dass das Bild selbst nach ca. 1 Stunde noch nicht an allen Orten auftaucht. Das kann natürlich mehrere Gründe haben. Aber es gibt kein Logging, welches ich als Admin einsehen kann. Ich weiß also nicht, wann die Hintergrundprozesse von Microsoft arbeitet oder warum er nicht arbeitet.

Zwischenstand

Mein Test-Tenant ist ein ganz normaler "Standard Tenant", wie die meisten andere Tenants und hat quasi keine Anpassungen in Sharepoint erfahren. Ich kann mit beim besten Willen nicht erklären, warum das neue Bild, welches ein Administrator per PowerShell in das Postfach des Anwender hochgeladen hat, Weder in SharePoint Online noch im AzureAD aufgetaucht ist.

Ich hoffe doch, dass Microsoft hier noch nachbessert

Fix für AzureAD

Wenn der Prozess zur Synchronisation der Bilder seine Arbeit nicht macht, dann könnte ich als Administrator ja das Bild selbst an die entsprechende Stelle schreiben. Ich habe daher versucht, das AzureAD-Attribut zu beschreiben.

PS C:\> Set-AzureADUserThumbnailPhoto -ObjectId $azureaduser.ObjectId -FilePath c:\temp\fctest1c.jpg
Set-AzureADUserThumbnailPhoto: Error occurred while executing SetAzureADUserThumbnailPhoto
Code: Request_BadRequest
Message: Unable to update the specified properties for On-Premises mastered Directory Sync objects or objects currently undergoing migration.

Die Fehlermeldung weist deutlich darauf hin, dass mein aktiver ADSync-Prozess für das Feld zuständig ist und ich daher das Feld in der Cloud nicht direkt aktualisieren kann. Das hat Microsoft auch durch einen Pfeil in eine Richtung auf ihren Blog beschrieben:


Quelle: Auszug aus https://support.microsoft.com/en-us/office/information-about-profile-picture-synchronization-in-microsoft-365-20594d76-d054-4af4-a660-401133e3d48a

Damit ist auch geklärt, dass aktuell Office 365 selbst das Exchange Profilfoto dann auch nicht ins AzureAD repliziert und ich selbst als Administrator das Bild per AzureAD-PowerShell nicht schreiben kann. ADSync verhindert dies und hier muss sich immer das AD-Foto aus dem lokalen AD eintragen.

Umgekehrt würde das aber bedeuten, dass ein lokalen "lowres"-AD-Photo über ADSync in die Cloud kommt und dann das Bild in Exchange überschreiben könnte.

Ich bin daher dann an das lokale AD-Objekt gegangen, und habe dort ein Bild hinterlegt.

Ich habe hier absichtlich ein etwas anderes Bild verwendet, um zu sehen, welches Bild später wo erscheint.

Der nächste ADSync-Lauf hat dann die Änderung auch ins AzureAD übertragen:

Und quasi sofort konnte ich mit Get-AzureADUserThumbnailPhoto diese Information auch abfragen.

PS C:\> Get-AzureADUserThumbnailPhoto -ObjectId $azureaduser.ObjectId

RunspaceId           : 3d3b6701-c054-45b1-8a68-5473e00649a7
Tag                  :
PhysicalDimension    : {Width=604, Height=604}
Size                 : {Width=604, Height=604}
Width                : 604
Height               : 604
HorizontalResolution : 95,9612
VerticalResolution   : 95,9612
Flags                : 77842
RawFormat            : [ImageFormat: b96b3caf-0728-11d3-9d7b-0000f81ef32e]
PixelFormat          : Format32bppArgb
Palette              : System.Drawing.Imaging.ColorPalette
FrameDimensionsList  : {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
PropertyIdList       : {769, 20752, 20753, 20754}
PropertyItems        : {System.Drawing.Imaging.PropertyItem, System.Drawing.Imaging.PropertyItem,
                       System.Drawing.Imaging.PropertyItem, System.Drawing.Imaging.PropertyItem}

Diese Funktion ist damit verstanden. Wenn ich das Bild eines Benutzer im AzureAD hinterlegen will, dann gibt es nur folgende Fälle:

  • Cloud Only Konto
    Bild im AzureAD mit Get-AzureADUserThumbnailPhoto durch den Administrator möglich
  • AD-Sync Konto
    Bild muss im lokalen AD gesetzt und mit ADSync in die Cloud repliziert werden

Obwohl ich das AD-Foto lange nach dem Exchange Online Foto geändert habe, wurde es zwar per ADSync ins AzureAD repliziert aber ist sonst nirgendwo aufgetaucht. Skype for Business Online gibt es ja nicht mehr und vermutlich hat auch sonst keiner Verwendung für das AD-Photo. Es wurde auch nicht nach Exchange Online geschrieben und das dortige Bild ausgetauscht. Nach dem Motto: Wenn in Exchange Online ein Bild vorliegt, dann wird es nicht aus dem AzureAD überschrieben? Dafür habe ich aber noch keine Bestätigung.

Ein Sonderfall sind hier die Gäste, welche ja nicht per ADSync aus einem lokalen Active Directory repliziert werden. Hier kann ich die Bilder dann entsprechend setzen 

SharePoint

Damit bleibt zuletzt noch die Frage nach dem Abgleich zu SharePoint. Das Bild ist auch nach 72h nicht im SharePoint Profil des Anwender angekommen. In der Zwischenzeit habe ich natürlich weiter recherchiert. Hier ein paar Links und Zitate:

Note: Changes to the user photo won't appear in SharePoint until the affected user visits their profile page (My Site) or any SharePoint page that shows their large thumbnail image.
Quelle: Remove-UserPhoto https://docs.microsoft.com/de-de/powershell/module/exchange/remove-userphoto?view=exchange-ps

We had to come up with a script to manually push them through to SharePoint because of this bug, as it was inconsistent.
Quelle: SharePoint Online User Photo Sync https://techcommunity.microsoft.com/t5/sharepoint/sharepoint-online-user-photo-sync/m-p/23832

Sharepoint Online profile photos not syncing with outlook, delve, skype etc
https://answers.microsoft.com/en-us/msoffice/forum/all/sharepoint-online-profile-photos-not-syncing-with/1a613c3e-5a80-4ef8-b220-14103a4a30d6
Angeblich bis zu 72h Verzögerung

When Dirsync completes the Synchronization to Azure AD, EXO gets a copy from AzureAD then SPO gets a copy from EXO. Though Outlook/Lync online is updated instantly, SPO might take up to 72 hours to show the picture.
demystifying User Profile picture sync in #Office365
https://spbreed.wordpress.com/2015/11/06/demystifying-user-profile-picture-sync-in-office365/

Das letzte Zitat wiederspricht aber dem anderen Blogbeitrag, bei dem gerade nicht

Mein erster Schritt war daher der direkte Blick in die "Sharepoint Profile Picture Library", die ich mit meinem Tenantnamen einfach erreicht habe.

https://fcarius-my.sharepoint.com/User%20Photos/Forms/Thumbnails.aspx
https://fcarius-my.sharepoint.com/User%20Photos/Profile%20Pictures

Es gibt nur wenige "Thumbnails" und wie sie sehen, ist keines der beiden Bilder jemals dort gelandet:

Unter diesen Voraussetzungen kann ich natürlich lange warten ab aber frage mich natürlich auch, warum keines der Bilder dort landet. Ein Export-Tool habe ich auf SharePoint PhotoExport bereitgestellt aber noch kein Import-Tool. Die Frage stellt sich nun, warum der Sync-Prozess nicht gestartet wird. Ich habe verschiedene Ursachen an unterschiedlichen Fundstellen im Internet zusammengetragen, von denen ich aber nicht sagen kann, dass Sie vollständig sind.

  • AD-Foto ist größer als 100k
    Dann kann es nicht von ADSync repliziert werden, landet nicht im AzureAD und nicht in Exchange und damit auch nicht in SharePoint
  • Fehlende Exchange Online Lizenz
    Dann gibt es kein Postfach, aus dem sich SharePoint bedienen kann
  • On-Premises Mailbox
    Selbst mit Lizenz kann der Benutzer ja lokal liegen und Sharepoint Online hat keinen Zugriff.

Auf meine Umgebung treffen diese Fälle nämlich alle nicht zu.

Aktuell sehe ich nur die Lösung, dass der Admin die Fotos selbst zu SharePoint mit dem richtigen Namen und der richtigen Auflösung hochlädt. Ein fertiges Skript habe ich dazu noch nicht.

Yammer

Nachdem ich diese Seite veröffentlicht habe, wurde ich drauf hingewiesen, dass auch mit Yammer nicht alles glatt läuft. Auch in Yammer gibt es historisch eigene "Benutzerprofile", da Yammer früher eine eigenständige Firma war. Mit dem Aufkauf von Microsoft hat es noch einige Jahre gedauert bis Yammer sich dann etwas an das AzureAD angenähert hat und heute dessen Anmeldedienste nutzt. Dennoch scheint Yammer immer noch seine eigenen Profile zu verwalten.

Yammer unterscheidet nun nach Benutzern, deren Identität aus dem AzureAD stammt oder eigenständigen Benutzern, die einfach nur Yammer ohne AzureAD nutzen. Das gibt es immer noch aber ich beschäftige mich nun nur mit den AzureAD-Benutzern. Hier schreibt Microsoft:

When Office 365 users who are new to Yammer access Yammer for the first time using their Azure AD credentials, a Yammer user is created, and the Yammer user profile is populated with the Azure AD user properties.
And when the user's profile properties are edited in Azure AD, they are updated in the existing user's Yammer profile. Say, the user's department changed in Azure AD, they will appear in Yammer as well. User profiles that they see in Yammer are their Office 365 profile, if their organization uses Azure AD to manage user credentials.
Quelle: https://docs.microsoft.com/en-us/yammer/manage-yammer-users/manage-users-across-their-lifecycle#user-profile-information

Etwas mehr Hintergründe zum Abgleich liefert der FAQ-Bereich

Q: Are user profile pictures updated from Office 365 to Yammer?
A: Yes. The profile will be updated with the user's Office 365 profile picture. This update is initiated when the user clicks the Yammer tile from Office 365 or logs in to Yammer for the first time, and will be reflected in the Yammer profile within few hours. If the user later updates his or her profile picture, the Yammer profile picture will also update after the user next uses Yammer.
Quelle: https://docs.microsoft.com/en-us/yammer/manage-yammer-users/manage-users-across-their-lifecycle#q-are-user-profile-pictures-updated-from-office-365-to-yammer

Anscheinend gibt es auch hier keine Delta-Synchronisation, wie wir das aus dem Active Directory oder ADSync kennen, bei der ein Prozess zyklisch nach Änderungen sucht. Es gibt aber auch keine Push-Funktion, die z.B.: durch ein "Set-UserPhoto" angetriggert würde. Stattdessen scheint Yammer bei jeder Anmeldung durch den Anwender nachzuschauen, ob es ein neues Foto gibt und dann holt. Bis das neue Foto dann im Yammer-Netzwerk bekannt ist und auf dem Client aus dem Cache herausgealtert ist, können "Stunden" vergehen.

Ich habe dann die Testserie noch für Yammer in vereinfachter Form wiederholt. Yammer nutzt ja das Exchange Profil, so dass ich mir das Foto im Active Directory, ADSync und AzureAD sparen konnte.

  • Erster BilderSync
    Ich habe dem Benutzer ein Exchange Online Profilbild mit "Set-UserPhoto" gegeben, welches umgehend in Exchange und AzureAD-Portal sichtbar war. Dann habe ich mich das erste mal in Yammer angemeldet und das Bild war nach wenigen Sekunden sichtbar
  • Änderung des Bildes
    Ich habe dann ein zweites Bild eingespielt, welches ebenfalls im AzureAD-Portal quasi sofort sichtbar war. Im Browser mit Yammer habe ich dann einfach ein "Reload" (F5-Taste) der Seite angefordert und schon war das Bild aktualisiert.
  • Löschen des Bildes
    Auch nachdem ich das Bild mit "Remove-UserPhoto" gelöscht habe, war das Bild in Yammer mit den nächsten Reload der Seite weg
  • Ändern anderes Profilbild
    Dann habe ich noch das Bild eines anderen Benutzers geändert und diesen in Yammer gesucht. Auch hier war quasi ohne Verzögerung das aktuelle Bild zu sehen.

Bei dieser Testserie eines "unverbrauchten" Tenants mit einer übeschauberen Anzahl an Demo-Anwendern konnte ich keine Probleme bei Yammer sehen. Das kann aber auch Glück gewesen sein.

Bild entfernen

Nach der ganzen Ernüchterung speziell hinsichtlich des Abgleichs zu SharePoint habe ich mit entschieden, das Bild zu entfernen. zuerst habe ich das Bild im lokalen Active Directory gelöscht und ADSync angeworfen.

Set-ADUser fctest1 -clear Thumbnailphoto

Start-ADSyncSyncCycle -PolicyType delta

Wenige Sekunden später hat ADSync das Bild aus dem AzureAD entfernt:

Auch per AzureAD Powershell war diese Änderung sofort sichtbar.

$azureaduser = get-azureaduser -SearchString fctest1@uclabor.de
Get-AzureADUserThumbnailPhoto -ObjectId $azureaduser.ObjectId

Get-AzureADUserThumbnailPhoto : Error occurred while executing GetAzureADUserThumbnailPhoto
Code: Request_ResourceNotFound
Message: Resource 'thumbnailPhoto' does not exist or one of its queried reference-property objects are not present.

Hier funktioniert die "Replikation" sehr schnell. In Exchange Online wurde das Bild aber nicht gelöscht.

Get-UserPhoto -Identity fctest1@uclabor.de

RunspaceId : 5a983d6f-764f-40ed-bad2-6046ad04414a
Identity : fctest1
PictureData : {255, 216, 255, 224...}
Thumbprint : 1633589028
IsValid : True
ObjectState : New

Das habe ich aber auch nicht erwartet, da das ADPhoto auch nicht zu Exchange Online repliziert wurde. Das ist nach allgemeinem Wissen wohl ein "einmaliger" Prozess. Da ich auch das AD-Bild nirgendwo sonst "sichtbar" gefunden habe, gab es auch keine weiteren Auswirkungen.

Also bin ich im nächsten Schritt an das Exchange Postfach gegangen um dort als Administator das Bild zu löschen

Remove-UserPhoto `
   -Identity fctest1@uclabor.de `
   -Confirm:$False

Dieses Bild wird ja von vielen Office 365 Diensten referenziert und in Outlook Web App war das Bild sofort weg

Auch im Azure Portal des Administrators was kein Bild mehr zu sehen

Und an all den anderen Stellen war das Bild quasi "sofort" verschwunden. In SharePoint gab es aber nichts zu verschwinden, da dort noch nie ein Bild gelandet ist.

Einschätzung

Ich weiß nicht, was Microsoft in der Cloud macht aber die Synchronisation von lokalen AD-Bildern mit ADSync in die Cloud funktioniert aber ist nirgendwo sichtbar, sobald ich in Exchange ein höher aufgelöstes und damit besseres Bild als Benutzer als Administrator bereitstelle. Das in Exchange bereitgestellte Bild ist auch in kurzer Zeit an fast allen Stellen zu sehen. Natürlich dauert es ein wenig, da Bilder auch im Browser-Cache liegen.

Einzig die "Sharepoint Story" ist noch lange nicht dort, wo sie sein sollte. Genau genommen könnte man auf den SharePoint-Bilderspeicher ja verzichten, denn im Exchange Postfach liegen die Bilder sowieso. Unschön ist dies nur für Personen mit Microsoft 365 F1-Lizenz, die kein Exchange Postfach haben.

Weitere Links