Outlook, SharePoint, Skype for Business, Office365 và các ứng dụng Microsoft khác cho phép bạn sử dụng ảnh Active Directory (hoặc Azure AD) của người dùng hiện tại đang đăng nhập làm avatar người dùng trong giao diện của họ. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách sử dụng Chính sách nhóm và tập lệnh PowerShell để đặt ảnh người dùng từ Active Directory làm ảnh hồ sơ người dùng (avatar) trong Windows 10 (ảnh hồ sơ Windows được hiển thị trên Màn hình khóa, Màn hình chào, trong Menu Start, v.v.).
Tập lệnh của chúng tôi sẽ hoạt động như sau: khi người dùng đăng nhập vào Windows 10, một tập lệnh PowerShell phải được chạy; nó lấy ảnh của người dùng từ thuộc tính thumbnailPhoto của người dùng trong Active Directory, lưu tệp hình ảnh vào ổ cục bộ và đặt tệp này làm ảnh tài khoản người dùng trong hồ sơ hiện tại. Giải pháp nên hoạt động trên tất cả các máy khách được hỗ trợ: Windows 10, 8.1, 7 và trên máy chủ RDS chạy Windows Server 2016/2012 R2.
Cách đặt ảnh cho người dùng Active Directory?
Trước hết, đặt ảnh cho người dùng AD bằng cách tải tệp hình ảnh lên thuộc tính người dùng đặc biệt thumbnailPhoto. Bạn có thể đặt ảnh người dùng bằng cách sử dụng công cụ của bên thứ ba, hoặc sử dụng mô-đun ActiveDirectory cho Windows PowerShell. Xin lưu ý rằng kích thước tệp hình ảnh avatar tối đa không được vượt quá 100 Kb với độ phân giải hình ảnh lên đến 96 × 96 pixel. Bạn có thể đặt hình ảnh tài khoản AD cho người dùng jchan như sau:
$photo = [byte[]](Get-Content C:\PS\jchan_photo.jpg -Encoding byte)
Set-ADUser jchan -Replace @{thumbnailPhoto=$photo}

Chúng tôi đã xem xét chi tiết cách quản lý ảnh người dùng AD bằng PowerShell trong bài viết Cách nhập ảnh người dùng vào Active Directory.
Cung cấp quyền cho người dùng thay đổi ảnh hồ sơ trong Windows
Trong Windows 10, bạn có thể đặt ảnh hồ sơ tài khoản người dùng qua khóa registry HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users. Tuy nhiên, người dùng không phải quản trị viên không có quyền cần thiết để thêm giá trị vào khóa registry này. Để cho phép người dùng không có đặc quyền quản trị thay đổi ảnh hồ sơ, bạn phải cấp cho họ quyền ghi vào khóa registry này.
Dễ dàng hơn là triển khai quyền khóa registry trong miền AD bằng GPO:
- Để làm điều này, chạy bảng điều khiển Quản trị Chính sách nhóm (gpmc.msc), tạo một chính sách mới và liên kết nó với OU chứa máy tính của người dùng;
- Sau đó trong trình chỉnh sửa GPO đi đến phần sau Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Registry và thêm khóa registry mới (Add key) với đường dẫn MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users;

- Sau đó, trong tab Security, tích quyền Full Control cho tất cả người dùng miền ([DomainName]\Users) và nhấp OK;
- Trong cửa sổ tiếp theo, chọn tùy chọn Replace existing permission on all sub keys with inheritable permissions, nếu không người dùng sẽ không có bất kỳ đặc quyền nào cho các khóa con registry lồng nhau.

Tập lệnh PowerShell để lấy ảnh người dùng AD và đặt ảnh hồ sơ người dùng trong Windows 10
Sau đó chúng ta cần chạy tập lệnh PowerShell phải lấy ảnh của người dùng hiện tại từ Active Directory, lưu nó trong tệp jpg và đặt nó làm ảnh avatar tài khoản Windows người dùng. Có hai cách để lấy ảnh người dùng từ AD. Bạn có thể sử dụng cmdlet Get-ADUser từ mô-đun ActiveDirectory (mô-đun này phải được cài đặt trên tất cả máy tính qua RSAT, hoặc bạn có thể chỉ sao chép các tệp mô-đun RSAT-AD-PowerShell cần thiết mà không cần cài đặt RSAT). Vì tập lệnh phải phổ quát và hoạt động trong Windows 7 cũng, chúng ta sẽ không sử dụng mô-đun RSAT-AD-PowerShell, mà sẽ truy cập AD thông qua lớp C# ADSISearcher.
Một ví dụ của tập lệnh SetADPicture.ps1 để lấy ảnh người dùng từ AD và đặt nó làm ảnh avatar tài khoản Windows được đưa ra dưới đây:
[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."
}
}
Tập lệnh lấy giá trị thuộc tính thumbnailphoto của người dùng AD hiện tại và lưu nó vào thư mục cục bộ C:\Users\Public\AccountPictures\{User SID}. Thư mục sẽ chứa tệp với hình ảnh có các độ phân giải khác nhau (từ 32×32 đến 448×448 pixel) cho các yếu tố giao diện Windows 10 khác nhau: image32.jpg, image40.jpg, v.v.

Việc liên kết ảnh với hồ sơ người dùng được thực hiện qua tham số trong khóa registry HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{User_SID}.

Chạy tập lệnh PowerShell để liên kết ảnh với hồ sơ bằng GPO
Bây giờ chúng ta muốn chạy tập lệnh SetADPicture.ps1 khi người dùng đăng nhập vào Windows. Dễ dàng hơn là làm điều đó bằng tập lệnh đăng nhập GPO.
Để làm điều đó, trong chính sách được tạo trước đó trong phần User Configuration -> Policies -> Windows Settings -> Scripts (Logon/Logoff) tạo một tập lệnh đăng nhập PowerShell mới:
- Tên tập lệnh:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe - Tham số tập lệnh:
-Noninteractive -ExecutionPolicy Bypass -Noprofile -File %logonserver%\netlogon\script\SetADPicture.ps1

Trong cài đặt chính sách, bật chế độ xử lý lặp GPO (Computer Configuration -> Administrative Templates -> System -> Group Policy -> Configure user Group Policy Loopback Processing mode = Merge). Trong chế độ này, bạn có thể áp dụng chính sách cho OU với tài khoản người dùng.

Bạn chỉ phải liên kết chính sách với OU cụ thể, đăng xuất và đăng nhập vào Windows lại.
Để chẩn đoán GPO trên máy tính đích, hãy sử dụng công cụ gpresult và bài viết "Group Policy not applying".

Một avatar sẽ được gán cho hồ sơ người dùng Windows 10, và nó sẽ được hiển thị chính xác như ảnh tài khoản trong menu Start, trên Màn hình chào và các nơi khác sau lần đăng nhập tiếp theo. Hướng dẫn gán ảnh hồ sơ này đã được kiểm tra trên Windows 10 LTSC (1809).