Добавление фотографии пользователям Active Directory, атрибут thumbnailPhoto
У учетных записей пользователей Active Directory есть специальный атрибут thumbnailPhoto, в котором можно хранить фото пользователя. Outlook, OWA, Lync/Skype for Business, SharePoint (и другие приложения) могут использовать фото, хранящееся в этом атрибуте AD в качестве аватарки пользователя в интерфейсе. Кроме того, эти фотографии можно использовать в качестве аватары пользователя Windows.
В этой статье мы покажем, как добавить (загрузить) фото пользователя в Active Directory с помощью PowerShell, OWA или оснастки Active Directory, а также как сохранить значение атрибута thumbnailPhoto в jpeg файл.
Атрибут 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:PSadmin_photo.jpg -Encoding byte)
Set-ADUser vvkuzmin -Replace @{thumbnailPhoto=$photo}
То же самое одной строкой:
Set-ADUser vvkuzmin -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:psadmin_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.
Примечание. Командлет Import-RecipientDataProperty в Exchange 2010 не позволяет загрузить изображение размером больше 10 Кб.
Команда для обновления фотографии пользователя vvkuzmin будет выглядеть так:
Import-RecipientDataProperty -Identity “vvkuzmin” -Picture -FileData ([Byte[]] $(Get-Content -Path “C:PSuser_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:psuer_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:PSavivanov.jpg [email protected], C:PSjsmith.jpg pppetrov, C:PSpppetrov.png
Следующая однострочная PowerShell команда загрузит список пользователей из CSV файла и обновит их фотографии в Active Directory:
Import-Csv C:PSimport.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 графические утилиты.
Существует большое количество сторонних утилит, позволяющих в более удобном виде графического редактора задавать фотографии для пользователей AD. Но, как правило, их функционал избыточен, да и риски использования стороннего ПО для редактирования AD довольно существенны.
Я чаще всего предлагаю использовать небольшую библиотеку AdExt.dll, которая добавляет отдельную вкладку для добавления фотографии прямо в консоль ADUC.
Скачать библиотеку AdExt.dll можно здесь — AdExt-dll.zip
Для установки библиотеки запустите командную строку с правами администратора и перейдите в каталог с бинарными файлами .Net Framework:
- Для x86 Windows :
cd %WinDir%Microsoft.NETFrameworkv2.0.50727
- Для x64 Windows:
cd %WinDir%Microsoft.NETFramework64v4.0.30319
Установите библиотеку командой:
InstallUtil.exe c:psadAdExt.dll
Перезапустите консоль ADUC, затем откройте свойства любого пользователя. Обратите внимание что появилась новая вкладка Photo, на которой вы можете добавить или удалить фотографию пользователя.
InstallUtil.exe /u c:psadAdExt.dll
Обратите внимание, что на вкладке есть две секции:
- При загрузке значения в thumbnailPhoto фотография автоматически уменьшается до разрешения 96×96, а качество выбирается такое, чтобы размер получился не более 10 Кб.
- Если вы загружаете картинку через jpegPhoto, то качество изображения изменяется, чтобы размер фото был меньше 100 Кб.
PowerShell
атрибут thumbnailPhoto, Добавление фотографии пользователям Active Directory