在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客 ...
随机推荐
- NC16660 [NOIP2004]FBI树
NC16660 [NOIP2004]FBI树 题目 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全&quo ...
- wcf连接数据库用sqlhelper,连接数一直没有释放反而增加
找了一天,发现原因是配置的连接字符串没有加上最大连接数,所以每次请求都是一直增加,而MariaDB默认的连接数是151,为了本地多项目测试已改成以前. 下面是配置的连接字符串: <add na ...
- MySQL--数据过滤(AND、OR、IN、NOT操作符)
MySQL允许给出多个WHERE子句.这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用. 1.组合WHERE子句 1.1 AND操作符 SELECT prod_id,prod_pric ...
- python shutil相关操作
python shutil模块常用操作 高级的 文件.文件夹.压缩包 处理模块 1.将文件内容拷贝至另一个文件中 shutil.copyfileobj(src, dist, length=16*102 ...
- 秋季招聘季如何制作一款“秀色可餐”的简历?由ShareLatex和Python3打造
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_161 秋招季还有两个月就到了,即所谓的"金九银十".疫情因素导致市场环境不太理想,所以我们更应该未焚而徙薪,未 ...
- Reactive UI -- 反应式编程UI框架入门学习(二)
前文Reactive UI -- 反应式编程UI框架入门学习(一) 介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...
- SpringBoot(一、快速入门)
1.SpringBoot简介 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...
- 多环境配置 - SpringBoot 2.7.2 实战基础
优雅哥 SpringBoot 2.7.2 实战基础 - 06 -多环境配置 在一个项目的开发过程中,通常伴随着多套环境:本地环境 local.开发环境 dev.集成测试环境 test.用户接受测试环境 ...
- Git 06 分支
参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 概述 分支用 ...
- 数据库运维之路——关于tempdb暴增实战案例
转眼间,2021年的第一个季度已经到了最后一个月了,由于疫情原因,最近一段时间一直在北京,基本上没有出差,每天上班下班的日子感觉时间过的好快,新的一年继续努力奋斗啊. 仔细回想一下,自己踏入到sql ...