Використовуємо фото з 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.

зміст:

  • Імпорт фотографій користувачів в Active Directory
  • Надаємо користувачам права на зміну іконки профілю
  • PowerShell скрипт отримання фото користувача з AD і установки іконки профілю Windows
  • Запуск PowerShell скрипта для прив'язки фото до профілю через GPO

Імпорт фотографій користувачів в 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;
  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 тощо.

Прив'язка фотографій до профілю користувача здійснюється в гілці реєстру HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ AccountPicture \ Users \ SID користувача.

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

важливо. Скрипт 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 на цільових комп'ютерах використовуйте утиліту gpresult і статтю "Чому не застосовується GPO?".

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