在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客 ...
随机推荐
- Python爬取全球是最大的电影数据库网站IMDb数据
在使用 Python 开发爬虫的过程中,requests 和 BeautifulSoup4(别名bs4) 应用的比较广泛,requests主要用于模拟浏览器的客户端请求,以获取服务器端响应,接收到的响 ...
- C语言整形转字符串的方法
今天写力扣第九题,里面用到了这个,就做个笔记. 1. char *itoa( int value, char *string,int radix);(stdlib.h) Windows特有 ...
- 输入一个url全过程详解
1. 用户在浏览器中输入url,浏览器接收到url. 2.浏览器接收到这个url之后,会根据这个url会先查看缓存,如果有缓存且没有过期的话直接提供给客户端,完成页面渲染. 3.否则浏览器就会通过DN ...
- java的访问权限protected和default
protected和default的区别 第一点:在同一个包中,protected和default表现一致,即,当main方法所在的类和使用了protected与default修饰属性.方法的类在同一 ...
- 一篇文章带你走进meta viewport的世界
一.什么是 meta 标签? 可提供有关页面的元信息 二.为什么需要移动端适配? 因为我们在 pc 端上看到的页面都是比较大的,在 pc 端上都是正常显示的,自动不会被进行缩放,除非手动进行放大或缩小 ...
- ERROR: null value in column "name" of relation "res_company" violates not-null constraint
1 # 创建res.company公司信息的时候,发现它执行了两次create()方法,并且第二次调用create,传了一个[{}]做为参数 2 # 原因是,你创建res.company的时候并没有指 ...
- show create table底层流程跟踪
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 SHOW CREATE TABLE语句用于为指定表/视图显示创建的语句,本文将简要描述如何在MySQL源码里跟踪和学 ...
- React性能优化,六个小技巧教你减少组件无效渲染
壹 ❀ 引 在过去的一段时间,我一直围绕项目中体验不好或者无效渲染较为严重的组件做性能优化,多少积累了一些经验所以想着整理成一片文章,下图就是优化后的一个组件,可以对比优化前一次切换与优化后多次切换的 ...
- ahooks 中那些控制“时机”的hook都是怎么实现的?
本文是深入浅出 ahooks 源码系列文章的第五篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本文来探索一下 ahooks 是怎么封装 React 的一些执行& ...
- Word 段前分页是什么?怎么设置?
描述 这两个标题在第一个标题的页中,且两个标题都没有独立分页.要让每一个标题独立分页,需要对标题的格式进行修改. 段前分页指的是标题与标题之间不在同一个页中,每一个标题都在独立的页中. 设置段前分页 ...