Загрузка фотографий в Active Directory Win2k8R2
Наконец-то у меня появился полноценный материал, который не взят всецело с других ресурсов (что мешало мне высветить вопрос).
Итак, суть задачи: поместить фотографии в Active Directory для автоматического отображения в Exchange 2010/2013 и Lync 2010/2013.
Требования к выполнению задачи:
- Размер фотографии до 10Кб
- ОС контроллера домена - Windows Server 2008 R2. На самом деле, спорный вопрос, так как скрипт можно выполнить на другой машине, где будет присутствовать PowerShell 2.0 и компонент RSAT ADDS, но этот вариант я не проверял.
- Язык PowerShell 2.0
- Возможность автоматизации помещения фотографий в AD
Для выполнения последней задачи ТЗ был разработан алгоритм:
- Есть некий каталог Temp, где помещаются фотографии необходимого размера. Имя файла-фотографии = SamAccountName пользователя в домене.
- Скрипт запускается автоматически с помощью ежедневной задачи.
- Проходит по каждой фотографии в каталоге и по имени файла находит пользователя, у которого проверяет поле thumbnailPhoto.
- Если поле thumbnailPhoto пустое - записывает фотографию.
- Ведёт лог выполненных действий.
Сам скрипт:
Указываем адрес каталога с фотографиями, как параметр.
$count = 0
Строчка ниже генерирует адрес и имя лог-файла: получает каталог, в котором находится выполняемый скрипт + получает имя выполняемого скрипта + добавляет расширение.
Out-File -FilePath $log -InputObject (Get-Date -Format "dd-MM-yyy") -Encoding utf8 -Append
Импортируем модуль Active Directory.
{
# Включить модуль
import-module ActiveDirectory
}
Проверяем наличие каталога, который указан, как источник фотографий.
{
Out-File -FilePath $log -InputObject "Enter User Photo Path. Program will be terminated." -Encoding utf8 -Append
exit
}
Записываем содержимое (имена файлов) в массив.
Проводим действие для каждого файла в каталоге:
- Отсеиваем вспомогательные файлы с учётом того, что расширение всех фотографий - jpg (чтобы отсеять файлы типа thumbs.db и т.д.)
- Проверяем размер файла (не более 10Кб)
- Проводим поиск пользователя в AD по имени файла-фотографии.
- Если поле для фотографии (thumbnailPhoto) пустое - хэшируем фотографию и записываем в поле
- Ведём счётчик изменений. Если изменений нет - записываем в лог "Изменения не были произведены."
{
if(([io.path]::GetExtension($File)) -eq ".jpg")
{
if(((Get-Item $File).length) -gt 10kb)
{
Out-File -FilePath $log -InputObject "Photo | $File | too large, try another one less than 10kb. Start working with the next picture." -Encoding utf8 -Append
}
else
{
$FileName = [io.path]::GetFileNameWithoutExtension($File)
if((Get-ADUser -Identity $FileName -Properties thumbnailPhoto).thumbnailPhoto -eq $null)
{
Out-File -FilePath $log -InputObject "User $FileName has no photo. Starting write value." -Encoding utf8 -Append
$Photo = [byte[]](Get-Content $File -Encoding byte)
Set-ADUser -Identity $FileName -Replace @{thumbnailPhoto=$Photo}
Out-File -FilePath $log -InputObject "User $FileName was edited, please check." -Encoding utf8 -Append
$count = 1
}
}
}
else
{
Out-File -FilePath $log -InputObject "Photo | $File | is not a picture. Start working with the next file." -Encoding utf8 -Append
}
}
if($count -eq 0)
{
Out-File -FilePath $log -InputObject "No changes has been done." -Encoding utf8 -Append
}
Данный скрипт без комментариев размещён во вложении. Необходимо сменить расширение файла с txt на ps1, так как размещать скрипты на сайте запрещено политикой.
Прикрепленный файл | Размер |
---|---|
InsertUserPhotoToAD.txt | 1.89 кб |
- Войдите на сайт для отправки комментариев
- Версия для печати