Asignacion desde administracion de iconos a usuarios de dominio.
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