Zdjęcie użytkownika Office 365 to problem, który był ostatnio przedmiotem mojej namiętnej korespondencji z Microsoft, jak i kwestią, która wybitnie mi działała na nerwy. I właśnie ten post powstał na bazie tych doświadczeń i frustracji związanych z integracją lokalnego AD z Office 365 / Azure AD. Ja jestem przede wszystkim gościem od SharPointa i tylko chciałem aby zdjęcia moich użytkowników pojawiły się w usłudze SharePoint. Niestety, życie zmusiło mnie do zajęcia się problemem synchronizacji niektórych właściwości w AD. Ale po kolei. Moja firma ma lokalne Active Directory, które jest zintegrowane z Azure AD za pomocą DirSync. Wszystko działa pięknie, tylko w pewnym momencie pojawił się mały kłopot.

Chciałem aby zdjęcia moich użytkowników, którzy mają je ustawione w AD, pojawiły się również w SharePoint. Nasz lokalny support stwierdził, że wszystko jest ok i nie ma błędów. Ale niestety problem był. Tak wygląda mój profil w lokalnym AD

Ale już kiedy przechodziłem do Office 365 miejsce zdjęcia były puste

Zdjęcie użytkownika Office 365

Zgłosiłem problem na forum Microsoft – możecie poczytać o tym pod tym linkiem. No więc o co chodzi? Na kwestię zdjęć nakłada się kilka kwestii:

  • przede wszystkim zdjęcie z lokalnego AD nie pojawia się od razu we wszystkich miejscach Office 365!
  • pierwszym miejsce gdzie zdjęcie z naszego AD się pojawi będzie Exchange online
  • Aby zdjęcie z AD pojawiło się w Exchange online musi być mniejsze niż 10KB
  • Jeżeli nie mamy zdjęcia w Exchange online to nie pojawi się one również w SharePoint online…
  • Jeżeli mamy zdjęcie w Exchane online to aby pojawiło się w SharePoint online musimy wymusić synchronizację

Wymuszanie synchronizacji zdjęcia do SharePoint online

Wszystko wydaje się bardzo proste ale czasami może doprowadzić do białej gorączki. Nie możemy, nawet jako administrator, wymusić w interfejsie Office 365 synchronizacji zdjęcia innego użytkownika! Wymagane jest działanie jego samego. Najprostszym sposobem będzie przejście użytkownika do stron my sites lub aplikacji Delve. Można również w celu wyzwolenia synchronizacji przejść do:

About me > klikamy zdjęcie > Change photos > zmieniamy zdjęcie w Edit Details >

Z reguły to działa. Jeżeli jest problem można spróbować następujących kroków:

  1. Przechodzimy do SharePoint Online Admin Center w Office 365 admin portal> User profiles
  2. W sekcji People wybieramy 'Manage User Profiles’
  3. Szukamy użytkownika z którym mamy problem
  4. Przechodzimy do edycji profilu i szukamy atrybutu Picture Exchange Sync State
  5. Picture Exchange Sync State – zmieniamy na 0, kasujemy zdjęcie i zapisujemy
  6. Picture Exchange Sync State – ustawiamy na 1, zapisujemy i czekamy na wynik

Warto jeszcze pamiętać o jednej rzeczy, która bardzo istotnie wpływa na dostępne rozwiązania. Otóż zgodnie Technetem atrybut thumbnailPhoto jest synchronizowany pomiędzy Azure AD i Exchange Online tylko raz! Wszystkie późniejsze zmiany w naszym lokalnym AD nie są przesyłane do Exchange Online.

No cóż pozostaje nam tylko PowerShell.

Łączymy się z Exchange online:

[sourcecode language="ps"]
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session
[/sourcecode]

Żeby zmienić zdjęcie użytkownika Office 365 w Exchange możemy skorzystać z polecenia (za Technetem):

[sourcecode language="ps"]
Set-UserPhoto "Paul Cannon" -PictureData ([System.IO.File]::ReadAllBytes("C:\Users\Administrator\Desktop\PaulCannon.jpg"))
[/sourcecode]

Niestety, opcja którą podaje nam Technet jest nieprecyzyjna. Jeżeli dostajecie taki błąd jak poniżej musicie zaktualizować swój skrypt.
Error on proxy command 'Set-UserPhoto -PictureData: …
'False’ to server DB5PR07MB1368.eurprd07.prod.outlook.com: Server version 15.01.0390.0000, Proxy method PSWS:
Request return error with following error message:
The remote server returned an error: (413) Request Entity Too Large…
+ CategoryInfo : NotSpecified: (:) [Set-UserPhoto], CmdletProxyException
+ FullyQualifiedErrorId : Microsoft.Exchange.Configuration.CmdletProxyException,Microsoft.Exchange.Management.RecipientTasks.SetUserPhoto
+ PSComputerName : outlook.office365.com

W Waszym zapytaniu musicie zaktualizować parametr -ConnectionUri. Jak widzicie w moim zapytaniu pojawił się fragment ?proxyMethod=RPS . Dodatkowo przed użyciem samego zdjęcia musie je zakodować do zmiennej.

[sourcecode language="ps"]
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/?proxyMethod=RPS -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session -AllowClobber -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
$user1 = ([Byte[]] $(Get-Content -Path C:\1\Tomek1.jpg -Encoding Byte -ReadCount 0))
set-userphoto -identity user@domain.anme -picturedata $user1
Remove-PSSession $Session
[/sourcecode]

I to tyle. Mam nadzieję, że ten krótki wpis o zdjęcie użytkownika w Office 365, pomoże Wam w rozwiązaniu potencjalnych problemów, które mogą się pojawić w trakcie integracji lokalnej usługi Active Directory i Office 365