Windows如今能夠設置用戶頭像,並在開始菜單顯示。若是你安裝了Exchange或者Lync,那麼能夠在Outlook或者Skype裏看到用戶的頭像。這個圖片是存儲在AD用戶屬性裏的。對於桌面電腦的設置,咱們能夠一樣利用這個屬性將AD中的圖片做爲域帳戶的圖片在客戶端本地顯示。shell
整體思路是,從AD中獲取用戶頭像。而後在本地配置獲取的圖片做爲當前用戶的頭像。windows
獲取用戶頭像,並修改註冊表配置用戶頭像能夠利用如下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."
}
}ide
腳本中會根據用戶的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權限。選擇對繼承權限的全部子項目替換現有權限。
.net
而後繼續利用這條策略,將以前的powershell腳本也配置在這裏。在User Configuration--Windows Settings--Scriptes--Logon裏面新建一個腳本。腳本名字%windir%\System32\WindowsPowerShell\v1.0\powershell.exe,腳本參數-Noninteractive -ExecutionPolicy Bypass -Noprofile -File %logonserver%\netlogon\SetADPicture.ps1。
3d
記得把腳本文件放到域控的netlogon共享裏。netlogon一般是C:\Windows\SYSVOL\sysvol\contoso.lab\SCRIPTS文件夾。因爲是在sysvol中,只須要複製到一臺域控上,系統會自動同步到其它服務器上。
因爲添加註冊表是計算機策略,用戶登陸腳本是用戶策略。因此,這條策略須要應用到客戶端計算機OU上也須要應用在用戶OU上。或者你能夠將其拆分紅2條策略,分別應用在計算機和用戶OU上。
配置完成以後,須要從新啓動計算機。當客戶端啓動時,會執行新建註冊表的策略。用戶登陸時會從AD用戶屬性中獲取圖片,並保存在本地,同時配置本地註冊表信息將圖片指向這些獲取的圖片文件。可是這個時候,用戶圖片並不會顯示,由於登陸的那一刻用戶腳本並無執行,用戶頭像仍是空白的。確認文件和對應的註冊表都建立出來後,註銷再登陸就能夠顯示用戶頭像了。同理,當更新AD用戶圖片後,客戶端第一次登陸顯示的仍然是舊圖片。可是此時新的圖片已經下載到本地了,而且覆蓋舊圖片了,下次登陸時就能正常顯示了。
參考文章orm
http://woshub.com/how-to-set-windows-user-account-picture-from-active-directory/server