понедельник, 29 декабря 2014 г.

Пакетная загрузка фотографий в Active Directory

В большой организации не редкость, когда приходится общаться с коллегой, которого никогда не видел. После этого сталкиваешься с человеком лично и не понимаешь, кто он на самом деле. Outlook 2010 и Lync 2010 могут отображать фотографию контакта при ее наличии, поэтому присутствие фотографии в контакте будет очень кстати, чтобы избежать подобных неловкостей.

Подготовить и загрузить в Active Directory большое количество фотографий достаточно трудоемко. К счастью некоторые операции можно автоматизировать и выполнить в пакетном режиме.
Для начала надо подготовить файлы с фотографиями. Они обычно уже есть в кадровой службе, которая делает фотографии сотрудников для пропусков. Имена файлов надо привести к единому формату и разместить в одной директории.
Формат имени файла:    SAMAccountName точка JPG   или  SAMAccountName.JPG
Например:   s.ivanov.jpg
Как правило фотографии имеют большой размер и непригодны для загрузки в Active Directory. Рекомендуемый размер атрибута thumbnailPhoto, который нас интересует, составляет 96 на 96 пикселей и до 100 Кб. Конечно 100 Кб это много: для 1000 контактов база Active Directory увеличится на 100 Мб! Да и нет смысла делать такое высокое качество для маленькой иконки. Вполне подойдет фотография 96 на 96 пикселей с размером файла от 2 до 5 Кб.
Для пакетной обработки фотографий под формат thumbnailPhoto можно воспользоваться скриптом и утилитой из статьи
.\GALBatchConvert.ps1 -InputFolder .\Input -OutputFolder.\Output
Но прежде чем мне попался готовый вариант решения, я уже написал скрипт преобразования фотографии целиком на PowerShell. Скрипт не универсальный. Исходный формат фотографии был 1024 на 768. Поэтому скрипт сначала обрезает фотографию по бокам до размера 768 на 768, а потом уменьшает до размера 96 на 96.
Function Resize-Image
{
param(
[String]$InputFile,
[String]$OutputFile,
[int]$Width,
[int]$Height
)
[reflection.assembly]::LoadWithPartialName(«System.Drawing»)
$RectSrc=New-ObjectSystem.Drawing.Rectangle(128,0,768,768)
$OriginImage=[System.Drawing.Bitmap]::FromFile($InputFile)
$OriginImage1=$OriginImage.Clone($RectSrc,$OriginImage.PixelFormat)
$ResizedImage=New-ObjectSystem.Drawing.Bitmap@($Width,$Height)
$graphics=[System.Drawing.Graphics]::FromImage($ResizedImage)
$graphics.DrawImage($OriginImage1,0,0,$Width,$Height)
$graphics.Dispose()
$ResizedImage.Save($OutputFile,[System.Drawing.Imaging.ImageFormat]::Jpeg)
}
.\Resize-Image -InputFile ‘U:\Work\FOTO\s.ivanov.jpg’ -OutputFile ‘U:\Work\FOTO\s.ivanov.jpg-Width 96-Height 96
После этого остается загрузить в пакетном режиме фотографии в Active Directory. Т.к. имя файла совпадает с именем учетной записи, то работает следующий скрипт:
Import-Module ActiveDirectory
$path=«.\Output\*.jpg»
dir$path|foreach {

$photo=[byte[]](Get-Content$_.FullName -Encodingbyte)

Set-ADUser$_.BaseName -Replace @{thumbnailPhoto=$photo}

}

После перестройки адресных книг Exchange и Lync в них появятся ссылки на фотографии. И как только адресные книги загрузятся на клиенты, пользователи увидят фотографии в контактах.
Быстрая перенастройка адресных книг описана в статьях:
Надо добавить, что пользователи могут добавлять фотографии в локальные контакты – и они тоже будут отображаться в Outlook и Lync.
Приятного общения с коллегами! :-)

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

Отправить комментарий