В большой организации не редкость, когда приходится общаться с коллегой, которого никогда не видел. После этого сталкиваешься с человеком лично и не понимаешь, кто он на самом деле. 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.
Приятного общения с коллегами! :-)
Filed under: Active Directory, Exchange, Lync |
при выполнении последнего скрипта
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
Можете в архиве сам скрипт в статье выложить?
Там просто пробел съело — поправил.
А как изменить скрипт так, чтобы пользователей перебирать по атрибуту Name или displayName, имя фото = этим атрибутам.