Outlook, SharePoint, Skype for Business, Office365 และแอป Microsoft อื่นๆ อนุญาตให้คุณใช้รูปภาพ Active Directory (หรือ Azure AD) ของผู้ใช้ที่เข้าสู่ระบบอยู่ในปัจจุบันเป็นอวาตาร์ผู้ใช้ในอินเทอร์เฟซของพวกเขา ในบทความนี้ เราจะแสดงวิธีใช้ Group Policy และสคริปต์ PowerShell เพื่อตั้งค่ารูปภาพผู้ใช้จาก Active Directory เป็นรูปโปรไฟล์ผู้ใช้ (avatar) ใน Windows 10 (รูปภาพโปรไฟล์ Windows จะแสดงบนหน้าจอล็อก หน้าจอต้อนรับ ในเมนูเริ่ม เป็นต้น)
สคริปต์ของเราจะทำงานดังนี้:เมื่อผู้ใช้ล็อกออนเข้าสู่ Windows 10 จะต้องเรียกใช้สคริปต์ PowerShell โดยจะรับรูปภาพของผู้ใช้จากแอตทริบิวต์ผู้ใช้ของภาพขนาดย่อใน Active Directory บันทึกไฟล์รูปภาพลงในไดรฟ์ในเครื่อง และตั้งค่าไฟล์นี้เป็นรูปภาพของบัญชีผู้ใช้ในโปรไฟล์ปัจจุบัน โซลูชันควรทำงานบนไคลเอนต์ที่รองรับทั้งหมด:Windows 10, 8.1, 7 และบนโฮสต์ RDS ที่ใช้ Windows Server 2016/2012 R2
จะตั้งค่ารูปภาพสำหรับผู้ใช้ Active Directory ได้อย่างไร
ก่อนอื่น ตั้งค่ารูปภาพสำหรับผู้ใช้ AD โดยการอัปโหลดไฟล์รูปภาพไปยังแอตทริบิวต์ thumbnailPhoto ของผู้ใช้พิเศษ คุณสามารถตั้งค่ารูปถ่ายของผู้ใช้โดยใช้เครื่องมือของบริษัทอื่น หรือใช้โมดูล ActiveDirectory สำหรับ Windows PowerShell โปรดทราบว่าขนาดไฟล์ภาพอวาตาร์สูงสุดต้องไม่เกิน 100 Kb โดยมีความละเอียดของภาพสูงสุด 96 × 96 พิกเซล คุณสามารถตั้งค่าภาพบัญชี AD สำหรับผู้ใช้ jchan
ดังนี้
$photo =[byte[]](Get-Content C:\PS\jchan_photo.jpg -Encoding byte)
Set-ADUser jchan -Replace @{thumbnailPhoto=$photo}
การให้สิทธิ์แก่ผู้ใช้ในการเปลี่ยนรูปโปรไฟล์ใน Windows
ใน Windows 10 คุณสามารถตั้งค่ารูปโปรไฟล์บัญชีผู้ใช้ผ่านรีจิสตรีคีย์ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users . อย่างไรก็ตาม ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบไม่มีสิทธิ์ที่จำเป็นในการเพิ่มค่าให้กับคีย์รีจิสทรีนี้ หากต้องการอนุญาตให้ผู้ใช้ที่ไม่มีสิทธิ์ของผู้ดูแลระบบเปลี่ยนรูปโปรไฟล์ได้ คุณต้องให้สิทธิ์ในการเขียนคีย์รีจิสทรีนี้แก่พวกเขา
ง่ายกว่าในการปรับใช้สิทธิ์ของคีย์รีจิสทรีในโดเมน AD โดยใช้ GPO:
- ในการดำเนินการนี้ ให้เรียกใช้คอนโซลการจัดการนโยบายกลุ่ม (gpmc.msc) สร้างนโยบายใหม่และเชื่อมโยงไปยัง OU กับคอมพิวเตอร์ของผู้ใช้
- จากนั้นในตัวแก้ไข GPO ให้ไปที่ส่วนต่อไปนี้ การกำหนดค่าคอมพิวเตอร์ -> นโยบาย -> การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> รีจิสทรี และเพิ่มคีย์รีจิสทรีใหม่ (เพิ่มคีย์ ) ด้วยพาธ MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users;
- จากนั้น ในแท็บความปลอดภัย ให้เลือก การควบคุมทั้งหมด สิทธิ์สำหรับผู้ใช้โดเมนทั้งหมด ( [DomainName]\Users) แล้วคลิกตกลง
- ในหน้าต่างถัดไป ให้เลือกตัวเลือก แทนที่การอนุญาตที่มีอยู่ในคีย์ย่อยทั้งหมดด้วยการอนุญาตที่สืบทอดได้ มิฉะนั้น ผู้ใช้จะไม่มีสิทธิ์ใดๆ สำหรับคีย์ย่อยของรีจิสทรีที่ซ้อนกัน
สคริปต์ PowerShell เพื่อรับรูปภาพของผู้ใช้ AD และตั้งค่ารูปภาพโปรไฟล์ผู้ใช้ใน Windows 10
จากนั้น เราต้องเรียกใช้สคริปต์ PowerShell ที่ควรได้รับรูปภาพของผู้ใช้ปัจจุบันจาก Active Directory บันทึกเป็นไฟล์ jpg และตั้งเป็นรูปโปรไฟล์ผู้ใช้ Windows มีสองวิธีในการรับภาพถ่ายของผู้ใช้จาก AD คุณสามารถใช้ Get-ADUser cmdlet จากโมดูล ActiveDirectory (โมดูลนี้ต้องได้รับการติดตั้งบนคอมพิวเตอร์ทุกเครื่องผ่าน RSAT หรือคุณสามารถคัดลอกไฟล์โมดูล RSAT-AD-PowerShell ที่จำเป็นโดยไม่ต้องติดตั้ง RSAT) เนื่องจากสคริปต์ต้องเป็นสากลและใช้งานได้ใน Windows 7 เราจะไม่ใช้โมดูล RSAT-AD-PowerShell แต่เราจะเข้าถึง AD ผ่านคลาส ADSISearcher C#
ตัวอย่างของ 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] ((&(objectCategory=User)(SAMAccountName=$env:username)))").FindOne().Properties
$ADuser_photo =$ADuser.thumbnailphoto
$ADuser_sid =[System.Security.Principal.WindowsIdentity” ]::GetCurrent().User.Value
ถ้า ((Test-Null $ADuser_photo) -eq $false) {
$img_sizes =@(32, 40, 48, 96, 192, 200, 240, 448)
$img_mask ="รูปภาพ{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}"
ถ้า ((Test-Path -Path $reg_key) -eq $false) { New-Item -Path $reg_key }
ลอง {
ForEach ($size in $img_sizes) {
$dir =$img_base + "\" + $ADuser_sid
If ((Test-Path -Path $dir) -eq $false) { $(mkdir $dir).Attributes ="Hidden" }
$fil e_name =([string]::format($img_mask, $size))
$path =$dir + "\" + $file_name
Write-Verbose " การบันทึก:$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 -Value $path -Force
}
}
จับ {
Write-Error "ตรวจสอบการอนุญาตไปยังไฟล์หรือรีจิสตรี"
}
}
สคริปต์ได้รับค่าของแอตทริบิวต์ภาพขนาดย่อของผู้ใช้ AD ปัจจุบันและบันทึกลงในโฟลเดอร์ในเครื่อง C:\Users\Public\AccountPictures\{User SID} โฟลเดอร์นี้จะมีไฟล์ที่มีไฟล์รูปภาพที่มีความละเอียดต่างกัน (ตั้งแต่ 32×32 ถึง 448×448 พิกเซล) สำหรับองค์ประกอบอินเทอร์เฟซ Windows 10 ที่แตกต่างกัน:image32.jpg, image40.jpg เป็นต้น
การเชื่อมโยงรูปภาพกับโปรไฟล์ผู้ใช้จะดำเนินการโดยใช้พารามิเตอร์ในคีย์รีจิสทรี HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{User_SID}

การเรียกใช้สคริปต์ PowerShell เพื่อผูกรูปภาพกับโปรไฟล์โดยใช้ GPO
ตอนนี้ เราต้องการเรียกใช้สคริปต์ SetADPicture.ps1 เมื่อผู้ใช้เข้าสู่ระบบ Windows ทำได้ง่ายกว่าโดยใช้สคริปต์การเข้าสู่ระบบ GPO
ในนโยบายที่สร้างไว้ก่อนหน้านี้ในส่วน การกำหนดค่าผู้ใช้ -> นโยบาย -> การตั้งค่า Windows -> สคริปต์ (เข้าสู่ระบบ/ออกจากระบบ) สร้างสคริปต์การเข้าสู่ระบบ PowerShell ใหม่:
- ชื่อสคริปต์:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
- พารามิเตอร์สคริปต์:
-Noninteractive -ExecutionPolicy Bypass -Noprofile -File %logonserver%\netlogon\script\SetADPicture.ps1

สำคัญ . สคริปต์ SetADPicture.ps1 ต้องถูกคัดลอกก่อนหน้านี้ไปยังโฟลเดอร์ netlogon\script\ บนตัวควบคุมโดเมน
ในการตั้งค่านโยบาย ให้เปิดใช้งานโหมดการประมวลผล GPO loopback (การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> นโยบายกลุ่ม -> กำหนดค่าโหมดการประมวลผล Group Policy Loopback ของผู้ใช้ =ผสาน ). ในโหมดนี้ คุณสามารถใช้นโยบายกับ OU กับบัญชีผู้ใช้ได้ 
คุณเพียงแค่ต้องเชื่อมโยงนโยบายกับ OU เฉพาะ ออกจากระบบและลงชื่อเข้าใช้ Windows อีกครั้ง
ในการวินิจฉัย GPO บนคอมพิวเตอร์เป้าหมาย ให้ใช้เครื่องมือ gpresult และบทความ "นโยบายกลุ่มไม่ได้ใช้"

อวาตาร์จะถูกกำหนดให้กับโปรไฟล์ผู้ใช้ Windows 10 และจะแสดงอย่างถูกต้องเป็นรูปบัญชีในเมนูเริ่ม บนหน้าจอต้อนรับ และที่อื่นๆ หลังจากเข้าสู่ระบบครั้งถัดไป คู่มือการกำหนดรูปโปรไฟล์นี้ได้รับการทดสอบบน Windows 10 LTSC (1809)