четверг, 31 мая 2012 г.

Импорт фото в AD


Сохранение фотографий пользователей в AD

Наткнулся на статью о сохранении фотографий пользователей в GAL.
Штука довольно удобная, например для территориально распределенных компаний появляется возможность посмотреть с кем именно вы ведете переписку.
Для Exchange 2010 существует коммандлет Import-RecipientDataProperty который предназначен для загрузки небольших фотографий до 10 кб с рекомендованным разрешением 96 на 96 точек (при большом желании фотография сжимается до 2-3 кб).

Если заглянуть поглубже в Active Directory то там существует атрибут Picture (по классификации ldapDisplayName: thumbnailPhoto) для размещения фотографий. Его мы и будем мучать в приведенном ниже скрипте.
При неимении установленного Exchange 2010, например есть Exchange 2007 и клиенты к нему Outlook 2010, вы можете автоматизировать процесс загрузки фотографий следующим скриптом.
$folder = "D:\ADPhotos\"
$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$root = $domain.GetDirectoryEntry()
$search = [System.DirectoryServices.DirectorySearcher]$root
$search.Filter = "(&(objectCategory=Person)(objectClass=User))"
$search.FindAll() | foreach {
$user = [adsi]$_.path
$accountName = $user.psbase.Properties["samaccountname"]
$jpgfile = "$folder$accountName.bmp"
if(!(test-path $jpgfile)){
write-host "User $($accountName) – image not found."
} else {
[byte[]]$jpg = Get-Content $jpgfile -encoding byte
$user.put("thumbnailPhoto",  $jpg)
$user.setinfo()
Write-Host "User $($accountName) – updated."
}
}
В переменной $folder задается папка откуда берутся фотографии заданные в формате
логин_пользователя.bmp
Если необходимо поменять фильтр для поиска, в данном примере поиск идет для всех учетных записей пользователей, поменяйте строку
$search.Filter = «(&(objectCategory=Person)(objectClass=User))»
на необходимую.

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

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