Используем фото из AD в качестве аватарки пользователя Windows 10 | Windows для системных администраторов

Используем фото из AD в качестве аватарки пользователя Windows 10

В этой статье мы покажем как с помощью групповых политик и PowerShell получить фотографию пользователя из Active Directory и использовать ее в качестве рисунка учётной записи пользователя Windows, которое отображается при входе в систему, на экране блокировки, в стартовом меню и т.д. Алгоритм должен работать следующим образом: при входе пользователя в систему, система должна получать картинку пользователя из атрибута thumbnailPhoto в Active Directory, сохранять ее на диск и задавать в качестве аватарки пользователя Windows. Решение должно одинаково работать на всех поддерживаемых клиентах: Windows 10, Windows 8 и Windows 7.

windows 10 фото пользователя из active directory

Импорт фотографий пользователей в Active Directory


Итак, в первую очередь необходимо для всех пользователей AD установить фотографии, загрузив их в  специальный атрибут thumbnailPhoto каждого пользователя .  Как это сделать с помощью скриптов PowerShell мы подробно разбирали в статье: Загрузка фотографии пользователя в Active Directory

Предоставляем пользователям права на смену иконки профиля


Чтобы пользователи без прав администратора могли вносить изменения в ветку реестра, в которой  задается путь к картинке профиля пользователя, необходимо предоставить им права на ветку реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users

Проще всего предоставить эти права через групповые политики. Для этого создайте новую политику и привяжите ее к OU с компьютерами пользователей.

Затем перейдите в раздел  Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Registry и создайте новый ключ (Add key) с путем MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users

Ветка реестра AccountPicture UsersА затем на вкладке Security нужно предоставить право Full Control для всех пользователей домена (группа [DomainName]\Users) и нажмите ОК. В следующем диалоговом окне выберите Replace Existing permission on all sub keys with inheritable permissions, иначе у пользователей не будет прав на вложенные ветки.

Права на ветку для доменных пользователей

Скрипт, получения фото пользователя из AD и установки иконки профиля

Далее нам понадобится  скрипт, который бы загружал фото текущего пользователя из Active Directory, сохранял его в jpg файл и задавал его в качестве иконки профиля пользователя. Т.к. скрипт должен быть универсальным и работать, в том числе, и на Windows 7, мы не можем использовать командлет Get-ADUser из модуля ActiveDirectory. Придется обращаться к AD через тип ADSISearcher.

Пример скрипта SetADPicture.ps1 ниже:

[CmdletBinding(SupportsShouldProcess=$true)]Param()
function Test-Null($InputObject) { return !([bool]$InputObject) }
$ADuser = ([ADSISearcher]"(&(objectCategory=User)(SAMAccountName=$env:username))").FindOne().Properties
$ADuser_photo = $ADuser.thumbnailphoto
$ADuser_sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
If ((Test-Null $ADuser_photo) -eq $false) {
$img_sizes = @(32, 40, 48, 96, 192, 200, 240, 448)
$img_mask = "Image{0}.jpg"
$img_base = "C:\ProgramData\AccountPictures"
$reg_base = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{0}"
$reg_key = [string]::format($reg_base, $ADuser_sid)
$reg_value_mask = "Image{0}"
If ((Test-Path -Path $reg_key) -eq $false) { New-Item -Path $reg_key }
Try {
ForEach ($size in $img_sizes) {
$dir = $img_base + "\" + $ADuser_sid
If ((Test-Path -Path $dir) -eq $false) { $(mkdir $dir).Attributes = "Hidden" }
$file_name = ([string]::format($img_mask, $size))
$path = $dir + "\" + $file_name
Write-Verbose " saving: $file_name"
$ADuser_photo | Set-Content -Path $path -Encoding Byte -Force
$name = [string]::format($reg_value_mask, $size)
$value = New-ItemProperty -Path $reg_key -Name $name -Value $path -Force
}
}
Catch {
Write-Error "Check permissions to files or registry."
}
}

Скрипт получает значение атрибута thumbnailphoto текущего пользователя в AD и сохраняет фото в каталог C:\ProgramData\AccountPictures\{SID пользователя}. В каталоге будут содержаться файлы с фото под разные форматы: image32.jpg,  image40.jpg и т.п.

AccountPictures  - каталог с аватарками пользователя

В ветке реестра HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{SID пользователя} содержится привязка сохранённых фото с изображениями профиля.

User-AccountPicture

Запуск PowerShell скрипта через GPO

Теперь нам нужно, чтобы скрипт SetADPicture.ps1 отрабатывал при входе пользователя в систему. Проще всего это реализовать через логон скрипт группой политики.

Для этого в ранее созданной политике в разделе User Configuration -> Policiles -> Windows Settings ->Scripts (Logon/Logoff), создадим новый Logon скрипт, запускающий наш PowerShell скрипт:

Исполняемый файл: %windir%\System32\WindowsPowerShell\v1.0\powershell.exe

Параметры скрипта: -Noninteractive -ExecutionPolicy Bypass -Noprofile -File %logonserver%\netlogon\script\SetADPicture.ps1

Запуск powershell скрипта через логон скрипт групповой политики

Важно. Скрипт SetADPicture.ps1 нужно предварительно скопировать в каталог netlogon\script\ на контроллере домене.

Осталось назначить политику на нужные OU, выполнить logoff и logon пользователя.

windows 10 аватара стартового менюПользователю будет назначена аватарка, и она начнет корректно отображаться в качестве рисунка учетной записи пользователя Windows после следующего входа в систему.

Еще записи по теме: Active Directory, Windows 10
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

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

Оставить комментарий
  1. Антон | 14.10.2016

    Фотография пользователя на экране приветствия просто здоровская штука! Все по полочкам разложили, отлично!
    Вот только чтобы более менее качественное фото отображалось, нужно в AD грузить фото с разрешением не меньше 150×150 px. 96×96 смотрится куцо.

    Ответить
  2. Денис | 14.10.2016

    А у меня только папка создается AccountPictures, но она пустая… не пойму, в чем дело.

    Ответить
    • Денис | 14.10.2016

      Если даже быть точнее: $path содержит в себе путь, включая файл.
      и даже S-1… скрытая папка имеется в AccountPictures
      но вот файл этот не сохраняется в папке.
      $path
      C:\ProgramData\AccountPictures\S-1-5-21-1127646421-3318506029-1329146387-3274\Image448.jpg
      ХЭлп

      Ответить
      • Денис | 14.10.2016

        Не очень понял причину, но скрипт таки отработал и фотки появились… Не понимаю этой странности.
        Но спасибо, за статью!

        Ответить
  3. Sasha Odarchuk | 14.10.2016

    А если у юзера нет фото в АД — что будет ? Или такие юзеры «игнорируются» ?

    Ответить
    • itpro | 17.10.2016

      Игнорируются. В скрипте выполняется проверка на наличие данных в атрибуте thumbnailPhoto:
      If ((Test-Null $ADuser_photo) -eq $false)

      Ответить
  4. Дмитрий | 20.10.2016

    А на Windows 7 это точно работает? В реестре все создалось, в папке фото тоже все есть. Но аватарка не меняется.

    Ответить
  5. Anton | 14.11.2016

    Доброго времени суток. У меня то же возникла проблема на Win 7Скрипт отрабатывает, но фото не появляется, и папки programm Data нету. Можете подсказать как быть?

    Ответить
  6. Sasha Odarchuk | 25.11.2016

    А на терминальном севрере (Windows 2016) работает сабж ??

    Ответить
    • itpro | 29.11.2016

      Не пробовал. Теоретически схема рабочая для всех версий Windows.
      Если получится — поделитесь результатом!

      Ответить
      • Руслан | 03.12.2016

        На 10 и 2012 и 2016 все работает, спасибо) Но вот в 2008 нет, папка с фотками создается, а вот в реестре такой ветки вообще нет… Хотелось бы и там, много пользователей по RDP работают на 2008. А так все отлично, написано просто и понятно, да и статей то кроме этой больше не нашел, так что за труды еще большое спасибо)

        Ответить
  7. Руслан | 05.12.2016

    Да и на 7 тоже не работает, так же как на 208 нет ветки в реестре, если создаю руками ее, то вроде все подгружается но картинка все равно не отображается, может для 7 и 2008 где то в другое место надо указывать…

    Ответить
  8. Никита | 06.12.2016

    Здравствуйте. После применения политики со скриптом отваливается все приложения win10 вместе с пуском. Найти решение не смог. Иногда, в половине случаев, помогает только полная подмена ветки SOFTWARE реестра из RegBack. Перепробовал кучу способов из интернета. Версия вин10 не влияет. Сервер 2008. Нет ни у кого способа решения проблемы?

    Ответить
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.26MB/0.00156 sec