bga68 (bga68) wrote,
bga68
bga68

Categories:

Фото пользователя из AD в качестве Picture-Login пользователя Windows 10

Фото пользователя из AD в качестве рисунка учётной записи пользователя Windows 10

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

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

Содержание:


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

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

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

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



Импорт фотографий пользователей в 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 после следующего входа в систему.

 
 
Tags: account, avatar, picture-login, user, username, windows, аватар, фото пользователя
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments