Загрузка фотографии пользователя в Active Directory c помощью PowerShell | Windows для системных администраторов

Загрузка фотографии пользователя в Active Directory c помощью PowerShell

Среди атрибутов пользователя, начиная с версии схемы Active Directory в Windows Server 2000, присутствует специальный атрибут thumbnailPhoto, в котором можно в виде бинарных данных хранить фото пользователя (или любые другие картинки :) ).  Outlook, начиная с версии 2010 Lync, SharePoint  (и другие приложения) могут использовать данные хранящиеся в этом атрибуте для отображении фотографии пользователя в своем интерфейсе. Кроме того, эти фотографии можно использовать в качестве аватар пользователей Windows.

Разберем несколько простых сценариев по загрузке фотографий пользователей в AD и экспорту данных из домена в графические файлы.

Основные особенности и ограничения использования фото пользователей в AD:

  • Максимальный размер значения атрибута thumbnailPhoto пользователя, в котором хранится загружаемая фотография, составляет 100 Кб. Однако есть общая рекомендация использовать в качестве фото пользователя в AD графический файл размером до 10 Кб и размером 96×96 пикселей
  • для отображения фото в Outlook 2010 и выше требуется как минимум версия схемы AD 2008
  • При большом количестве фотографий пользователей в AD могут возникнуть проблемы с репликацией из-за роста базы NTDS.DIT
  • У пользователей есть права на изменение собственного фото в AD. Если нужно делегировать возможность загрузки фото другим пользователям (к примеру, кадровой службе), необходимо в AD предоставить на нужную OU право «Write thumbnailPhoto»

Установка фото пользователя в AD с помощью PowerShell


Чтобы загрузить фото пользователя в Active Directory с помощью PowerShell, понадобится подгрузить модуль Active Directory Module for Windows Powershell и с помощью командлета 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))}

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

thumbnailPhoto

Загрузка фото пользователя AD через Exchange Shell


Аналогичный функционал по загрузке фотографии пользователей в AD поддерживается через консоль Exchange Management Shell. Для этих целей можно использовать командлет Import-RecipientDataProperty.

Примечание. Командлет Import-RecipientDataProperty в Exchange 2010 не позволяет загрузить изображение размером больше 10 Кб.

Команда для обновления фотографии пользователя vvkuzmin будет выглядеть так:

Import-RecipientDataProperty -Identity “vvkuzmin” -Picture -FileData ([Byte[]] $(Get-Content -Path “C:\PS\admin_photo.jpg” -Encoding Byte -ReadCount 0))

Пакетный импорт изображения в AD

Для пакетного импорта изображений сразу для многих пользователей Active Directory, нам понадобится CSV файл, в котором будет содержаться список учетных записей и соответствующие им файлы с фото. Формат файла import.csv может быть таким:

AD_username, Photo
avivanov, C:\PS\avivanov.jpg
jsmith@adatum.com, C:\PS\jsmith.jpg
pppetrov, C:\PS\pppetrov.png

Следующая команда загрузит список пользователей из CSV файла и обновит  в AD их фотографии:

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

С помощью следующего скрипта выгрузим фото всех пользователей из определенного контейнера (OU) в файл:

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  thumbnailPhoto установлена фотография

Get-ADUser -Filter * -properties thumbnailPhoto | ? {$_.thumbnailPhoto} | select Name

Второй запрос позволяет выбрать пользователей без фотографии:

Get-ADUser -Filter * -properties thumbnailPhoto | ? {(-not($_.thumbnailPhoto))} | select Name

Существует большое количество сторонних утилит, позволяющих в более удобном виде графических редакторов задавать фото для пользователей AD. Но, как правило, их функционал избыточен, да и риски использования стороннего ПО для редактирования AD довольно существенны. Тем более, все изменения можно с легкостью выполнять через PowerShell.

Еще записи по теме: Active Directory, PowerShell
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

Комментариев: 3

Оставить комментарий
  1. Денис | 04.10.2016

    CodeTwo Active Directory Photos (бесплатно и легко)
    Не благодарите :)

    Ответить
  2. Павел | 19.10.2016

    Добрый день!
    Подскажите как сделать: еобходимо в AD предоставить на нужную OU право «Write thumbnailPhoto» ???
    У меня есть задача, передать добавление фото сотруднику из кадров, это обычный доменный пользователь.

    Ответить
    • itpro | 19.10.2016

      Добрый!
      Можно через делегацию. Коротенько:
      ПКМ по нужному OU -> Delegate Control -> выбираете сотрудника/группу сотрудников отдела кадров -> Create a custom task to delegate -> тип объекта User objects -> Property specific — выбираете атрибут Write thumbnailPhoto

      Ответить
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.25MB/0.00105 sec