在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下也會有各種尺寸照片對應的具體存放位置。如果看不到圖,請點我
在Windows客戶端自動設置AD用戶頭像
但是普通域用戶對於這個註冊表鍵值並沒有權限,無法直接寫入。我們需要把註冊表先建好,賦好權限。可以利用組策略創建這個項目,並給予Domain Users完全控制權限。新建一個組策略,在其中Computer Configuration--Policies--Windows Settings-Security Settings-Registry中新建一條,選擇MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users並且添加Domain Users的Full Control權限。選擇對繼承權限的所有子項目替換現有權限。
在Windows客戶端自動設置AD用戶頭像

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

記得把腳本文件放到域控的netlogon共享裏。netlogon通常是C:\Windows\SYSVOL\sysvol\contoso.lab\SCRIPTS文件夾。由於是在sysvol中,只需要複製到一臺域控上,系統會自動同步到其它服務器上。
在Windows客戶端自動設置AD用戶頭像
由於添加註冊表是計算機策略,用戶登錄腳本是用戶策略。所以,這條策略需要應用到客戶端計算機OU上也需要應用在用戶OU上。或者你可以將其拆分成2條策略,分別應用在計算機和用戶OU上。
在Windows客戶端自動設置AD用戶頭像
配置完成之後,需要重新啓動計算機。當客戶端啓動時,會執行新建註冊表的策略。用戶登錄時會從AD用戶屬性中獲取圖片,並保存在本地,同時配置本地註冊表信息將圖片指向這些獲取的圖片文件。但是這個時候,用戶圖片並不會顯示,因爲登錄的那一刻用戶腳本並沒有執行,用戶頭像還是空白的。確認文件和對應的註冊表都創建出來後,註銷再登錄就可以顯示用戶頭像了。同理,當更新AD用戶圖片後,客戶端第一次登錄顯示的仍然是舊圖片。但是此時新的圖片已經下載到本地了,並且覆蓋舊圖片了,下次登錄時就能正常顯示了。
在Windows客戶端自動設置AD用戶頭像
參考文章

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章