Implementación de Iconos de Usuarios de un dominio.

Comenzaremos por explicar por que es importante.

En cualquier empresa que tenga algo de organización e intención de mostrar una buena imagen tanto a clientes como a usuarios de la misma empresa, es muy importante que se sientan identificados los trabajadores, y un simple gesto como añadirles una foto de perfil al inicio de sesión como icono de usuario, para que de forma mas rápida se vea el usuario con su respectivo nombre y apellido reflejado en la pantalla.

Es simplemente para hacer una experiencia mas agradable.

Falta recalcar que no es también una simple mejora para la experiencia del usuario, también podría servir a los superiores o compañeros de trabajo para identificar los primeros dias a los compañeros, lo que viene a ser ponerles cara.

El proceso de esta implementación es realmente sencillo, solamente necesitaremos cargar en una carpeta compartida de nuestro servidor todas las fotos de nuestros usuarios y luego mediante una GPO o directiva de grupo esta misma se implementara automáticamente en el segundo inicio de sesión del usuario en cuestión.

Los pasos que vamos a seguir  son los siguientes.

Estos primeros aplican solamente en el servidor.

  • Lo primero que debemos tener son las fotos de los usuarios a los que queremos aplicar la imagen al iniciar sesión.

Lo vamos a guardar en nuestra carpeta de Directiva$ que ya está compartida en red.

Las fotos no deben exceder los 100k y la resolución debe ser de 96×96 px

El nombre de las imágenes vendrá con el nombre del usuario en cuestión.

  • Lo primero es indicar que hay que meter las fotos en una variable de entorno y lo asociamos a un usuario.

Yo en mi caso he creado un csv y lo he importado, en el esta el usuario y la ruta de su foto.

Cabe aclarar que la carpeta donde se encuentran las imágenes esta compartida en red, estamos usando la carpeta de directivas.

 Este es el script que usaremos dentro de nuestro servidor para vincular nuestro csv con los datos de los usuarios de Windows.

Import-Csv D:\Directivas\fotos\images.csv |%{Set-ADUser -Identity $_.AD_user -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.path_to_file -Encoding byte))}}

  • Creamos la directiva, en mi caso se llamara foto.

La editamos y hay que crear 2 cosas.

  • Los usuarios cuando cierren sesión se ejecute el script:

Computer>Policies>WSetings>Security>Registry

Creamos una entrada nueva en:

Machine>software>microsoft>Windows>Currentversion>accountpicture>users

Y hay que darle full control a los usuarios y reemplazar los permisos.

  • Script para cuando se haga logof se añada la imagen.

Users>WinSettings>Script>Logof

Añadimos nuestro scipt

  • El script que tenemos que meter en un .ps1 para que se ejecute al hacer logoff es:

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.»

}

}

  • Ahora vamos a “Linkar” en el dominio.

Autor/a: Ignacio Arregui Urbina

Curso: Administración de Sistemas MultiCloud con Azure, AWS y GCP. 

Centro: Tajamar 

Año académico: 2023-2024 

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.