在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客 ...
随机推荐
- svn :不能打开文件“/data/svn/repo/format”: 权限不够
解决方法:关闭selinux vi /etc/sysconfig/selinux 将其中的SELINUX=enforcing 改为SELINUX=disabled 即可.
- 攻防世界pwn题:Recho
0x00:查看文件信息 一个64位二进制文件,canary和PIE保护机制没开. 0x01:用IDA进行静态分析 分析:主程序部分是一个while循环,判断条件是read返回值大于0则循环.函数ato ...
- 让你的Nginx支持分布式追踪
Background NGINX 是一个通用且流行的应用程序.也是最流行的 Web 服务器,它可用于提供静态文件内容,但也通常与其他服务一起用作分布式系统中的组件,在其中它用作反向代理.负载均衡 或 ...
- 关于使用netstat -lantup查看的SSHD 6010端口解释
关于使用netstat -lantup查看的SSHD 6010端口解释: 1.使用netstat -lantup查看当前系统开启的服务端口 tcp6 0 0 ::1:6010 ...
- 牛客SQL刷题第一趴——非技术入门基础篇
user_profile表: id device_id gender age university province 1 2138 male 21 北京大学 Beijing 2 3214 male ...
- 参数化设计(多次调用同一子模块,critical warning,引脚constraint sources)
1.设计定义:4个led灯以不同的频率各自闪烁. 2.设计输入:时钟信号,复位信号,led多位输出. 思路:没有要求流水的效果,所以不需要叠加counter达到某一特定值来位移.只需要让每个灯的闪烁周 ...
- C++ 加速(卡常)技巧【超级 快读、快写】
C++ \texttt{C++} C++ 加速技巧 快读快写 快读 inline int read() { int x = 0, w = 0; char ch = 0; while (!isdigit ...
- Nginx 的基本概念
Nginx 简介 什么是 Nginx Nginx 是一个高性能的 HTTP 和 反向代理 web服务器 占用内存少,并发能力强,高性能,热部署 但不支持 Java,Java 得配合 tomcat 使用 ...
- Matplotlib(基本用法)
Matplotlib 是数据分析绘图的常见模块,可以算是 2D-绘图(Python)领域使用最广泛的套件,可以将数据图形化,并且提供多样化的输出格式,利于数据的显示并分析. 接下来展示的是Matplo ...
- 从零开始Blazor Server(5)--权限验证
序 之前我们一直使用的是微软自带的身份验证方式,即使用[Authorize]标签来做. 但是这种方式十分不灵活,微软推荐的方式是加Policy,但是这种方式对我们来说还是不够灵活. 所以本节我们用完全 ...