Пакетная загрузка фотографий в 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 можно воспользоваться скриптом и утилитой из статьи

How to batch optimize your Exchange GAL Photos before importing to Active Directory:

.\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 в них появятся ссылки на фотографии. И как только адресные книги загрузятся на клиенты, пользователи увидят фотографии в контактах.

Быстрая перенастройка адресных книг описана в статьях:

Быстрое обновление OAB в Exchange 2010

Еще раз про быстрое обновление OAB в Exchange 2010

Быстрое обновление адресной книги Lync

Надо добавить, что пользователи могут добавлять фотографии в локальные контакты – и они тоже будут отображаться в Outlook и Lync.

Приятного общения с коллегами! :-)

Реклама

комментариев 5

  1. при выполнении последнего скрипта
    import-Module ActiveDirectory
    $path=«.\Output\*.jpg»
    dir$path|foreach {
    $photo=[byte[]](Get-Content$_.FullName -Encodingbyte)
    Set-ADUser$_.BaseName -Replace @{thumbnailPhoto=$photo}
    }
    ругается на токен.

    Неожиданный токен «Set-ADUser» в выражении или инструкции.
    строка:1 знак:82
    + dir$path|foreach {$photo=[byte[]](Get-Content$_.FullName -Encodingbyte)Set-ADUser <<<< $_.BaseName -Replace @{thumbn
    ailPhoto=$photo}}
    + CategoryInfo : ParserError: (Set-ADUser:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

    • Скорее всего «мусор» попал в текст: движок WP ломает. Загрузите в Powershell ISE и исправьте ошибки синтаксиса.

      • Добрый день! Запустил через ps ise

        Import-Module ActiveDirectory
        $path=’c:\photo\resize\*.jpg’
        dir $path|foreach {$photo=[byte[]](Get-Content$_.FullName -Encodingbyte) Set-ADUser$_.BaseName -Replace @{thumbnailPhoto=$photo}}

        выводит такое же сообщение:
        Неожиданный токен «Set-ADUser$_.BaseName» в выражении или инструкции.
        At line:3 char:74

      • Можете в архиве сам скрипт в статье выложить?

      • Там просто пробел съело — поправил.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: