В атрибутах пользователей Active Directory можно хранить фотографии. Эти фотографии можно показывать в качестве аватарки пользователя в таких приложениях как Outlook, OWA, Word, Excel, Lync/Skype for Business, Teams, SharePoint (и ряде другие). Также фото из AD можно показывать в качестве аватары пользователя Windows.
Фото пользователя в двоичном виде хранится в атрибуте
thumbnailPhoto
. Администратор может загрузить JPEG файл с фото пользователя в этот атрибут AD с помощью PowerShell, оснастки ADUC со специальным расширением или с помощью сторонних утилит. Большинство приложений берут фото пользователя из атрибута thumbnailPhoto. Для хранения фотографий больших размером используется другой атрибут —
jpegPhoto
(не будем использовать его в рамках этой статьи).
Максимальный размер фото пользователя в атрибуте thumbnailPhoto не должен превышать 100 Кб. Однако рекомендуется в качестве фото использовать графический JPEG/BMP файл размером до 10 Кб и расширением 96×96 пикселей. Использование фото пользователей большого размера может существенно увеличить размер файла база данных AD (NTDS.DIT) и трафик репликации между контроллерами домена. Необходимая схема AD – 2008 или выше.
Как добавить фотографию пользователя AD с помощью PowerShell?
Для загрузки фотографии пользователя в AD используется командлет Set-ADUser из модуля Active Directory for Windows PowerShell (входит в состав средств администрирования RSAT). Сначала нужно преобразовать графический файл (формат JPG, BMP или PNG) в двоичный вид (массив байтов):
$photo = [byte[]](Get-Content C:\PS\admin_photo.jpg -Encoding byte)
Теперь можно загрузить фото пользователю AD:
Set-ADUser vvkuzmin -Replace @{thumbnailPhoto=$photo}
То же самое одной строкой:
Set-ADUser vvkuzmin -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\ps\admin_photo.jpg" -Encoding byte))}
После выполнения репликации (и обновления GAL, в случае использования Exchnage), фото пользователя из Active Directory будет отображаться в Outlook, Lync, OWA и др.
Откройте свойства пользователя в консоли Active Directory Users and Computers (ADUC), перейти на вкладку редактора атрибутов и убедиться, что в атрибуте thumbnailPhoto теперь содержится значение.
По умолчанию загрузить фото в Active Directory может сам пользователь или администраторы. Вы можете предоставить права на обновление фото в AD другим пользователям или группам с помощью мастера делегирования полномочий AD (нужно предоставить право
Write thumbnailPhoto
).
Если вам нужно массово импортировать фото сразу множеству пользователей AD, подготовьте CSV файл со списком учетных записей и путей к JPG файлам в следующем формате:
AD_username, Photo avivanov, C:\PS\avivanov.jpg [email protected], C:\PS\jsmith.jpg pppetrov, C:\PS\pppetrov.png
Следующая однострочная PowerShell команда загрузит список пользователей из CSV файла и обновит их фотографии в Active Directory:
Import-Csv C:\PS\import.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}
Чтобы найти пользователей в AD, у которых не загружено фото, выполните:
Get-ADUser -Filter * -properties thumbnailPhoto | ? {(-not($_.thumbnailPhoto))} | select Name
Если нужно сохранить фото пользователя из AD и экспортировать его в графический JPG файл, сначала выберите учетную запись с помощью Get-ADUser:
$ADuser = Get-ADUser vvkuzmin -Properties thumbnailPhoto
Теперь нужно сохранить значение атрибута thumbnailPhoto в JPG файл:
$ADuser.thumbnailPhoto | Set-Content vvkuzmin.jpg -Encoding byte
Загрузить фото пользователю Active Directory через Exchange
В Exchange Server 2019, 2016, 2013 для загрузки фото пользователю AD можно использовать командлет Set-UserPhoto. При использовании в скриптах сначала нужно загрузить модуль Exchange Management Shell.
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
Set-UserPhoto -Identity vvkuzmin -PictureData ([System.IO.File])::ReadAllBytes("C:\ps\user_photo.jpg") -Confirm:$False
Для очистки фотографии используется команда:
Remove-UserPhoto -Identity vvkuzmin
Import-RecipientDataProperty -Identity “vvkuzmin” -Picture -FileData ([Byte[]] $(Get-Content -Path "C:\PS\user_photo.jpg" -Encoding Byte -ReadCount 0))
В Exchange Online (Microsoft 365) для загрузки фото в AD вместо Set-UserPhoto нужно использовать новый командлет Microsoft Graph:
Set-MgUserPhotoContent -UserId <userId> -Infile "C:\ps\[email protected]"
Также пользователи могут самостоятельно изменить свою аватарку через Outlook Web Access. Откройте свой ящик через OWA, щелкните по учетной записи в правом верхнем углу, выберите Edit information -> photo -> нажмите кнопку change и укажите путь к jpeg файлу с фотографией.
Добавить кнопку загрузки фото пользователя в консоль Active Directory
Те, кто не дружит с PowerShell, могут использовать сторонние графические утилиты для загрузки фото в AD. Наиболее популярны такие условно бесплатные утилиты, как СodeTwo Active Directory Photos или AD Photo Edit. Хотя, многие администраторы остерегаются использовать стороннее ПО для внесения изменений в AD.
Я предпочитаю использовать небольшую библиотеку AdExt.dll, которая добавляет отдельную вкладку для добавления фотографии прямо в консоль ADUC. Скачать библиотеку AdExt.dll можно с нашего сайта— AdExt-dll.zip
Чтобы зарегистрировать библиотеку, откройте командную строку с правами администратора и перейдите в каталог .Net Framework:
- Для x86 Windows :
cd %WinDir%\Microsoft.NET\Framework\v2.0.50727
- Для x64 Windows:
cd %WinDir%\Microsoft.NET\Framework64\v4.0.30319
Установите библиотеку командой:
InstallUtil.exe c:\ps\ad\AdExt.dll
Перезапустите консоль ADUC и откройте свойства любого пользователя. В консоли должна появится новая вкладка Photo, на которой вы можете добавить или удалить фото пользователя.
InstallUtil.exe /u c:\ps\ad\AdExt.dll
Библиотека AdExt.dll предоставляет два способа загрузки фото:
- Секция thumbnail – фото автоматически уменьшается до разрешений 96×96 с максимальным размером 10 Кб
- jpegPhoto – позволяет загрузить фото хорошего качества в атрибут jpegPhoto (используется редко).
CodeTwo Active Directory Photos (бесплатно и легко)
Не благодарите 🙂
бесплатно, но не работает)
Еще как работает.
Добрый день!
Подскажите как сделать: еобходимо в AD предоставить на нужную OU право «Write thumbnailPhoto» ???
У меня есть задача, передать добавление фото сотруднику из кадров, это обычный доменный пользователь.
Добрый!
Можно через делегацию. Коротенько:
ПКМ по нужному OU -> Delegate Control -> выбираете сотрудника/группу сотрудников отдела кадров -> Create a custom task to delegate -> тип объекта User objects -> Property specific — выбираете атрибут Write thumbnailPhoto
а атрибут Photo за что отвечает?
Вы про
$photo = [byte[]](Get-Content C:\PS\admin_photo.jpg -Encoding byte)
&? Просто переменная posh, в которую грузится фото.Вопрос ?
Как можно опубликовать фото (извне миром а не локальной), чтоб через Exchange Server 2019 адресатом в теле письма показывало фото авы ?
Заранее спасибо !
А в Azure AD уйдёт фото?
Желательно конечно чтоб пользователь сам себе аватарку настраивал,
Пишут, что атрибут thumbnailPhoto реплицируется через Azure AD Connect из наземной AD.
Не реплицируется
Error Type
ExceededAllowedLength
Attribute
extension_3abef82be5d34f6a9552652c3d4e019c_thumbnailPhoto
Судя по коду ошибки превышен максимальный размер. И не совсем понятно, проблема с размером фото, или с настройками Azure AD Connect.
Проблема в самом Azure AD Connect. Он не понимает длинные\нестандартные атрибуты.
у меня в azure Ушло,
Есть проблема не могу удалить в AD теперь
Имя «Remove-UserPhoto» не распознано как имя командлета, функции, файла скрипта или выполняемой программы.
Работа без оснастки
$username=$env:username
$domain=$env:userdomain
$temp=$env:temp
$thumbnailphoto = ([ADSISEARCHER]"samaccountname=$($username)").findone().properties.thumbnailphoto
if(!($thumbnailphoto -eq $null)) {$thumbnailphoto | set-content $temp\$domain+$username.thumbnailphoto.jpg -Encoding byte}
$jpegphoto = ([ADSISEARCHER]"samaccountname=$($username)").findone().Properties.jpegphoto
if(!($jpegphoto -eq $null)) {$jpegphoto | set-content $temp\$domain+$username.jpegPhoto.jpg -Encoding byte}
так же в статье есть функция по ресайзу картинки перед подгрузкой
Загрузка фото пользователя в Active Directory с помощью PowerShell , а то были прецеденты подгрузки фото по 10 мегабайт
Подскажите пожалуйста, а есть команда что бы вывест список все пользователей у кого есть фото профиля и список пофильзователей у кого нет фото профиля?
В статье это описано, прочитайте внимательно 🙂
Подскажите пожалуйста, заменил старую фотографию пользователя на новую, как долго будет обновляться фото на других машинах? Как можно ускорить процесс ? Принудительно обновил GAL? почистил кэш Lync, почистил кэш Outlook, кинул реплики………фото все равно старое показывается
Нужно чтобы прошла репликация в AD и обновление адресной книги в вашей программе (будь то Outlook или Lync). Можно это ускорить, но не думаю, что это стоит ради такого обновлять настройки обновления на серверах. Не стоит оно того, а нагрузка явно подрастёт.
Я всегда говорю пользователями, что изменения применятся в течении суток. Это снимает львиную часть вопросов к админу.
По одной фотке можно загружать, редактировать через бесплатную версию Ad Photo Edit
Добрый день!
Подскажите пожалуйста, как добавить кнопку «добавления фото пользователя» в RSAT ?
Вы про библиотеку AdExt.dll? В статье вроде все описано подробно.
я добавил библиотеку, но чудо не случилось
Добрый день, после добавления фото в атрибут, на автарке и в word, exel, оно отображается, но не в outlook. Outlook адресная книга из ad, есть ли какое то решение?
Т.е. у вас нет собственного exchnage нет?
вот это посмотрите _https://docs.microsoft.com/ru-ru/outlook/troubleshoot/user-interface/cannot-see-contact-photos
This issue occurs when the Show user photographs when available check box is cleared in the Outlook Options dialog box.
Но если у вас Exchange, то не надо так делать. Есть Set-UserPhoto которое хранит фото в Mailbox пользователя и само апдейтит thumbnailPhoto
А если exchange-а нет. Lync, Skype тоже нет. Фото пользователей есть в AD, связать с outlook не получится?