Серед атрибутів користувача, починаючи з версії схеми 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.