在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/
在Windows客户端自动设置AD用户头像的更多相关文章
- 设置AD用户属性
设置AD用户属性proxyaddresses的值 $test01 = [adsi]"LDAP://cn=test01,ou=oo,ou=admins,dc=ddv,dc=com" ...
- IOS 设置圆角用户头像
在App中有一个常见的功能,从系统相册或者打开照相机得到一张图片,然后作为用户的头像.从相册中选取的图片明明都是矩形的图片,但是展示到界面上却变成圆形图片,这个神奇的效果是如何实现的呢? 请大家跟着下 ...
- SSH Secure Shell Client的windows客户端样式设置
SSH Secure Shell Client下载:http://pan.baidu.com/s/1dF2lDdf 其他工具(putty-0.67)下载:http://pan.baidu.com/s/ ...
- windows上自动设置java环境变量的脚本
近期打算学习安卓开发,于是乎要准备java开发环境,安装好jdk后,就要设置java环境变量,java环境变量要设置JAVA_HOME,Path,CLASSPATH三个值,每次配置查百度复制粘贴都很麻 ...
- 【转】windows上自动设置java环境变量的脚本
转载:http://www.cnblogs.com/flowwind/p/4066146.html 近期打算学习安卓开发,于是乎要准备java开发环境,安装好jdk后,就要 设置java环境变量,ja ...
- iOS之设置用户头像的圆角
1. 显示用户头像用UIImageView实现,添加默认图片后效果如下图所示,头像显示为矩形图片. 代码实现: // ViewController.m // SetUserImage // // Cr ...
- 配置Windows server dhcp与AD域对接并使用Win1创的用户登录Win2
创建两台windows_server_2012 创建步骤链接(https://www.cnblogs.com/zhengyan6/p/16338084.html) 注意:所有虚拟机都要在同意网段 配置 ...
- 在winsshd 中添加id_rsa.pub 实现Windows 服务器主机自动信任Linux 客户端
文章一. 生成密钥: 在Linux主机(ssh客户端),通过ssh-keygen在建立SSH keys# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)将在 ...
- ftp客户端自动同步 Windows系统简单操作ftp客户端自动同步
服务器管理工具它是一款功能强大的服务器集成管理器,包含win系统和linux系统的批量连接,vnc客户端,ftp客户端等等实用功能.我们可以使用这款软件的ftp客户端定时上传下载的功能来进实现ftp客 ...
随机推荐
- Docker 配置 Seata 集成 Nacos
1.拉取镜像 docker pull seataio/seata-server:1.4.2 docker run --name seata -p 8091:8091 -d seataio/seata- ...
- OWL页面创建Copy功能,把选择内容复制到QC
- p_b_p_b 杂题选讲
[ARC119F] AtCoder Express 3 [ARC117F] Gateau 考虑二分答案,对前缀和建差分约束 \(\text{check}\) ,但是用 \(\text{spfa}\) ...
- gnet: 一个轻量级且高性能的 Go 网络框架 使用笔记
一个偶然的机会接触到了golang,被它的高并发传说所吸引,就开始学这门语言,越学感觉越有意思^_^ 注册了博客园这么多年,第一次写东西,年纪大了,脑子不好使了,就得写下来,记下来,为了自己以后查阅, ...
- MISC 2022/4/21 刷题记录-千字文
1.千字文 得到名为png的无类型文件,010 Editor查看,png,改后缀,得到二维码 QR扫描,得到一句话"这里只有二维码" 思路不对,binwalk一下,发现有错误信息 ...
- c语言编译器介绍
目录 一.IDE(集成开发环境) 1.windows 编译器 2.Mac中使用 二.环境安装 1.windows安装gcc A.进入安装所在目录,找到MinGW. B.找到我的电脑,右键选择属性. C ...
- Linux 无法启动vmmon的问题[主要出现于Arch系]
Vmmon module not loaded 使用如下命令加载模块 # modprobe -a vmw_vmci vmmon 可能会出现modprobe: WARNING: Module vmmon ...
- 流程控制语句break
break语句 用于结束循环结构,通常与分支结构if一起使用 即非正常循环,在中间循环的时候直接退出 注意break打断的是循环语句,不是if语句 注意while循环中一般需要有改变变量这个操作,否则 ...
- 非root用户安装科学计算包blas、lapack和FFTW
一.安装FFTW 1.下载安装包 下载地址:http://www.fftw.org/download.html 2.编译安装 tar -zxvf fftw-3.3.10.tar.gz cd fftw ...
- 【web自动化测试】Playwright快速入门,5分钟上手
我喜欢Playwright! 这是微软开源的一款非常强大的自动化工具,再过几年,他很有可能取代Selenium在浏览器自动化的通知地位.使用过一段时间,我没有找到很好的中文资料可以参考,导致很多问题无 ...