У учетных записей пользователей Active Directory есть специальный атрибут thumbnailPhoto, в котором можно хранить фото пользователя. Outlook, OWA, Lync/Skype for Business, SharePoint (и другие приложения) могут использовать фото, хранящееся в этом атрибуте AD в качестве аватарки пользователя в интерфейсе. Кроме того, эти фотографии можно использовать в качестве аватары пользователя Windows.
В этой статье мы покажем, как добавить (загрузить) фото пользователя в Active Directory с помощью PowerShell, OWA или оснастки Active Directory, а также как сохранить значение атрибута thumbnailPhoto в jpeg файл.
- Атрибут thumbnailPhoto в Active Directory
- Установка фотографии пользователя в AD с помощью PowerShell
- Загрузка фото пользователя AD через Exchange
- Как массово импортировать (добавить) фотографии пользователей в Active Directory?
- Как сохранить фото пользователя из Active Directory в графический файл?
- Добавить кнопку добавления фото пользователя в консоль Active Directory
Атрибут thumbnailPhoto в Active Directory
Основные особенности и ограничения использования фото пользователей в AD:
- Максимальный размер фото в атрибуте thumbnailPhoto пользователя — 100 Кб. Однако есть общая рекомендация использовать в качестве фото пользователя в AD графический JPEG/BMP файл размером до 10 Кб и размером 96×96 пикселей;
- Для отображения фото в Outlook 2010 и выше требуется как минимум версия схемы Active Directory Windows Server 2008;
- При большом количестве фотографий пользователей в AD увеличивается трафик репликации между контроллерами домена из-за роста базы NTDS.DIT;
- У пользователей есть права на изменение собственного фото в AD. Если нужно делегировать возможность загрузки фото другим пользователям (к примеру, кадровой службе), нужно с помощью мастера делегирования AD предоставить группе право “Write thumbnailPhoto” на OU с учетными записями пользователей.
Установка фотографии пользователя в AD с помощью PowerShell
Для добавления фото пользователю в Active Directoryчерез PowerShell можно использовать модуль Active Directory Module for Windows Powershell, который входит в состав набора средств администрирования RSAT. Сначала нужно преобразовать файл картинки в массив байтов, а потом с помощью командлета Set-ADUser задать его в качестве значения атрибута thumbnailPhoto.
Import-Module ActiveDirectory
$photo = [byte[]](Get-Content C:\PS\admin_photo.jpg -Encoding byte)
Set-ADUser vvkuzmin -Replace @{thumbnailPhoto=$photo}
То же самое одной строкой:
Set-ADUser vvkuzmin -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\ps\admin_photo.jpg" -Encoding byte))}
После выполнения указанных команд, в клиентах Outlook, Lync, OWA и пр. будет отображаться фото пользователя, хранящееся в базе Active Directory (возможно понадобится некоторое время для выполнения репликации в AD и обновления GAL).
Можете открыть свойства пользователя в консоли Active Directory Users and Computers (ADUC), перейти на вкладку редактора атрибутов и убедиться, что в атрибуте thumbnailPhoto теперь содержится значение.
Загрузка фото пользователя AD через Exchange
Аналогичный функционал по загрузке фотографии пользователей в AD поддерживается через консоль Exchange Management Shell. Для этих целей можно использовать командлет Import-RecipientDataProperty.
Команда для обновления фотографии пользователя vvkuzmin будет выглядеть так:
Import-RecipientDataProperty -Identity “vvkuzmin” -Picture -FileData ([Byte[]] $(Get-Content -Path “C:\PS\user_photo.jpg” -Encoding Byte -ReadCount 0))
В EMS Exchange 2013/2016 для управления фотографиями пользователей используется другой командлет — Set-UserPhoto. Чтобы добавить фотографию пользователя в этих версиях Exchange используются следующие команды:
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
$photofile = ([Byte[]] $(Get-Content -Path "C:\ps\uer_photo.jpg" -Encoding Byte -ReadCount 0))
Set-UserPhoto -Identity vvkuzmin -PictureData $photofile -Confirm:$False
Set-UserPhoto -Identity vvkuzmin -Save -Confirm:$False
Remove-UserPhoto -Identity vvkuzmin
Также пользователи могут самостоятельно изменить свою аватарку через Outlook Web Access (OWA). Щелкните по своей учетной записи в правом верхнем углу, выберите Edit information -> photo -> нажмите кнопку change и укажите путь к jpeg файлу с фотографией.
Как массово импортировать (добавить) фотографии пользователей в Active Directory?
Для пакетной загрузки фотографий сразу для нескольких пользователей Active Directory нужно создать CSV файл, в котором должен содержаться список учетных записей и имена файлов с фотографиями пользователей. Формат файла import.csv может быть таким:
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))}}
Как сохранить фото пользователя из Active Directory в графический файл?
Фотографию пользователя из AD можно сохранить в графический файл. Для этого нужно выбрать учетную запись с помощью Get-ADUser:
$ADuser = Get-ADUser vvkuzmin -Properties thumbnailPhoto
Теперь нужно сохранить значение атрибута thumbnailPhoto в JPG файл:
$ADuser.thumbnailPhoto | Set-Content vvkuzmin.jpg -Encoding byte
С помощью следующего PowerShell скрипта можно сохранить фото всех пользователей из определенного контейнера (OU) в jpg файлы:
Import-Module ActiveDirectory
$ADusers= Get-ADUser -Filter * -SearchBase "OU=Users,OU=Ufa,DC=winitpro,DC=ru" -Properties thumbnailPhoto | ? {$_.thumbnailPhoto}
foreach ($ADuser in $ADusers) {
$name = $ADuser.SamAccountName + ".jpg"
$ADuser.thumbnailPhoto | Set-Content $name -Encoding byte
}
Ну и напоследок, пара полезных запросов. Первый позволяет выбрать всех пользователей, у которых в атрибуте AD thumbnail Photo установлена фотография
Get-ADUser -Filter * -properties thumbnailPhoto | ? {$_.thumbnailPhoto} | select Name
Второй запрос позволяет выбрать пользователей без фотографии:
Get-ADUser -Filter * -properties thumbnailPhoto | ? {(-not($_.thumbnailPhoto))} | select Name
Добавить кнопку добавления фото пользователя в консоль Active Directory
Те кто не любит PowerShell, могут использовать для добавления фото пользователей Active Directory графические утилиты.
Я чаще всего предлагаю использовать небольшую библиотеку 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
Обратите внимание, что на вкладке есть две секции:
- При загрузке значения в thumbnailPhoto фотография автоматически уменьшается до разрешения 96×96, а качество выбирается такое, чтобы размер получился не более 10 Кб.
- Если вы загружаете картинку через jpegPhoto, то качество изображения изменяется, чтобы размер фото был меньше 100 Кб.
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.