Настройка и использование изображения в Exchange Server 2010


Введение

Эта статья посвящена атрибуту Thumbnailphoto, мы будем выгружать файлы фотографий пользователей в этот атрибут, и затем такие новые приложения, как Outlook 2010 и будущие приложения UC смогут использовать эту информацию для отображения рисунков пользователей.

Прежде чем начать процесс настройки и проверки, нам нужно проверить несколько следующих требований:

  • Атрибут ThumbnailPhoto ограничен до 102400 байт, то есть до 10КБ. Этот предел определяется в RangeUpper значении атрибута.
  • Формат файла JPG
  • Следует помнить, что информация направляется в Active Directory, а это означает, что она может повлиять на репликацию и размер NTDS базы данных
Настройка глобального каталога

Первым шагом процесса является настройка репликации атрибута в глобальный каталог (Global Catalog). Процесс довольно прост, и вы можете повторить следующие шаги:

  1. Войдите на контроллер домена
  2. Нажмите меню Пуск, Выполнить и введите regsrv32 schmmgmt.dll, а затем нажмите OK, как показано на рисунке 01

Рисунок 01

  1. У вас появится диалог, говорящий 'DllRegisterServer in schmmgmt.dll succeeded'. Просто нажмите OK.

Теперь, когда схема Active Directory Schema зарегистрирована, нам нужно открыть ее, чтобы настроить репликацию атрибута. Для этого нужно выполнить следующие шаги:

  1. Войдите в тот же сеанс, из которого выполнили предыдущие шаги
  2. Нажмите Пуск, Выполнить, введите mmc и нажмите OK
  3. Выберите меню Файл, а затем опцию Добавить или удалить оснастку (Add/Remove Snap-ins)'
  4. Нажмите на Active Directory Schema в разделе Доступные оснастки (Available snap-ins), а затем нажмите кнопку Добавить (Add >), как показано на рисунке 02. Нажмите OK.

Рисунок 02

  1. Разверните элемент Active Directory Schema [<Your-Server-Name>]
  2. Нажмите на Атрибуты (Attributes)
  3. Найдите атрибут thumbnailPhoto и дважды нажмите на нем
  4. Отметьте опцию Реплицировать этот атрибут в глобальный каталог (Replicate this attribute to the Global Catalog) и нажмите OK, как показано на рисунке 03.

 

Рисунок 03

Это все, что нам нужно в Active Directory, и теперь пришло время выгрузить файлы изображений в пользовательские атрибуты thumbnailphoto и начать проверять их.

Импортирование рисунков дисплея для пользователей Active Directory

Команда для импорта пользовательских изображений в Active Directory – это Import-RecipientDataProperty. Эта команда может использоваться для импорта изображений и аудио в атрибуты пользователей. В этой статье мы рассмотрим только работу с изображениями с помощью этой команды. Используемый синтаксис описан ниже и требует только двух компонентов информации от администратора: имя почтового ящика (Mailbox name) и путь к изображению.

Import-RecipientDataProperty -Identity <Mailbox> -Picture -FileData ([Byte[]]$(Get-Content -path <Picture Path > -Encoding Byte -ReadCount 0))

Процесс импортирования рисунка (C:\Photos\Anderson.jpg в этом примере) в объект другого пользователя (Anderson в этом примере) можно посмотреть на рисунке 04.

 

Рисунок 04

Простым способом проверки только что проделанной процедуры является проверка атрибута thumbnailphoto для предыдущего пользователя, и если он не пуст, мы знаем, что пользовательское изображение было выгружено. На рисунке 05 мы используем Active Directory Users and Computer в Windows Server 2008, который показывает страницу редактора атрибута (Attribute Editor), где можно проверить информацию.

Если вы используете Windows Server 2003, то можно установить инструмент Support Tools и затем проверить атрибут, используя ADSIEdit.msc. Если вы используете Windows Server 2008 или выше и не видите закладку Attribute Editor, нажмите в меню Вид (View), затем Дополнительные настройки (Advanced Features), и после этого попытайтесь проверить свойства пользователя еще раз.

 

Рисунок 05

Тестирование того, что мы уже сделали

Итак, атрибут настроен на репликацию, и мы только что выгрузили изображение пользователя. Теперь пришло время проверки! Outlook 2010 использует множество пользовательских рисунков, и мы сможем посмотреть их все. Вот пара примеров с изображениями:

  • Диалог списка глобальных адресов (Global Address List)
  • Стартовая страница Outlook (нажатие на кнопку Office), как показано на рисунке 06
  • Панель чтения (Reading pane)
  • Карта контактов (Contact card), как показано на рисунке 07
  • Запросы собраний (Meeting Requests)

 

Рисунок 06

 

Рисунок 07

Создание командного сценария для процесса выгрузки

Чтобы обеспечить процесс выгрузки изображений для одного или нескольких пользователей, я создал простой командный сценарий. Этот сценарий можно изменить в соответствии с вашими требованиями, не бойтесь его изменять, а если вам удастся его улучшить, пожалуйста, поставьте меня в известность :). Этот сценарий выполняет некоторые тесты, такие как проверка пути и размера изображения.

Прежде чем использовать сценарии, давайте сначала рассмотрим некоторые ключевые моменты их функциональности:

  • Сценарий основан на именах файлов JPG. Имя пользователя и имя файла должны совпадать, например: Anderson (почтовый ящик) и anderson.jpg (файл) отлично подойдет
  • Стандартная папка, которую сценарий использует для расположения JPG файлов - это C:\Photos. Это можно изменить, отредактировав сценарий и изменив переменную $DefaultPhotoPath
  • Если не все предварительные требования будут удовлетворены, сценарий завершит работу без выполнения каких-либо действий в Active Directory
  • Выполнение сценария в Exchange Management Shell

Итак, давайте испытаем сценарий для одного пользователя. Прежде всего, давайте убедимся, что у нас есть JPG с именем пользователя в папке (C:\Photos). Выполняем следующий синтаксис:

.\UploadPhoto.ps1 <mailbox-name>

После проверки пути и размера рисунка сценарий выгрузит файл в Active Directory, как показано на рисунке 08

 

Рисунок 08

Я также создал ключ 'all для сценария, благодаря которому сценарий перечислит все JPG файлы в стандартной папке на основе имени файлов, и выгрузит их в Active Directory User. На рисунке 09 я выполнил сценарий, и у меня было два файла (anderson.jpg и Lidiana.jpg), в результате пользователи anderson и lidiana были обновлены соответственно.

 

Рисунок 09

Наконец, вот копия сценария, показанного выше:

param([Switch]$all, [String]$UserName)
#Значения по умолчанию. Можно изменять их в соответствии с вашими требованиями. $DefaultPhotoPath = 'C:\Photos' 
Function CheckPhoto(){ Write-Warning "Validating file(s).."  Write-Host "File exists... " -nonewline If (Test-Path $PhotoPath)
{ Write-Host "[OK]" -ForeGroundColor Green Write-host "Photo size... " -nonewline $PhotoSize = Get-ChildItem $PhotoPath | select Length
If ($PhotoSize.Length -le 10000) { Write-Host "[OK]" -ForeGroundColor Green } Else { Write-Host "[Fail]" -ForeGroundColor Red; exit } }
Else { Write-Host "[Fail]" -ForeGroundColor Red Exit }}
Function UploadAll(){ ForEach ($TempFile in Get-ChildItem $DefaultPhotoPath | Where-Object { $_.Extension -eq ".jpg" } )
 {  $TempUserName = $TempFile.Name.sub string(0, $TempFile.Name.Length - 4)  Write-Host $TempUserName -ForeGroundColor Yellow –NoNewLine
Import-RecipientDataProperty -Identity $TempUserName -Picture –FileData
([Byte[]]$(Get-Content -path $TempFile.Fullname -Encoding Byte -ReadCount 0))
 Write-Host "[Done]" -ForeGroundColor Green }}
If ( $all -eq $true)  {  Write-Warning "
## Это действие выгрузит все рисунки из папки  C:\Photos в объекты пользователей AD." Write-Warning "
 ## Все изображения должны иметь те же имена, что и имена пользователей"
 Write-Warning "Вы уверены, что хотите выгрузить рисунки в объекты пользователей (Да/Нет)?"
 $Opt = Read-Host  If ( $Opt -eq 'y' ) { UploadAll; } Else { Write-Host "No changes were made."; Exit } }
Else { $PhotoPath = $DefaultPhotoPaty + $UserName + '.jpg' CheckPhoto; If ( $AbortMission -eq '$true' )
{ Write-Error "Please, review the errors and try again." }
Else { Import-RecipientDataProperty -Identity $UserName -Picture –FileData
([Byte[]]$(Get-Content -path $PhotoPath -Encoding Byte -ReadCount 0)) }  }
Как манипулировать рисунками с помощью C#

Если вы не хотите использовать сценарий или команду для работы с атрибутом thumbnailphoto, вы всегда можете создать собственное приложение для этой цели. Есть статья в базе знаний Microsoft KB под названием How to Manipulate the ThumbNailPhoto Attribute of a User Object in the Active Directory, и ее можно найти по следующему адресу http://support.microsoft.com/kb/292029. В этой статье есть образец приложения C#, позволяющего манипулировать этим атрибутом.

Как удалять текущую картинку?

Итак, мы достаточно поработали над выгрузкой изображений в Active Directory, но в определенный момент вам понадобится удалить изображение, не так ли? На самом деле есть пара простых способов удаления рисунка из пользовательского объекта.

Первый, о котором вы, возможно, догадались, это переход в свойства пользователя и очистка значения атрибута ThumbnailPhoto. Этот способ отлично работает.

Первый способ хорош, однако есть и второй вариант, более элегантный, мы можем использовать команду Set-Mailbox с ключом 'RemovePicture, синтаксис которой показан ниже:

Set-Mailbox <Mailbox> -RemovePicture

Заключение

В этой статье мы рассмотрели процесс того, как настраивать и отправлять фотографии конечным пользователям. Этот сценарий является только начальной точкой. Вы можете модифицировать этот сценарий в соответствии со своими требованиями или создавать собственные сценарии, которые позволят конечным пользователям обновлять их личные изображения.

Пример использования этого сценария позволил конечными пользователям сохранять собственные фотографии в папки общего доступа (они могут просто копировать и вставлять изображения в папку общего доступа, или в веб приложение, которое позволяет им отображать эти рисунки), а затем использовать задачи планировщика задач или что-то подобное, чтобы выполнять uploadphotos.ps1 'all to update the display image to the Active Directory.

Дополнительная информация:

ThumbnailPhoto атрибут на MSDN

Автор: Андерсен Патрисио (Anderson Patricio)

 

Патрисио Андерсен специалист в области технологий Microsoft. Основная деятельность Патрисио связана с серверами Exchange, ISA а также с Active Directory. Работая ведущим консультантом с Золотым партнером Microsoft в Бразилии, он так же ведет тематичесские блоги, публикует новости и пишет статьи.

Источник: http://www.Redline-Software.com

Возникли вопросы?

Обращайтесь на форум!

Comments (3)

  1. Atc says:

    102400b = 100KB

  2. alex Egorychev says:

    Не работает ваш метод.
    Фото загружено и в параметр ThumbnailPhoto, и в JpegPhoto, но не отображается в Outlook 2010/2013

  3. Danila A Nikonov says:

    Подтверждаю, не работает этот метод.

Skip to main content