В атрибутах пользователей 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 (используется редко).