Administrar fotos de usuario en Active Directory usando el atributo ThumbnailPhoto
Las cuentas de usuario de Active Directory tienen un atributo thumbnailPhoto especial en el que la foto de un usuario se puede almacenar como datos binarios. Outlook, OWA, Lync/Skype for Business, SharePoint (y otras aplicaciones) pueden usar la foto almacenada en este atributo AD como el avatar del usuario en su interfaz. Además, estas fotos se pueden utilizar como imagen de cuenta de usuario de Windows.
En este artículo, le mostraremos cómo agregar (cargar) la foto de un usuario a Active Directory mediante PowerShell, OWA o el complemento Usuarios y equipos de Active Directory, así como también cómo guardar (exportar) el valor del atributo thumbnailPhoto a un archivo jpeg.
Atributo ThumbnailPhoto en Active Directory
Los principales aspectos y restricciones del uso de fotos de usuario en AD:
El tamaño máximo de la foto en el atributo thumbnailPhoto del objeto de usuario es de 100 KB. Sin embargo, existe una recomendación general de usar un formato de archivo gráfico JPEG/BMP de hasta 10 KB y 96×96 píxeles de tamaño como foto del usuario en AD;
Para mostrar una foto en Outlook 2010 o posterior, se requiere al menos una versión del esquema de Active Directory de Windows Server 2008;
-
Si hay muchas fotos de usuarios en Active Directory, el tráfico de replicación entre los controladores de dominio aumenta debido al crecimiento del archivo NTDS.DIT (base de datos AD);
Los usuarios pueden cambiar su propia foto en AD. Si necesita delegar la capacidad de cargar fotos a otros usuarios (por ejemplo, el departamento de recursos humanos), debe usar el asistente de delegación de AD para otorgar al grupo el permiso "Escribir foto en miniatura" en la unidad organizativa con cuentas de usuario.
¿Cómo agregar/actualizar una foto de usuario en AD usando PowerShell?
Para agregar (cargar) una foto de usuario a Active Directory mediante PowerShell, debe usar el Módulo de Active Directory para Windows PowerShell (que forma parte de las herramientas de administración de RSAT). Primero, debe convertir el archivo de imagen en una matriz de bytes y luego usar el cmdlet Set-ADUser para establecerlo como el valor del atributo thumbnailPhoto.
Import-Module ActiveDirectory
$photo = [byte[]](Get-Content C:\PS\jkuznetsov_photo.jpg -Encoding byte)
Set-ADUser jkuznetsov -Replace @{thumbnailPhoto=$photo}Lo mismo en PowerShell one-liner:
Set-ADUser jkuznetsov -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\ps\jkuznetsov_photo.jpg" -Encoding byte))}Después de ejecutar estos comandos, la foto del usuario almacenada en la base de datos de Active Directory se mostrará en Outlook, Lync/Skype, OWA, etc. (puede llevar algún tiempo hasta el final de la replicación de AD y la actualización de GAL).
Puede abrir las propiedades del usuario en la consola Usuarios y equipos de Active Directory (ADUC), ir a la pestaña Editor de atributos y asegurarse de que el atributo thumbnailPhoto ahora contenga un valor.
Administración de fotos de usuarios en Exchange y Outlook Web Access
Exchange Management Shell admite la misma característica de importar fotos de usuarios de AD. Para hacerlo, puede usar el cmdlet Import-RecipientDataProperty.
Nota. El cmdlet Import-RecipientDataProperty en Exchange 2010 no permite cargar una imagen de más de 10 KB.
El comando EMS para actualizar una foto del usuario jkuznetsov se verá así:
Import-RecipientDataProperty -Identity “jkuznetsov” -Picture -FileData ([Byte[]] $(Get-Content -Path “C:\PS\jkuznetsov_photo.jpg” -Encoding Byte -ReadCount 0))EMS en Exchange 2013/2016 usa otro cmdlet para administrar las fotos de los usuarios: Set-UserPhoto. Los siguientes comandos se utilizan para agregar la foto de un usuario en estas versiones de 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:$FalsePara eliminar una foto en miniatura de Active Directory, use el comando:
Remove-UserPhoto -Identity jkuznetsovLos usuarios también pueden cambiar su foto de perfil a través de Outlook Web Access (OWA). Haga clic en su cuenta en la esquina superior derecha, seleccione Editar información -> foto -> haga clic en el botón cambiar y especifique la ruta al jpeg archivo con la foto del usuario.
¿Cómo importar fotos de usuario a AD de forma masiva con PowerShell?
Puede cargar y administrar de forma masiva las fotos de los usuarios en Active Directory con PowerShell. Cree un archivo CSV que contenga una lista de cuentas de usuario y los nombres de archivo de fotos correspondientes. Puede utilizar el formato separado por comas del
import.csvarchivo:
AD_username, Photo
asmith, C:\PS\asmith.jpg
klinton@adatum.com, C:\PS\klinton.jpg
jkuznetsov, C:\PS\jkuznetsov.png
El siguiente comando de una sola línea de PowerShell obtendrá la lista de usuarios de un archivo CSV y actualizará (cargará) sus fotos en Active Directory:
Import-Csv C:\PS\import.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}¿Cómo exportar una foto de usuario de Active Directory a un archivo JPG?
Puede guardar una foto de usuario de AD en un archivo gráfico. Para hacerlo, seleccione el usuario usando el cmdlet Get-ADUser:
$ADuser = Get-ADUser jkuznetsov-Properties thumbnailPhotoY guarde el contenido del atributo thumbnailPhoto en un archivo JPG:
$ADuser.thumbnailPhoto | Set-Content c:\PS\jkuznetsov.jpg -Encoding byte
Con el siguiente script de PowerShell, puede exportar fotos de todos los usuarios desde un contenedor específico (OU) a archivos:
Import-Module ActiveDirectory
$ADusers= Get-ADUser -Filter * -SearchBase "OU=Users,OU=Paris,DC=a-d,DC=com" -Properties thumbnailPhoto | ? {$_.thumbnailPhoto}
foreach ($ADuser in $ADusers) {
$name = $ADuser.SamAccountName + ".jpg"
$ADuser.thumbnailPhoto | Set-Content $name -Encoding byte
}Y finalmente, hay algunas consultas útiles. El primero permite seleccionar a todos los usuarios que tienen una foto en el atributo thumbnailPhoto AD:
Get-ADUser -Filter * -properties thumbnailPhoto | ? {$_.thumbnailPhoto} | select NameEl segundo te permite encontrar usuarios sin foto:
Get-ADUser -Filter * -properties thumbnailPhoto | ? {(-not($_.thumbnailPhoto))} | select NameAdición de una pestaña de fotos a la Consola de usuarios y equipos de Active Directory
Si no le gusta PowerShell, puede usar las herramientas gráficas (GUI) para administrar las fotos de los usuarios de Active Directory.
Hay una serie de herramientas de terceros que permiten configurar fotos para usuarios de AD en editores gráficos más convenientes. Sin embargo, la funcionalidad de tales herramientas es redundante y existen ciertos riesgos de usar software de terceros para editar AD.
Generalmente sugiero usar la pequeña biblioteca AdExt.dll, que agrega una pestaña separada para agregar una foto directamente a la consola ADUC.
Puede descargar la biblioteca AdExt.dll aquí: AdExt-dll-ADUC.zip
Para instalar la biblioteca, ejecute el símbolo del sistema elevado y vaya al directorio con los archivos binarios de .Net Framework:
Para Windows x86:
cd %WinDir%\Microsoft.NET\Framework\v2.0.50727Para Windows x64:
cd %WinDir%\Microsoft.NET\Framework64\v4.0.30319
Las rutas pueden diferir según las versiones de .Net Framework instaladas.
Instale la biblioteca con el comando:
InstallUtil.exe c:\ps\ad\AdExt.dllReinicie la consola ADUC (dsa.msc), luego abra las propiedades de cualquier usuario. Tenga en cuenta que ha aparecido una nueva pestaña Foto, donde puede agregar o eliminar la foto de un usuario.
Para eliminar (anular el registro) de la biblioteca AdExt.dll, ejecute el comando:
InstallUtil.exe /u c:\ps\ad\AdExt.dllHay dos secciones en la pestaña Foto:
Al cargar una foto a través del atributo thumbnailPhoto, la foto se reduce automáticamente a una resolución de 96×96 y la calidad se selecciona para que el tamaño no supere los 10 Kb.
Si carga una imagen a través de jpegPhoto, la calidad de la imagen cambia para que el tamaño de la foto sea inferior a 100 Kb.


