Использование фотографии пользователя Active Directory в качестве образа входа в учетную запись в Windows

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

Для этой задачи мы будем использовать небольшой сценарий входа в систему PowerShell. Сценарий должен запускаться при входе пользователя в Windows, получать фотографию пользователя из Active Directory (атрибут thumbnailPhoto) и устанавливать ее в качестве изображения профиля пользователя Windows.

фотография учетной записи windows из рекламы миниатюраФото учетная запись windows изображение из рекламы thumbnailPhoto

Как добавить фотографии для пользователей Active Directory?

Фотография пользователя хранится в специальном атрибуте (thumbnailPhoto) учетной записи в Active Directory. Вы можете установить изображения для своих пользователей с помощью инструментов сторонних производителей или команды Set-ADUser из модуля Active Directory для Windows PowerShell.

  1. Сохраните фотографию пользователя на диск в формате JPEG/BMP (максимальный размер файла изображения аватара не должен превышать 100 КБ, а разрешение изображения — 96×96 пикселей);
  2. Для того чтобы установить изображение учетной записи AD для пользователя jchan, выполните команды:
    $photo = [byte[]](Get-Content C:\PS\jchan_photo.jpg -Encoding byte)
    Set-ADUser jchan -Replace @{thumbnailPhoto=$photo}
  3. Откройте консоль Active Directory Users and Computers (ADUC), переключитесь на вкладку Attribute Editor и проверьте, содержит ли теперь атрибут thumbnailPhoto значение.установка атрибута thumbnailPhoto для учетной записи пользователя Active Directoryустановить атрибут thumbnailPhoto для учетной записи пользователя active directory
Подробнее о том, как управлять фотографиями пользователей в AD, читайте в статье «Как добавить или обновить фотографию пользователя в Active Directory?».

Создание GPO для применения изображения профиля учетной записи в Windows

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

  1. Откройте консоль управления групповой политикой (gpmc.msc). Создайте новый GPO и привяжите его к OU (организационной единице), содержащей компьютеры пользователей;
  2. В Windows вы можете установить изображение аватара пользователя (путь к JPG-файлу, используемому для профиля пользователя) с помощью ключа реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users. Вам нужно разрешить пользователям изменять фотографию профиля непосредственно через реестр;
  3. Разрешения ключа реестра можно развернуть в домене AD с помощью GPO. Перейдите в раздел GPO Конфигурация компьютера -> Политики -> Параметры Windows -> Параметры безопасности -> Реестр. Создайте новый ключ реестра (Добавить ключ) с путем MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users;Ключ реестра AccountPicture через GPOКлюч реестра AccountPicture через GPO
  4. Грант Полный контроль разрешения для группы пользователей домена ([DomainName]\Users) на экране Безопасность базы данных;
  5. В следующем окне выберите опцию Заменить существующее разрешение на все подзамки на наследуемые разрешения, иначе у пользователей не будет прав на вложенные подзамки реестра;установка разрешений реестра с помощью GPOустановка разрешений реестра с помощью GPO
  6. Включите опцию GPO Настройка режима обработки шлейфа групповой политики пользователя = Объединить (Конфигурация компьютера -> Административные шаблоны -> Система -> Групповая политика). Это позволит применить политику к OU с учетными записями компьютеров.gpo - включение режима обработки обратной петлиgpo - включить режим обработки обратного шлейфа

Установка фото профиля учетной записи пользователя в Windows с помощью PowerShell

Далее вам нужно создать сценарий PowerShell, который будет получать фотографию текущего пользователя из Active Directory, сохранять ее в JPG-файл и устанавливать в качестве изображения профиля пользователя.

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

SetADPicture.ps1 код сценария:

Function ResizeImage {
Param (
[Parameter(Mandatory = $True, HelpMessage = "image in byte")]
[ValidateNotNull()]
$imageSource,
[Parameter(Mandatory = $true, HelpMessage = "Betwwen 16 and 1000")]
[ValidateRange(16, 1000)]
$canvasSize,
[Parameter(Mandatory = $true, HelpMessage = "Between 1 and 100")]
[ValidateRange(1, 100)]
$ImgQuality = 100
)
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$imageBytes = [byte[]]$imageSource
$ms = New-Object IO.MemoryStream($imageBytes, 0, $imageBytes.Length)
$ms.Write($imageBytes, 0, $imageBytes.Length);
$bmp = [System.Drawing.Image]::FromStream($ms, $true)
# Image size after conversion
$canvasWidth = $canvasSize
$canvasHeight = $canvasSize
# Set picture quality
$myEncoder = [System.Drawing.Imaging.Encoder]::Quality
$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
$encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($myEncoder, $ImgQuality)
# Get image type
$myImageCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object { $_.MimeType -eq 'image/jpeg' }
# Get aspect ration
$ratioX = $canvasWidth / $bmp.Width;
$ratioY = $canvasHeight / $bmp.Height;
$ratio = $ratioY
if ($ratioX -le $ratioY) {
$ratio = $ratioX
}
# Create an empty picture
$newWidth = [int] ($bmp.Width * $ratio)
$newHeight = [int] ($bmp.Height * $ratio)
$bmpResized = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
$graph = [System.Drawing.Graphics]::FromImage($bmpResized)
$graph.Clear([System.Drawing.Color]::White)
$graph.DrawImage($bmp, 0, 0 , $newWidth, $newHeight)
# Create an empty stream
$ms = New-Object IO.MemoryStream
$bmpResized.Save($ms, $myImageCodecInfo, $($encoderParams))
# cleanup
$bmpResized.Dispose()
$bmp.Dispose()
return $ms.ToArray()
}
$ADUserInfo = ([ADSISearcher]"(&(objectCategory=User)(SAMAccountName=$env:username))").FindOne().Properties
$ADUserInfo_sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
If ($ADUserInfo.thumbnailphoto) {
$img_sizes = @(32, 40, 48, 96, 192, 200, 240, 448)
$img_base = "C:\Users\Public\AccountPictures"
$reg_key = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\$ADUserInfo_sid"
If ((Test-Path -Path $reg_key) -eq $false) { New-Item -Path $reg_key } { write-verbose "Reg key exist [$reg_key]" }
Try {
ForEach ($size in $img_sizes) {
$dir = $img_base + "\" + $ADUserInfo_sid
If ((Test-Path -Path $dir) -eq $false) { $(New-Item -ItemType directory -Path $dir).Attributes = "Hidden" }
$file_name = "Image$($size).jpg"
$path = $dir + "\" + $file_name
Write-Verbose " Crete file: [$file_name]"
try {
ResizeImage -imageSource $($ADUserInfo.thumbnailphoto) -canvasSize $size -ImgQuality 100 | Set-Content -Path $path -Encoding Byte -Force -ErrorAction Stop
Write-Verbose " File saved: [$file_name]"
}
catch {
If (Test-Path -Path $path) {
Write-Warning "File exist [$path]"
}
else {
Write-Warning "File not exist [$path]"
}
}
$name = "Image$size"
try {
$null = New-ItemProperty -Path $reg_key -Name $name -Value $path -Force -ErrorAction Stop
}
catch {
Write-Warning "Reg key edit error [$reg_key] [$name]"
}
}
}
Catch {
Write-Error "Check permissions to files or registry."
}
}

Сценарий получает значение атрибута thumbnailphoto текущего пользователя из Active Directory и сохраняет его в локальной папке C:\Users\Public\AccountPictures\{User SID}. Папка будет содержать JPG-файлы с разным разрешением для различных элементов интерфейса Windows: image32.jpg (32×32), image40.jpg (40×40) и т.д.

ProgramData AccountPicturesProgramData AccountPictures

Чтобы привязать эти фотофайлы к профилю пользователя, сценарий создаст сопоставления в ключе реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{User_SID}.

AccountPictureAccountPicture

Скопируйте код сценария PowerShell и сохраните его в новом файле PS1 на контроллере домена в папке NetLogon ( \\woshub.com\NETLOGON\SetADPicture.ps1 )

Важно. Если вы сохраните сценарий входа PS1 в каталог NETLOGON, вам не нужно отдельно настраивать политику выполнения сценариев PowerShell.

Вам нужно запускать этот сценарий PowerShell, когда пользователь входит в Windows. Самый простой способ реализовать это — использовать функцию сценария входа в систему GPO.

  1. Для этого откройте ранее созданный GPO и перейдите по адресу Конфигурация пользователя -> Политики -> Параметры Windows -> Сценарии (вход/выход);
  2. Выберите Вход в систему, перейти к Сценарии PowerShell вкладку, и нажмите Добавить;
  3. Укажите полный UNC-путь к файлу сценария SetADPicture.ps1 в NETLOGON.

запуск сценария входа в систему powershell через gpoзапуск скрипта входа в powershell через gpo

Вы должны выйти из системы и войти в нее (дважды), чтобы применить новые параметры GPO и установить фотографию Active Directory в профиль пользователя Windows.

Проверьте, отображается ли теперь фотография пользователя из AD на экране входа в Windows, в меню «Пуск» и в других элементах интерфейса. Например, проверьте изображение пользователя на вкладке «Учетная запись» панели «Параметры» (команда URI быстрого доступа ms-settings:accounts).

установка аватара учетной записи пользователя windows из объявленияустановить аватар учетной записи пользователя windows из объявления

Если политика не сработала:

  1. Если Windows не активирована, она не будет отображать аватар пользователя (проверьте состояние активации Windows на пользовательских компьютерах);
  2. Проверьте результирующие параметры GPO и убедитесь, что политика Применение изображения входа по умолчанию для всех пользователей (Computer Settings-> Policies-> Administrative Templates-> Control Panel-> User Accounts) не включен;Опция GPO: Применять картинку входа по умолчанию для всех пользователейОпция GPO: Применять изображение входа по умолчанию для всех пользователей
  3. Устранение неполадок групповой политики на целевых компьютерах с помощью инструмента gpresult.
Вы можете использовать этот сценарий PowerShell для настройки фотографий пользователей Active Directory в качестве образов входа в учетную запись для всех поддерживаемых операционных систем: Windows 11, 10, 8.1 и Windows Server 2022, 2019, 2016, 2012 R2 (включая сценарии с отдельными узлами RDS и фермами служб удаленных рабочих столов).

Добавить комментарий

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