http://winitpro.ru/index.php/2016/10/13/ad-photo-kak-avatara-polyzovatelya-windows/
Используем фото из AD в качестве аватарки пользователя Windows 10
13.10.2016
В этой статье мы покажем как с помощью групповых политик и PowerShell получить фотографию пользователя из Active Directory и использовать ее в качестве рисунка учётной записи пользователя Windows, которое отображается при входе в систему, на экране блокировки, в стартовом меню и т.д. Алгоритм должен работать следующим образом: при входе пользователя в систему, система должна получать картинку пользователя из атрибута thumbnailPhoto в Active Directory, сохранять ее на диск и задавать в качестве аватарки пользователя Windows. Решение должно одинаково работать на всех поддерживаемых клиентах: Windows 10, Windows 8 и Windows 7.

Импорт фотографий пользователей в 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
А затем на вкладке 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 и т.п.

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

Запуск 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

Важно. Скрипт SetADPicture.ps1 нужно предварительно скопировать в каталог netlogon\script\ на контроллере домене.
Осталось назначить политику на нужные OU, выполнить logoff и logon пользователя.

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