администрирование,

Фоторафии в Exchnage. Откуда Outlook берёт фото пользователей?

Oct 03, 2019 · 3 мин. на прочтение
Фоторафии в Exchnage. Откуда Outlook берёт фото пользователей?
Поделиться

Во многих компаниях, фотографии пользователей распространяются централизовано. Когда новый сотрудник фотографируется на пропуск, его фотография загружается в систему и распространяется через Active Directory по другим ресурсам. Я всегда считал, что Outlook смотрит в AD и подгружает фотографию оттуда. Но оказалось, что это не совсем так.

Как известно, в Actve Directory есть два поля, для хранения фотографий. Это thumbnailPhoto и jpegPhoto. Первое предназначено для хранения небольших фотографий 96x96 и ограничено размером 100 KB. Второе предназначено для фотографий большего размера. Outlook использует поле thumbnailPhoto. Более внятного описания из официальной документации я не нашёл. Если кто-то может поделиться ссылкой на подробное описание этих полей, то прошу оставить её в комментариях к этому посту.

Есть множество способов заполнить данные поля. Например, вот так:

$photo = [byte[]](Get-Content "C:\Users\mdanshin\mdanshin_AD.jpg" -Encoding byte)
Set-ADUser mdanshin -Replace @{thumbnailPhoto=$photo}

Так мы жили пока использовали Outlook 2010 и Exchange 2010. С переходом на Exchange 2016 выяснилась одна любопытная деталь. Теперь пользователи сами могут менять свои фотографии. Эта возможность появилась в Exchange 2013. Для этого можно воспользоваться штатным механизмом Outlook Web App (OWA), как показано на картинке ниже:

Exchange-Photos/1.png

Загружая таким образом фотографию, поле thumbnailPhoto перезаписывается.

Компаниям может не понравиться, если пользователи начнут менять свои фотографии, или, как это делают некоторые, загружать фотографии котиков и другие аватарки. Казалось бы, достаточно заново переписать атрибут thumbnailPhoto и восстановить первоначальные фотографии, выдержанные в корпоративном стиле. И сделать эту процедуру автоматической. Но как оказалось, после изменения thumbnailPhoto, фотография в Outlook не поменялась. И кэширование тут не причём. Outlook упорно подгружал пользовательскую фотографию. Очевидно, что он брал её откуда-то ещё.

Выяснилось, что Exchange 2013, и старше, хранит пользовательские фотографии на домашнем сервере пользователя, то есть там, где у него расположен почтовый ящик. Хранятся они в папке C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\photos\DomainName-GUID. Там находится ещё две папки, для фотографий 96x96 и 648x648. В одной из них и лежит фотография, загруженная пользователем через OWA.

Есть два способа увидеть пользовательскую фотографию. Первый способ - это командлет Get-UserPhoto. Для этого мы помещаем фото в переменную, а потом выгружаем содержимое переменной в файл, как показано на примере ниже:

$photo = Get-UserPhoto -id mdanshin | select PictureData 
$photo.PictureData | Set-Content "mdanshin.jpg" -Encoding byte 

Ещё один способ увидеть фотографию – обратиться по адресу https://EWS_URL/ews/Exchange.asmx/s/GetUserPhoto?email=USER_EMAIL&size=HR96x96. Например так:

https://owa.domain.ru/ews/Exchange.asmx/s/GetUserPhoto?email=mdanshin@domain.ru&size=HR648x648

Оба эти способа отображают фотографию не из поля thumbnailPhoto, а именно ту, что хранится на сервере. В этом легко убедиться следующим образом. Сначала меняем фотографию через OWA, на новую, а потом меняем фотографию в поле thumbnailPhoto на другую, скажем на старую (см. пример выше).

Теперь о том, как нам поменять пользовательскую фоторафию на корпоративную. Простое удаление фотографии из папки не помогает. Через короткое время она появляется вновь. При этом не совсем понятно откуда она берётся, если я её удалил. С этим ещё предстоит разобраться.

Я нашёл вот такой способ заменить фотографию.

Remove-UserPhoto -Identity mdanshin
Set-UserPhoto -Identity mdanshin -PictureData ([System.IO.File])::ReadAllBytes("mdanshin_AD.jpg")

Exchange-Photos/2.png

Так же в Интернет есть описание того, как запретить пользователям самостоятельно менять фотографии.

Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -SetPhotoEnabled $False 

Но нельзя забывать про политики. То есть в дополнение к этому нужно ещё и их поправить.

Get-OWAMailboxPolicy | Set-OWAMailboxPolicy -SetPhotoEnabled $False 
Заходите в группу Telegram
Если есть вопросы или хотите пообщаться, то заходите в мою группу Telegram.