在Windows客戶端自動設置AD用戶頭像


Windows現在可以設置用戶頭像,並在開始菜單顯示。如果你安裝了Exchange或者Lync,那么可以在Outlook或者Skype里看到用戶的頭像。這個圖片是存儲在AD用戶屬性里的。對於桌面電腦的設置,我們可以同樣利用這個屬性將AD中的圖片作為域賬戶的圖片在客戶端本地顯示。

總體思路是,從AD中獲取用戶頭像。然后在本地配置獲取的圖片作為當前用戶的頭像。

獲取用戶頭像,並修改注冊表配置用戶頭像可以利用以下powershell腳本。

[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."
 }
 }

腳本中會根據用戶的SID,將圖片保存在C:\ProgramData\AccountPictures目錄里。在用戶SID對應的文件夾里會產生Image32 Image 448等圖片以應對不同尺寸設置的需求。在注冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users下對應用戶的SID下也會有各種尺寸照片對應的具體存放位置。如果看不到圖片,請點我

但是普通域用戶對於這個注冊表鍵值並沒有權限,無法直接寫入。我們需要把注冊表先建好,賦好權限。可以利用組策略創建這個項目,並給予Domain Users完全控制權限。新建一個組策略,在其中Computer Configuration--Policies--Windows Settings-Security Settings-Registry中新建一條,選擇MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users並且添加Domain Users的Full Control權限。選擇對繼承權限的所有子項目替換現有權限。

然后繼續利用這條策略,將之前的powershell腳本也配置在這里。在User Configuration--Windows Settings--Scriptes--Logon里面新建一個腳本。腳本名字%windir%\System32\WindowsPowerShell\v1.0\powershell.exe,腳本參數-Noninteractive -ExecutionPolicy Bypass -Noprofile -File %logonserver%\netlogon\SetADPicture.ps1。

記得把腳本文件放到域控的netlogon共享里。netlogon通常是C:\Windows\SYSVOL\sysvol\contoso.lab\SCRIPTS文件夾。由於是在sysvol中,只需要復制到一台域控上,系統會自動同步到其它服務器上。

由於添加注冊表是計算機策略,用戶登錄腳本是用戶策略。所以,這條策略需要應用到客戶端計算機OU上也需要應用在用戶OU上。或者你可以將其拆分成2條策略,分別應用在計算機和用戶OU上。

配置完成之后,需要重新啟動計算機。當客戶端啟動時,會執行新建注冊表的策略。用戶登錄時會從AD用戶屬性中獲取圖片,並保存在本地,同時配置本地注冊表信息將圖片指向這些獲取的圖片文件。但是這個時候,用戶圖片並不會顯示,因為登錄的那一刻用戶腳本並沒有執行,用戶頭像還是空白的。確認文件和對應的注冊表都創建出來后,注銷再登錄就可以顯示用戶頭像了。同理,當更新AD用戶圖片后,客戶端第一次登錄顯示的仍然是舊圖片。但是此時新的圖片已經下載到本地了,並且覆蓋舊圖片了,下次登錄時就能正常顯示了。

參考文章

http://woshub.com/how-to-set-windows-user-account-picture-from-active-directory/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM