Загрузка фотографий в Active Directory Win2k8R2

17.07.2013 - 10:09

Наконец-то у меня появился полноценный материал, который не взят всецело с других ресурсов (что мешало мне высветить вопрос).
Итак, суть задачи: поместить фотографии в Active Directory для автоматического отображения в Exchange 2010/2013 и Lync 2010/2013.
Требования к выполнению задачи:

  • Размер фотографии до 10Кб
  • ОС контроллера домена - Windows Server 2008 R2. На самом деле, спорный вопрос, так как скрипт можно выполнить на другой машине, где будет присутствовать PowerShell 2.0 и компонент RSAT ADDS, но этот вариант я не проверял.
  • Язык PowerShell 2.0
  • Возможность автоматизации помещения фотографий в AD

Для выполнения последней задачи ТЗ был разработан алгоритм:

  1. Есть некий каталог Temp, где помещаются фотографии необходимого размера. Имя файла-фотографии = SamAccountName пользователя в домене.
  2. Скрипт запускается автоматически с помощью ежедневной задачи.
  3. Проходит по каждой фотографии в каталоге и по имени файла находит пользователя, у которого проверяет поле thumbnailPhoto.
  4. Если поле thumbnailPhoto пустое - записывает фотографию.
  5. Ведёт лог выполненных действий.

Сам скрипт:
Указываем адрес каталога с фотографиями, как параметр.

param($Path)
$count = 0

Строчка ниже генерирует адрес и имя лог-файла: получает каталог, в котором находится выполняемый скрипт + получает имя выполняемого скрипта + добавляет расширение.

$log = [io.path]::GetDirectoryName($MyInvocation.MyCommand.Path)+ "\" +[io.path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Path)+".log"
Out-File -FilePath $log -InputObject (Get-Date -Format "
dd-MM-yyy") -Encoding utf8 -Append

Импортируем модуль Active Directory.

if (!(Get-Module -Name ActiveDirectory))
    {
        # Включить модуль
        import-module ActiveDirectory
    }

Проверяем наличие каталога, который указан, как источник фотографий.

if($Path -eq $null)
{
    Out-File -FilePath $log -InputObject "Enter User Photo Path. Program will be terminated." -Encoding utf8 -Append
    exit
}

Записываем содержимое (имена файлов) в массив.

$DIR = [IO.Directory]::GetFiles($Path)

Проводим действие для каждого файла в каталоге:

  1. Отсеиваем вспомогательные файлы с учётом того, что расширение всех фотографий - jpg (чтобы отсеять файлы типа thumbs.db и т.д.)
  2. Проверяем размер файла (не более 10Кб)
  3. Проводим поиск пользователя в AD по имени файла-фотографии.
  4. Если поле для фотографии (thumbnailPhoto) пустое - хэшируем фотографию и записываем в поле
  5. Ведём счётчик изменений. Если изменений нет - записываем в лог "Изменения не были произведены."

foreach($File in $DIR)
{
    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.txt1.89 кб
Ваша оценка: Нет Средняя: 2.7 (3 голосов)