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.
Siehe auch die Seiten ADPhoto, Lync Photo, Office 365 Profilfoto und Export-Exchangeuserphoto
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:
- Information about profile picture
synchronization in Microsoft 365
https://support.microsoft.com/en-us/office/information-about-profile-picture-synchronization-in-microsoft-365-20594d76-d054-4af4-a660-401133e3d48a
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.
- Information about profile picture
synchronization in Microsoft 365
https://support.microsoft.com/en-us/office/information-about-profile-picture-synchronization-in-microsoft-365-20594d76-d054-4af4-a660-401133e3d48a - User photos aren't synced from the On-Premises
environment to Exchange Online in a hybrid
deployment
https://docs.microsoft.com/en-us/exchange/troubleshoot/administration/user-photos-not-synced-to-exchange-online
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 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.
- Set-AzureADUserThumbnailPhoto
https://docs.microsoft.com/en-us/powershell/module/azuread/set-azureaduserthumbnailphoto?view=azureadps-2.0 - Set user thumbnail photo and get Office 365 domain references via the Azure
AD Preview module
https://www.michev.info/Blog/Post/1604/set-user-thumbnail-photo-and-get-office-365-domain-references-via-the-azure-ad-preview-module
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.
- CodeTwo Active Directory Photos
https://www.codetwo.de/freeware/active-directory-photos/
Freeware um die AD-Photos im lokalen Active Directory zu setzen
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
-
Gast-Identität
Mit kleinem Sample um Gäste das Firmenlogo zu verpassen
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.
- SharePoint PhotoExport
- PNP Core: Core.ProfilePictureUploader/
https://GitHub.com/pnp/PnP/tree/master/Samples/Core.ProfilePictureUploader - How to add user photos to Office 365
without PowerShell
https://www.codetwo.com/admins-blog/how-to-add-user-photos-to-office-365-without-powershell/
Achtung: Importiert mit Set-UserPhoto zu Exchange Online und wartet auf den Sharepoint Picture Sync. - Bulk Upload and Update User Profile
Photos in SharePoint 2013
https://www.sptrenches.com/2014/08/bulk-upload-and-update-user-profile.html
Achtung: Importiert OnPrem. nicht mit der Cloud getestet - Get-PnPUserProfileProperty
https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/get-pnpuserprofileproperty?view=sharepoint-ps - User photos aren't synced from the On-Premises
environment to Exchange Online in a hybrid
deployment
https://docs.microsoft.com/en-us/exchange/troubleshoot/administration/user-photos-not-synced-to-exchange-online - Upload user profile pictures sample add-in for SharePoint
https://GitHub.com/SharePoint/PnP-Guidance/blob/b5d113e243f682259a1bf9df4be47a2f4808bb22/articles/Upload-user-profile-pictures-sample-app-for-SharePoint.md - Profile Photo Sync SPO
https://techcommunity.microsoft.com/t5/sharepoint/profile-photo-sync-spo/m-p/78585 - Profile Photo Sync from Exchange2016 on
Premise to O365 Environment
https://docs.microsoft.com/en-us/answers/questions/334365/profile-photo-sync-from-exchange2016-on-premise-to.html - SharePoint Admincenter
https://admin.microsoft.com/sharepoint?page=home&modern=true - User Profile Verwaltung meines Tenant
https://fcarius-admin.sharepoint.com/_layouts/15/TenantProfileAdmin/ManageUserProfileServiceApplication.aspx - SharePoint Online User Photo Sync
https://spknowledge.com/2020/07/11/sharepoint-online-user-photo-sync/ - Fix For Users Profile Pictures Not
Displayed In SharePoint Online Sites And
Delve
https://www.sharepointpals.com/post/fix-for-users-profile-pictures-not-displayed-in-sharepoint-online-sites-and-delve/ - Update-ProfilePhotoStore
https://docs.microsoft.com/en-us/powershell/module/sharepoint-server/update-spprofilephotostore?view=sharepoint-ps
Hilft in der Cloud nicht weiter - PnP.Powershell
https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/?view=sharepoint-ps - Get-PnPUserProfileProperty
https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/get-pnpuserprofileproperty?view=sharepoint-ps - SharePoint Online User Photo Sync
https://techcommunity.microsoft.com/t5/sharepoint/sharepoint-online-user-photo-sync/m-p/23832
Diskussion über die Probleme da in Exchange geänderte UserPhoto in SharePoint zu sehen und anzupassen - demystifying User Profile picture sync
in #Office365
https://spbreed.wordpress.com/2015/11/06/demystifying-user-profile-picture-sync-in-office365/ - Add and edit user profile properties in SharePoint
https://docs.microsoft.com/en-us/sharepoint/add-and-edit-user-profile-properties - Erste Schritte mit dem SharePoint Admin Center
https://docs.microsoft.com/de-de/sharepoint/get-started-new-admin-center - Administrator is not able to change user’s picture in
User Profile in SharePoint Admin Center
http://sharepointgauravgoyal.blogspot.com/2018/12/administrator-is-not-able-to-change.html - How to get SharePoint profile picture
https://sharepoint.handsontek.net/2018/10/05/how-to-get-sharepoint-profile-picture/ - Office 365 Profile picture not displayed inside SharePoint People Web Part
on Modern Site Page
https://techcommunity.microsoft.com/t5/sharepoint/office-365-profile-picture-not-displayed-inside-sharepoint/m-p/166190
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.
- Yammer will now use the Office 365 profile
https://engagesq.com/yammer-will-now-use-office-365-profile/
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
- Remove-UserPhoto
https://docs.microsoft.com/de-de/powershell/module/exchange/remove-userphoto?view=exchange-ps
Use the Remove-UserPhoto cmdlet to delete the user photo currently associated with a user's account. User photos are stored in the user's Active Directory account and in the root directory of the user's Exchange mailbox, both of which are deleted when you run this cmdlet.
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
- ADPhoto
- Lync Photo
- Office 365 Profilfoto
- Export-Exchangeuserphoto
-
Gast-Identität
Mit kleinem Sample um Gäste das Firmenlogo zu verpassen -
Demystifying User Profile picture sync in
#Office365
https://spbreed.wordpress.com/2015/11/06/demystifying-user-profile-picture-sync-in-office365/ - How to Update User Photos for Microsoft
365 Accounts
https://petri.com/update-user-photos-office-365-accounts - CodeTwo Active Directory Photos
https://www.codetwo.de/freeware/active-directory-photos/
Freeware um die AD-Photos im lokalen Active Directory zu setzen - CodeTwo User Photos for Office 365
https://www.codetwo.de/freeware/user-photos-for-office-365/
Freeware um die AD-Photos in Office 365 über "Set-UserPhoto" zu setzen samt Beschreibung, wo das Bild dann erscheint. - How to Control Updates for User Photos in Microsoft 365 Apps
https://office365itpros.com/2021/04/14/control-updates-user-photos-microsoft-365-apps/ - How to get SharePoint profile picture
https://sharepoint.handsontek.net/2018/10/05/how-to-get-sharepoint-profile-picture/ - Where Profile Photos come from in Office 365
https://blog.hyperfish.com/where-profile-photos-come-from-in-office-365 - User Photo Sync Behavior in Microsoft 365
https://threewill.com/user-photo-sync-behavior-in-office-365/