如何在Windows 10中将AD照片用作用户个人资料图片?

时间:2020-01-09 10:46:37  来源:igfitidea点击:

Outlook,SharePoint,Skype for Business,Office365和其他Microsoft应用程序允许我们使用当前登录用户的Active Directory(或者Azure AD)照片作为其界面中的用户头像。在本文中,我们将向我们展示如何使用组策略和PowerShell脚本将Active Directory中的用户照片设置为Windows 10中的用户个人资料图片(头像)(Windows个人资料图片显示在锁定屏幕,欢迎屏幕,在"开始"菜单中等)。

我们的脚本将按以下方式工作:当用户登录Windows 10时,必须运行PowerShell脚本。它从Active Directory中的thumbnailPhoto用户属性获取用户的照片,将图像文件保存到本地驱动器,并将此文件设置为当前配置文件中的用户帐户图片。该解决方案应在所有受支持的客户端上运行:Windows 10、8.1、7和运行Windows Server 2015/2012 R2的RDS主机上。

如何为Active Directory用户设置照片?

首先,通过将图像文件上传到特殊用户属性thumbnailPhoto为AD用户设置照片。我们可以使用第三方工具或者Windows PowerShell的ActiveDirectory模块设置用户照片。请注意,头像分辨率最大为96 96像素时,最大头像图像文件大小不得超过100 Kb。我们可以为用户设置AD帐户图片

jchan

如下:

$photo = [byte []](获取内容C:\PS\jchan_photo.jpg-编码字节)Set-ADUser jchan-替换@ {thumbnailPhoto = $photo}

在文章如何将用户照片导入Active Directory中,我们已经详细考虑了如何使用PowerShell管理AD用户照片。

向用户提供在Windows中更改个人资料图片的权限

在Windows 10中,我们可以通过注册表项HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users设置用户帐户配置文件图片。 但是,非管理员用户没有必要的权限将值添加到此注册表项。若要允许没有管理员权限的用户更改配置文件图片,必须授予他们对该注册表项的写权限。

使用GPO在AD域中部署注册表项权限更加容易:

  • 为此,运行组策略管理控制台(gpmc.msc),创建一个新策略,并将其链接到用户计算机的OU。
  • 然后在GPO编辑器中转到以下部分:"计算机配置->策略-> Windows设置->安全设置->注册表",并使用路径MACHINE\SOFTWARE\Microsoft\Windows添加一个新的注册表项(" Add key")。\CurrentVersion\AccountPicture\Users;
  • 然后,在"安全性"选项卡中,检查所有域用户([DomainName]\Users)的"完全控制"权限,然后单击"确定";否则,单击"确定"。
  • 在下一个窗口中,选择选项"使用可继承权限替换所有子键上的现有权限",否则用户将没有嵌套注册表子键的任何权限。

在Windows 10中获取AD用户照片并设置用户个人资料图片的PowerShell脚本

然后,我们需要运行PowerShell脚本,该脚本应从Active Directory中获取当前用户的照片,将其保存为jpg文件并将其设置为Windows用户个人资料图片。有两种方法可以从AD获取用户照片。我们可以使用ActiveDirectory模块中的Get-ADUser cmdlet(此模块必须通过RSAT安装在所有计算机上,或者我们可以仅复制必要的RSAT-AD-PowerShell模块文件而无需安装RSAT)。由于该脚本必须通用并且可以在Windows 7中运行,因此我们将不使用RSAT-AD-PowerShell模块,但是我们将通过ADSISearcher Cclass访问AD。

下面是一个" SetADPicture.ps1"脚本示例,该脚本可从AD获取用户的照片并将其设置为Windows帐户的头像图片:

[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:\Users\Public\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."
}
}

该脚本获取当前AD用户的thumbnailphoto属性的值,并将其保存到本地文件夹C:\Users\Public\AccountPictures{User SID}。该文件夹将包含用于不同Windows 10界面元素的不同分辨率(从3232到448448像素)的图片文件的文件:image32.jpg,image40.jpg等。

通过注册表项HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users{User_SID}中的参数将照片绑定到用户配置文件。

运行PowerShell脚本以使用GPO将照片绑定到配置文件

现在,我们要在用户登录Windows时运行SetADPicture.ps1脚本。使用GPO登录脚本更容易做到这一点。

为此,请在先前创建的策略中的"用户配置->策略-> Windows设置->脚本(登录/注销)"部分中,创建一个新的PowerShell登录脚本:

  • 脚本名称:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • 脚本参数:
-Noninteractive -ExecutionPolicy Bypass -Noprofile -File %logonserver%\netlogon\script\SetADPicture.ps1

重要。必须将SetADPicture.ps1脚本先前复制到域控制器上的netlogon\script \文件夹中。

在策略设置中,启用GPO回送处理模式(计算机配置->管理模板->系统->组策略->"配置用户组策略回送处理模式" ="合并")。在这种模式下,我们可以将策略应用于具有用户帐户的OU。

我们只需要将策略链接到特定的OU,注销并再次登录Windows。

要在目标计算机上诊断GPO,请使用gpresult工具和"组策略不适用"一文。

化身将分配给Windows 10用户配置文件,并将在下次登录后在"开始"菜单,"欢迎屏幕"以及其他位置正确显示为客户图片。本个人资料照片分配指南已在Windows 10 LTSC(1809)上进行了测试。