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

Outlook, SharePoint, Office365 и Skype for Business позволяют использовать фотографию текущего залогиненого пользователя из Active Directory (Azure AD) в качестве аватары пользователя в своем интерфейсе. В этой статье мы покажем, как с помощью групповых политик и PowerShell использовать фотографию пользователя Active Directory в качестве рисунка профиля пользователя Windows 10, который отображается на экране приветствия, блокировки, в стартовом меню и т.д.

Наш скрипт будет работать следующим образом: при входе пользователя в систему, должен запускаться скрипт, который получает фото пользователя из атрибута thumbnailPhoto в Active Directory, сохранять файл изображения на диск и устанавливает этот файл в качестве аватарки профиля пользователя Windows. Решение должно одинаково работать на всех поддерживаемых клиентах: Windows 10 (8.1/7) и на RDSH северах с Windows Server 2016/2012 R2.

фото (аватарка) профиля пользователя windows10 из active directory

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

В первую очередь нужно для пользователей AD установить фотографии, загрузив их в специальный атрибут thumbnailPhoto учетной записи.  Вы можете установить фото пользователям с помощью сторонних программ, или с помощью модуля ActiveDirectory для Windows PowerShell (размер файла с фотографией должен быть не более 100 Кб и разрешением до 96×96 пикселей):

$photo = [byte[]](Get-Content C:\PS\divanov_photo.jpg -Encoding byte)
Set-ADUser divanov -Replace @{thumbnailPhoto=$photo}

Подробности об использовании PowerShell для управления фото в AD смотрите в статье: Загрузка фотографии пользователя в Active Directory.

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

В Windows 10 информация об картинке аккаунта (путь к картинке, использующейся для профиля пользователя) хранится в системной ветке реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users. Чтобы пользователи без прав администратора могли внести изменения, нужно предоставить им права на запись в этот раздел реестра.

  1. Проще всего раздать права на реестр через групповые политики. Для этого создайте новую политику и привяжите ее к OU с компьютерами пользователей;
  2. Затем перейдите в раздел Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Registry и создайте новый ключ реестра (Add key) с путем MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users;Ветка реестра AccountPicture Users
  3. Затем на вкладке Security нужно предоставить право Full Control для всех пользователей домена (группа [DomainName]\Users) и нажмите ОК;
  4. В следующем диалоговом окне выберите Replace Existing permission on all sub keys with inheritable permissions, иначе у пользователей не будет прав на вложенные ветки реестра;Права на ветку для доменных пользователей

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

Далее нам понадобится PowerShell скрипт, который должен получить фото текущего пользователя из Active Directory, сохранить его в jpg файл и установить его в качестве иконки профиля пользователя. Есть два варианта получения фото из AD: с помощью командлета Get-ADUser из модуля ActiveDirectory (этот модуль должен быть установлен на всех компьютерах через RSAT, или достаточно скопировать необходимые файлы модуля RSAT-AD-PowerShell без установки RSAT). Чтобы скрипт был универсальным и корректно работал в том числе на Windows 7, мы не будем использовать модуль RSAT-AD-PowerShell, а обратимся к AD через класс ADSISearcher.

Пример скрипта SetADPicture.ps1 для получения фото пользователя из AD и установки его в качестве аватары аккаунта Windows представлен ниже:

[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:\Users\Public\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 текущего пользователя из Active Directory AD и сохраняет фото в каталог C:\Users\Public\AccountPictures\{SID пользователя}. В каталоге будут содержаться графические файлы с разными разрешениями (от 32×32 до 448×448 пикселя) под разные форматы элементов интерфейса Windows 10: image32.jpg, image40.jpg и т.п.

картинки для профиля пользователя windows 10

Привязка фотографий к профилю пользователя осуществляется в ветке реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{SID пользователя}.

reestr HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users фото для профиля пользователя

Запуск PowerShell скрипта для привязки фото к профилю через GPO

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

Для этого в ранее созданной ранее политики в разделе User Configuration -> Policies -> 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 пользователя.

В настройках политики включите режим обработки замыкания GPO (Computer Configuration -> Administrative Templates -> System -> Group Policy -> Configure user Group Policy Loopback Processing mode = Merge). В этом режиме можно применять политику к OU с пользователями.gpo- включите режим обработки замыкания GPO

Для диагностики применения GPO на целевых компьютерах используйте утилиту gpresult и статью “Почему не применяется GPO?”.

windows 10 картинка для аккаунта пользователя полученная из AD

После этого пользователю Windows 10 будет назначена аватарка из AD, и она начнет корректно отображаться в качестве рисунка учетной записи пользователя в стартовом меню, на экране входа в систему и других окнах. Инструкция по назначению фотографии профиля работает нормально и протестирована в Windows 10 LTSC (1809).


Предыдущая статья Следующая статья


Комментариев: 24 Оставить комментарий

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

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

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