Poner la mejor cara posible en las cuentas de invitados
Hace varios años, escribí sobre por qué es bueno agregar fotos de usuarios a las cuentas de invitados de Azure AD. En ese momento, Teams aún estaba en sus inicios, pero ya estaba claro que Azure B2B Collaboration es un método importante para permitir que personas externas accedan a los recursos de inquilinos. Darles una cara a esas personas externas agregando fotos a sus cuentas de invitado tiene sentido en un mundo donde las aplicaciones resaltan las fotos de los usuarios de muchas maneras, como mostrarlas en los encabezados de correo electrónico o en los chats de Teams.
El tiempo avanza y la sombra proyectada por los 280 millones de usuarios de Teams en todo el panorama de Microsoft 365 ahora es enorme. El paso del tiempo también significa que la obsolescencia del módulo Azure AD que contiene el cmdlet Set-AzureADUserThumbnailPhoto para actualizar las fotos de los usuarios pronto quedará obsoleto. Es hora de descubrir cómo actualizar fotos para cuentas de invitados con el SDK de PowerShell de Microsoft Graph, especialmente si ha migrado un montón de contactos de correo para convertirse en cuentas de invitados.
Miniaturas para invitados
Antes de comenzar, es importante comprender que las cuentas de invitados solo necesitan fotos en miniatura (pequeñas). Las cuentas de usuario necesitan fotos de mayor definición para verse bien cuando las fotos aparecen en las reuniones en línea de Teams (si no está usando un avatar de malla). Como se explica en este artículo, es mejor usar el cmdlet Set-UserPhoto de Exchange Online para actualizar las cuentas de usuario porque carga imágenes de mayor calidad en los buzones de correo que las miniaturas que usa Azure AD.
Una parte importante de la preparación es encontrar fotos adecuadas para las cuentas de invitados. Puede pedir a los invitados su imagen preferida o hacer una búsqueda en Internet para encontrar fotos adecuadas. LinkedIn es mi primer puerto de escala cuando busco la foto de alguien. La gente suele publicar una bonita foto de sí mismos en LinkedIn que se ve bien incluso cuando se reduce a una miniatura. Otra ventaja de usar imágenes de LinkedIn es que se incluyen en los perfiles públicos. En otras palabras, las personas cargan su imagen para que otros puedan ver cómo se ven. Como tal, es poco probable que se encuentre con problemas de derechos de autor al usar estas imágenes para cuentas de invitados.
Es fácil copiar fotos de los perfiles de LinkedIn y guardarlas como archivos JPG usando un programa como Paint. Guardo las fotos usando sus dimensiones originales (muchas fotos de LinkedIn son de 600 x 600 píxeles) y dejo que Azure AD las comprima cuando agrega imágenes en miniatura a las cuentas. La imagen más grande que he usado es de 144 KB; la más pequeña (una imagen de LinkedIn muy antigua) tiene 6 KB.
El script espera que las imágenes estén disponibles en una ubicación con nombre. Usé c:\UserPhotos\; puede actualizar la secuencia de comandos para que apunte a cualquier ubicación que elija usar. Lo importante es que los archivos de imagen tengan el nombre del nombre para mostrar de la cuenta de invitado. Por ejemplo:
Jack Jones.jpg
Jane Smith.jpg
Figura 1: Carpeta que contiene miniaturas de fotos para actualizar las cuentas de invitados de Azure AD
Procesamiento de guiones
El guión pasa por estos pasos
- Conéctese a Microsoft Graph con el permiso User.ReadWrite.All (requerido para actualizar las cuentas de Azure AD).
- Defina la ubicación para encontrar las fotos.
- Defina una foto predeterminada para usar cuando no haya una disponible para una cuenta de invitado. Utilizo un ícono de persona simple libre de regalías (utilice una búsqueda en Internet para encontrar su imagen preferida).
- Use el cmdlet Get-MgUser para buscar todas las cuentas de invitados.
- Algunas organizaciones agregan el nombre de la empresa para la que trabaja una cuenta de invitado al nombre para mostrar. Para normalizar el nombre para mostrar, la secuencia de comandos busca un paréntesis de apertura y elimina el texto adjunto si lo encuentra. Por ejemplo, el guión convierte «Tony Redmond (Practical 365)» en «Tony Redmond». Si su organización utiliza un método diferente para resaltar las empresas a las que pertenecen los invitados, deberá ajustar este código.
- Para cada cuenta de invitado, verifique si hay una foto disponible en la biblioteca. Si es así, compruebe si es más reciente que la foto aplicada actualmente a la cuenta. El script usa un atributo personalizado para almacenar una marca de tiempo cuando aplica una foto, por lo que verifica eso (si hay alguno disponible) y la marca de tiempo de la foto para decidir si hay una foto más nueva disponible. Si es así, el script actualiza la cuenta con el cmdlet Set-MgUserPhotoContent
- Si la cuenta nunca tuvo una foto y hay una disponible, el script actualiza la cuenta.
Puede descargar el script desde GitHub. Siéntase libre de sugerir mejoras.
Acelerando las cosas
Obtener todas las cuentas de invitados para procesar fotos puede ser una buena manera de realizar una población inicial de miniaturas. El script también maneja las actualizaciones cuando hay nuevas fotos disponibles para una cuenta. Por ejemplo, cambiará la imagen predeterminada y la reemplazará con una imagen personalizada. Sin embargo, procesar todas las cuentas de invitados cada vez no es la forma más inteligente de proceder a menos que solo haya unos pocos cientos de cuentas con las que lidiar. Dada la popularidad de Teams y el uso de cuentas de invitados por parte de SharePoint para compartir documentos con usuarios externos, es probable que la cantidad de cuentas de invitados crezca con el tiempo. Las organizaciones pueden eliminar algunas cuentas de invitados a través de revisiones de acceso de Azure AD o escribiendo un script de PowerShell para identificar cuentas de invitados inactivas, pero en general, se puede esperar un crecimiento constante en el número de invitados.
Para acelerar las cosas, podemos encontrar qué cuentas de invitado necesitan nuestra atención usando el cmdlet Get-MgPhoto para detectar si una cuenta tiene una foto, no tiene foto o usa la foto predeterminada (según su alto y ancho en píxeles). Este script hace el trabajo y genera matrices de cuentas a las que les faltan fotos y aquellas con la foto predeterminada.
[array]$Guests = Get-MgUser -Filter "Usertype eq 'Guest'" -All | Sort-Object DisplayName $GuestsNoPhotos = [System.Collections.Generic.List[Object]]::new() [int]$GuestWithPhotos = 0 ForEach ($Guest in $Guests) { $Photo = Get-MgUserPhoto -UserId $Guest.Id -ErrorAction SilentlyContinue If ($Photo) { If ($Photo.Height -eq 150 -and $Photo.Width -eq 150) { Write-Host ("Guest account {0} has a default photo" -f $Guest.DisplayName) -foregroundcolor Yellow $DataLine = [PSCustomObject] @{ Name = $Guest.DisplayName Id = $Guest.Id Photo = "Default" } $GuestsNoPhotos.Add($DataLine) } Else { # Write-Host ("Guest account {0} has a personalized photo" -f $Guest.DisplayName) $GuestsWithPhotos++ } } Else { Write-Host ("Guest account {0} has no photo" -f $Guest.DisplayName) -foregroundcolor red $DataLine = [PSCustomObject] @{ Name = $Guest.DisplayName Id = $Guest.Id Photo = "Missing" } $GuestsNoPhotos.Add($DataLine) } } [array]$MissingPhotos = $GuestsNoPhotos | Where-Object {$_.Photo -eq "Missing"} [array]$DefaultPhotos = $GuestsNoPhotos | Where-Object {$_.Photo -eq "Default"} Write-Host " " Write-Host ("Total guest accounts (0}" -f $Guests.Count) Write-Host ("Guest accounts with personalized photos {0}" -f $GuestsWithPhotos) Write-Host ("Guest accounts with the default photo {0}" -f $DefaultPhotos.Count) Write-Host ("Guest accounts with missing photos {0}" -f $MissingPhotos.Count) Write-Host "" Write-Host ("Please find photos for these accounts: {0}" -f ($MissingPhotos.Name -join ", ")) Write-Host ("Consider replacing the default photo with a customized image for these accounts: {0}" -f ($DefaultPhotos.Name -join ", "))
Para revisar qué cuentas de invitados necesitan atención, puede exportar la información a un archivo CSV y usarlo para rastrear la recopilación de fotos. Cuando todo está listo, el script puede leer el archivo CSV y procesar esas cuentas en lugar de tener que buscar todas las cuentas de invitados y verificar las que tienen una foto perfectamente buena.
Las cuentas de usuario también necesitan fotos
Si bien es bueno mejorar la apariencia de las cuentas de invitados con fotos, es aún más importante tener fotos para las cuentas de usuario. Las aplicaciones de Microsoft 365 muestran fotos de usuarios en tarjetas de perfil, correos electrónicos y otros lugares. Los scripts descritos aquí son fácilmente adaptables para procesar fotos para cuentas de usuario. Como se mencionó anteriormente, el cambio principal es que debe usar el cmdlet Set-UserPhoto para cargar una foto de mayor calidad. A diferencia de la búsqueda de fotos para cuentas de invitados, debería ser mucho más fácil encontrar fotos para empleados, tal vez incluso usando una fuente del sistema de recursos humanos de la organización. Al menos, esa es la teoría.