Добавление фотографии пользователям Active Directory, атрибут thumbnailPhoto

Добавление фотографии пользователям 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))}

Атрибут Active Directory thumbnailPhoto фотография пользователя

После выполнения указанных команд, в клиентах Outlook, Lync, OWA и пр. будет отображаться фото пользователя, хранящееся в базе Active Directory (возможно понадобится некоторое время для выполнения репликации в AD и обновления GAL).

Можете открыть свойства пользователя в консоли Active Directory Users and Computers (ADUC), перейти на вкладку редактора атрибутов и убедиться, что в атрибуте thumbnailPhoto теперь содержится значение.

просмотр бинарного значения атрибута thumbnailPhoto в консоли Active Directory

Загрузка фото пользователя 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 файлу с фотографией.

outlook web access загрузка фото пользователя Active Directory через Exchange

Как массово импортировать (добавить) фотографии пользователей в 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

установка библиотеки AdExt.dll для управления фото сотрудников

Перезапустите консоль ADUC, затем откройте свойства любого пользователя. Обратите внимание что появилась новая вкладка Photo, на которой вы можете добавить или удалить фотографию пользователя.

добавить кнопку загрузки фото пользователя в консоли ADUC

Чтобы удалить (разрегистрировать) библиотеку AdExt.dll, выполните команду:

InstallUtil.exe /u c:psadAdExt.dll

Обратите внимание, что на вкладке есть две секции:

  • При загрузке значения в thumbnailPhoto фотография автоматически уменьшается до разрешения 96×96, а качество выбирается такое, чтобы размер получился не более 10 Кб.
  • Если вы загружаете картинку через jpegPhoto, то качество изображения изменяется, чтобы размер фото был меньше 100 Кб.

 

 

 

PowerShell
атрибут thumbnailPhoto, Добавление фотографии пользователям Active Directory