Завантаження фотографії користувача в 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
  • Завантаження фото користувача AD через Exchange Shell
  • Пакетний імпорт зображення в AD
  • Вивантаження фото користувача з Active Directory в файл

Установка фото користувача в 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))

Після виконання зазначених команд, в клієнтах Outlook, Lync, OWA та ін. Буде відображатися фото користувача, що зберігається в базі Active Directory (можливо знадобиться деякий час для завершення реплікації і поновлення GAL).

Завантаження фото користувача 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
[email protected], 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.