使用ThumbnailPhoto属性管理Active Directory中的用户照片

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

活动目录用户帐户有一个特殊的 thumbnailPhoto属性,在这个属性中用户的照片可以存储为二进制数据。Outlook、OWA、Lync/Skype for Business、SharePoint(和其他应用程序)可以将此AD属性中存储的照片用作其界面中的用户头像。此外,这些照片还可以作为Windows用户帐户图片使用。

在本文中,我们将向我们展示如何使用PowerShell、OWA或者activedirectory用户和计算机管理单元向activedirectory添加(上载)用户照片,以及如何将thumbnailPhoto属性值保存(导出)到jpeg文件。

活动目录中的ThumbnailPhoto属性

AD中使用用户照片的主要方面和限制:

用户对象的thumbnailPhoto属性中的最大照片大小为100kb。然而,有一个普遍的建议,使用图形JPEG/BMP文件格式高达 10 KB96×96像素的大小作为用户在AD中的照片;

要在Outlook2010或者更新版本中显示照片,至少需要一个Windows Server 2008 Active Directory架构版本;

如果Active Directory中有大量用户照片,则域控制器之间的复制流量会因NTDS.DIT文件(AD数据库);

用户可以在AD中更改自己的照片。如果我们需要将照片上载给其他用户(例如人力资源部),则需要使用AD委派向导向组授予具有用户帐户的OU的“写入缩略图照片”权限。

如何使用PowerShell在AD中添加/更新用户照片?

用户需要使用PowerShell目录(PowerShell)来添加PowerShell目录。首先,我们需要将图像文件转换为字节数组,然后使用 Set ADUsercmdlet将其设置为thumbnailPhoto属性的值。

Import-Module ActiveDirectory
$photo = [byte[]](Get-Content C:\PS\jkuznetsov_photo.jpg -Encoding byte)
Set-ADUser jkuznetsov -Replace @{thumbnailPhoto=$photo}

在PowerShell一行程序中也是这样:

Set-ADUser jkuznetsov -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\ps\jkuznetsov_photo.jpg" -Encoding byte))}

执行这些命令后,存储在Active Directory数据库中的用户照片将显示在Outlook、Lync/Skype、OWA等中(可能需要一段时间才能完成AD复制和GAL更新)。

我们可以在Active Directory用户和计算机(ADUC)控制台中打开用户的属性,转到“属性编辑器”(Attribute Editor)选项卡,并确保thumbnailPhoto属性现在包含一个值。

Exchange和outlookwebaccess中的用户照片管理

Exchange命令行管理程序支持导入AD用户照片的相同功能。为此,我们可以使用 Import-RecipientDataPropertycmdlet。

说明Exchange 2010中的Import-RecipientDataProperty cmdlet不允许上载超过10 KB的镜像。

更新用户Hyman照片的EMS命令如下所示:

Import-RecipientDataProperty -Identity "Hyman" -Picture -FileData ([Byte[]] $(Get-Content -Path "C:\PS\jkuznetsov_photo.jpg" -Encoding Byte -ReadCount 0))

Exchange 2013/2015中的EMS使用另一个cmdlet来管理用户照片- Set-UserPhoto。以下命令用于在这些版本的Exchange中添加用户的照片:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
$usrphotofile = ([Byte[]] $(Get-Content -Path "C:\PS\jkuznetsov_photo.jpg" -Encoding Byte -ReadCount 0))
Set-UserPhoto -Identity jkuznetsov -PictureData $usrphotofile -Confirm:$False
Set-UserPhoto -Identity jkuznetsov -Save -Confirm:$False

要从Active Directory中删除缩略图照片,请使用以下命令:

Remove-UserPhoto -Identity jkuznetsov

用户也可以通过Outlook(OWA)自己更改个人资料。点击右上角账号,选择 编辑信息-> 照片-> 更改按钮,指定jpeg文件的路径和用户照片。

如何使用PowerShell将用户照片批量导入AD?

我们可以使用PowerShell将用户的照片批量上载和管理到Active Directory。创建一个包含用户帐户列表和相应照片文件名的CSV文件。我们可以使用

import.csv

文件:

AD_username, Photo
asmith, C:\PS\asmith.jpg
[email protected], C:\PS\linkin.jpg
Hyman, C:\PS\Hyman.png

以下PowerShell one liner命令将从CSV文件获取用户列表,并将其照片更新(上载)到Active Directory:

Import-Csv C:\PS\import.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}

如何将用户照片从Active Directory导出到JPG文件?

我们可以将AD用户照片保存到图形文件中。要执行此操作,请使用Get-ADUser cmdlet选择用户:

$ADuser = Get-ADUser jkuznetsov-Properties thumbnailPhoto

并将thumbnailPhoto属性的内容保存到JPG文件中:

$ADuser.thumbnailPhoto | Set-Content c:\PS\jkuznetsov.jpg -Encoding byte

使用以下PowerShell脚本,可以将特定容器(OU)中所有用户的照片导出到文件中:

Import-Module ActiveDirectory
$ADusers= Get-ADUser -Filter * -SearchBase "OU=Users,OU=Paris,DC=woshub,DC=com" -Properties thumbnailPhoto | ? {$_.thumbnailPhoto}
foreach ($ADuser in $ADusers) {
$name = $ADuser.SamAccountName + ".jpg"
$ADuser.thumbnailPhoto | Set-Content $name -Encoding byte
}

最后,还有一些有用的查询。第一个允许在thumbnailPhoto广告属性中选择所有拥有照片的用户:

Get-ADUser -Filter * -properties thumbnailPhoto | ? {$_.thumbnailPhoto} | select Name

第二种方法允许你在没有照片的情况下找到用户:

Get-ADUser -Filter * -properties thumbnailPhoto | ? {(-not($_.thumbnailPhoto))} | select Name

添加一个照片标签到Active Directory用户&电脑控制台

如果您不喜欢PowerShell,可以使用图形(GUI)工具来管理Active Directory用户的照片。

有许多第三方工具允许在更方便的图形编辑器中为广告用户设置照片。但是,这些工具的功能是多余的,使用第三方软件编辑广告存在一定的风险。

我经常建议使用小型库 AdExt.dll,它添加了一个单独的标签,可以直接添加照片到ADUC控制台。

你可以在这里下载adeext .dll库- AdExt-dll-ADUC.zip

要安装这个库,运行提升后的命令提示符并进入。net框架二进制文件所在的目录:

  • x86 Windows: cd %WinDir%\Microsoft.NET\Framework\v2.0.50727
  • 对于x64版本的Windows: cd %WinDir%\Microsoft.NET\Framework64\v4.0.30319

根据安装的。net框架的版本不同,路径可能有所不同。

使用以下命令安装库:

InstallUtil.exe c:\ps\ad\AdExt.dll

重新启动ADUC (dsa.msc)控制台,然后打开任何用户的属性。请注意,出现了一个新的照片标签,您可以添加或删除用户的照片。

要删除(取消注册)adeext .dll库,执行命令:

InstallUtil.exe /u c:\ps\ad\AdExt.dll

照片标签有两个部分:

—通过“thumbnailPhoto”属性上传照片时,图片会自动降分辨率为96×96,并勾选“质量”,保证不超过10kb。
—如果您通过jpegPhoto上传图片,则图像质量会发生变化,使图片大小小于100kb。