Uso de la foto de usuario de Active Directory como imagen de inicio de sesión de cuenta en Windows
La mayoría de las aplicaciones de Microsoft Office (Outlook, SharePoint, Office365, Skype for Business, etc.) permiten usar una foto de Active Directory (Azure AD) del usuario que ha iniciado sesión como avatar del usuario en su interfaz. En este artículo, le mostraremos cómo usar la foto de un usuario de Active Directory como una imagen de inicio de sesión de cuenta (avatar) para un perfil de usuario de Windows que aparece en la pantalla de bloqueo, la pantalla de bienvenida, en el menú Inicio, etc.
Para esta tarea, usaremos un pequeño script de inicio de sesión de PowerShell. La secuencia de comandos debe ejecutarse cuando el usuario inicia sesión en Windows, obtener la foto del usuario de Active Directory (atributo thumbnailPhoto) y configurarla como la imagen de perfil del perfil de usuario de Windows.
¿Cómo agregar fotos para usuarios de Active Directory?
La foto del usuario se almacena en un atributo especial (
thumbnailPhoto) de la cuenta en Active Directory. Puede configurar imágenes para sus usuarios mediante herramientas de terceros o el cmdlet Set-ADUser del módulo Active Directory para Windows PowerShell.
-
Guarde la foto del usuario en el disco en formato JPEG/BMP (el tamaño máximo del archivo de imagen del avatar no debe exceder los 100 KB y la resolución de la imagen hasta 96×96 píxeles);
Para configurar la imagen de la cuenta de AD para un usuario
jchan, ejecute los comandos:
$photo = [byte[]](Get-Content C:\PS\jchan_photo.jpg -Encoding byte) Set-ADUser jchan -Replace @{thumbnailPhoto=$photo}Abra la consola Usuarios y equipos de Active Directory (ADUC), cambie a la pestaña Editor de atributos y compruebe si el atributo thumbnailPhoto ahora contiene un valor.
Para obtener más detalles sobre cómo administrar las fotos de los usuarios en AD, consulte la publicación “¿Cómo agregar o actualizar una foto de usuario en Active Directory? ”
Cree un GPO para aplicar una imagen de perfil de cuenta en Windows
Ahora debe configurar una política de grupo de dominio que configurará las opciones de entorno para usar fotos de usuario de Active Directory como imágenes de inicio de sesión de cuenta en computadoras con Windows.
Abra la consola de administración de directivas de grupo (
gpmc.msc). Cree un nuevo GPO y vincúlelo a la OU (Unidad organizativa) que contiene las computadoras de los usuarios;
En Windows, puede configurar la imagen del avatar del usuario (la ruta al archivo JPG utilizado para el perfil del usuario) a través de la clave de registro HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users. Debe permitir que los usuarios cambien su foto de perfil directamente a través del registro;
-
Puede implementar los permisos de clave de registro en el dominio de AD mediante GPO. Vaya a la sección GPO Configuración del equipo -> Políticas -> Configuración de Windows -> Configuración de seguridad -> Registro. Cree una nueva clave de registro (Agregar clave) con la ruta MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users;
Otorgar permisos de Control total para el grupo de usuarios del dominio (
[DomainName]\Users) en la pantalla Seguridad de la base de datos;
En la siguiente ventana, seleccione la opción Reemplazar el permiso existente en todas las subclaves con permisos heredables, de lo contrario, los usuarios no tendrán privilegios para las subclaves de registro anidadas;
Habilite la opción GPO Configurar el modo de procesamiento de loopback de la política de grupo del usuario=Fusionar (Configuración del equipo -> Plantillas administrativas -> Sistema -> Política de grupo). Esto le permitirá aplicar la política a OU con cuentas de computadora.
Establecer foto de perfil de cuenta de usuario en Windows con PowerShell
A continuación, debe crear un script de PowerShell que obtendrá la foto del usuario actual de Active Directory, la guardará en un archivo JPG y la configurará como la imagen de perfil del usuario.
Hay dos formas de obtener la foto de un usuario de AD. Puede usar el cmdlet Get-ADUser del módulo ActiveDirectory (este módulo debe instalarse en todas las computadoras a través de RSAT, o simplemente puede copiar los archivos del módulo RSAT-AD-PowerShell necesarios sin instalar RSAT). Para que el script sea universal y funcione correctamente sin instalar RSAT (incluso en Windows 7), conectaremos AD usando la clase ADSISearcher.
SetADPicture.ps1 código de secuencia de comandos:
Function ResizeImage {
Param (
[Parameter(Mandatory = $True, HelpMessage = "image in byte")]
[ValidateNotNull()]
$imageSource,
[Parameter(Mandatory = $true, HelpMessage = "Betwwen 16 and 1000")]
[ValidateRange(16, 1000)]
$canvasSize,
[Parameter(Mandatory = $true, HelpMessage = "Between 1 and 100")]
[ValidateRange(1, 100)]
$ImgQuality = 100
)
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$imageBytes = [byte[]]$imageSource
$ms = New-Object IO.MemoryStream($imageBytes, 0, $imageBytes.Length)
$ms.Write($imageBytes, 0, $imageBytes.Length);
$bmp = [System.Drawing.Image]::FromStream($ms, $true)
# Image size after conversion
$canvasWidth = $canvasSize
$canvasHeight = $canvasSize
# Set picture quality
$myEncoder = [System.Drawing.Imaging.Encoder]::Quality
$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
$encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($myEncoder, $ImgQuality)
# Get image type
$myImageCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object { $_.MimeType -eq 'image/jpeg' }
# Get aspect ration
$ratioX = $canvasWidth / $bmp.Width;
$ratioY = $canvasHeight / $bmp.Height;
$ratio = $ratioY
if ($ratioX -le $ratioY) {
$ratio = $ratioX
}
# Create an empty picture
$newWidth = [int] ($bmp.Width * $ratio)
$newHeight = [int] ($bmp.Height * $ratio)
$bmpResized = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
$graph = [System.Drawing.Graphics]::FromImage($bmpResized)
$graph.Clear([System.Drawing.Color]::White)
$graph.DrawImage($bmp, 0, 0 , $newWidth, $newHeight)
# Create an empty stream
$ms = New-Object IO.MemoryStream
$bmpResized.Save($ms, $myImageCodecInfo, $($encoderParams))
# cleanup
$bmpResized.Dispose()
$bmp.Dispose()
return $ms.ToArray()
}
$ADUserInfo = ([ADSISearcher]"(&(objectCategory=User)(SAMAccountName=$env:username))").FindOne().Properties
$ADUserInfo_sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
If ($ADUserInfo.thumbnailphoto) {
$img_sizes = @(32, 40, 48, 96, 192, 200, 240, 448)
$img_base = "C:\Users\Public\AccountPictures"
$reg_key = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\$ADUserInfo_sid"
If ((Test-Path -Path $reg_key) -eq $false) { New-Item -Path $reg_key } { write-verbose "Reg key exist [$reg_key]" }
Try {
ForEach ($size in $img_sizes) {
$dir = $img_base + "\" + $ADUserInfo_sid
If ((Test-Path -Path $dir) -eq $false) { $(New-Item -ItemType directory -Path $dir).Attributes = "Hidden" }
$file_name = "Image$($size).jpg"
$path = $dir + "\" + $file_name
Write-Verbose " Crete file: [$file_name]"
try {
ResizeImage -imageSource $($ADUserInfo.thumbnailphoto) -canvasSize $size -ImgQuality 100 | Set-Content -Path $path -Encoding Byte -Force -ErrorAction Stop
Write-Verbose " File saved: [$file_name]"
}
catch {
If (Test-Path -Path $path) {
Write-Warning "File exist [$path]"
}
else {
Write-Warning "File not exist [$path]"
}
}
$name = "Image$size"
try {
$null = New-ItemProperty -Path $reg_key -Name $name -Value $path -Force -ErrorAction Stop
}
catch {
Write-Warning "Reg key edit error [$reg_key] [$name]"
}
}
}
Catch {
Write-Error "Check permissions to files or registry."
}
}
El script obtiene el valor del atributo thumbnailphoto del usuario actual de Active Directory y lo guarda en la carpeta local.
C:\Users\Public\AccountPictures\{User SID}. La carpeta contendrá archivos JPG con diferentes resoluciones para diferentes elementos de la interfaz de Windows: image32.jpg (32×32), image40.jpg (40×40), etc.
Para vincular estos archivos de fotos a un perfil de usuario, el script creará asignaciones bajo la clave de registro HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{User_SID}.
Copie el código del script de PowerShell y guárdelo en un nuevo archivo PS1 en un controlador de dominio en la carpeta NetLogon (
\\a-d.site\NETLOGON\SetADPicture.ps1)
Importante. Si guarda el script de inicio de sesión de PS1 en el directorio NETLOGON, no necesita configurar por separado las opciones de la política de ejecución de scripts de PowerShell.
Debe ejecutar este script de PowerShell cuando el usuario inicie sesión en Windows. La forma más fácil de implementar esto es usar la función de secuencia de comandos de inicio de sesión de GPO.
Para hacerlo, abra el GPO creado anteriormente y vaya a Configuración de usuario -> Políticas -> Configuración de Windows -> Scripts (Inicio/Cierre de sesión);
Seleccione Iniciar sesión, vaya a la pestaña PowerShell Scripts y haga clic en Agregar;
Especifique la ruta UNC completa al archivo de script SetADPicture.ps1 en NETLOGON.
Debe cerrar sesión e iniciar sesión (dos veces) para aplicar la nueva configuración de GPO y establecer su foto de Active Directory en su perfil de usuario de Windows.
Compruebe si la foto del usuario de AD ahora se muestra en la pantalla de inicio de sesión de Windows, el menú Inicio y en otros elementos de la interfaz. Por ejemplo, verifique su imagen de usuario en la pestaña Cuenta en el panel Configuración (comando URI de acceso directo
ms-settings:accounts).
Si la política no funcionó:
Si Windows no está activado, no mostrará el avatar del usuario (consulte el estado de activación de Windows en las computadoras de los usuarios);
Verifique la configuración de GPO resultante y asegúrese de que la política Aplicar la imagen de inicio de sesión predeterminada a todos los usuarios (Configuración de la computadora-> Políticas-> Plantillas administrativas-> Panel de control-> Cuentas de usuario) no esté habilitada;
Resuelva problemas de directiva de grupo en equipos de destino con la herramienta gpresult.
Puede usar este script de PowerShell para configurar fotos de usuario de Active Directory como imágenes de inicio de sesión de cuenta para todos los sistemas operativos compatibles: Windows 11, 10, 8.1 y Windows Server 2022, 2019, 2016, 2012 R2 (incluidos escenarios con hosts RDS independientes y granjas de servicios de escritorio remoto).







