Gráfico práctico: Asignación masiva de licencias
Asignar licencias a un grupo de usuarios
Un comentario de un lector sobre el artículo que cubre cómo asignar licencias a cuentas de usuario con el SDK de Microsoft Graph PowerShell solicitó un ejemplo que mostrara cómo leer cuentas desde un CSV y asignar licencias a esas cuentas. En otras palabras, cómo utilizar PowerShell para la asignación masiva de licencias a cuentas de usuarios de destino. Es el tipo de cosas que hace la gente cuando le presenta nuevos productos a un inquilino.
Cuando Microsoft finalmente lance Microsoft 365 Copilot para consumo público, me imagino que las organizaciones dispuestas a pagar el precio de $30 por usuario al mes buscarán algún tipo de mecanismo de asignación masiva después de decidir quién obtiene las licencias de Copilot. Dado que Copilot requiere que los inquilinos tengan licencias empresariales de Microsoft 365, pueden utilizar licencias basadas en grupos. Ese es el mejor enfoque y el script que se analiza aquí es en gran medida un mecanismo de asignación que puede hacer usted mismo para aquellos que no pueden utilizar licencias basadas en grupos. Por otra parte, siempre es bueno comprender cómo funcionan las cosas para poder crear su propia automatización si es necesario.
Encontrar cuentas de usuario para procesar
Conceptualmente, los pasos del procesamiento son simples. El primer paso es importar detalles de las cuentas de usuario de destino desde un archivo CSV. Alternativamente, puede utilizar otro mecanismo para establecer el conjunto de cuentas objetivo. Los mecanismos adecuados incluyen:
- Membresía de un grupo de Microsoft 365 (incluidos los grupos dinámicos). Debe filtrar la membresía del grupo para eliminar las cuentas de invitados.
- Membresía de una lista de distribución (incluidas las listas de distribución dinámicas). Las listas de distribución pueden incluir objetos a los que no se puede asignar una licencia, como carpetas públicas o usuarios de correo, por lo que es necesario realizar algunos filtros.
- Membresía de una unidad administrativa de Entra ID.
- Las cuentas de usuario se encuentran aplicando un filtro al Get-MgUser cmdlet.
Por ejemplo, puede encontrar un conjunto de cuentas de destino buscando todas las cuentas ubicadas en un país determinado:
[array]$Users = Get-MgUser -All -Filter "country eq 'United States'"Por supuesto, el uso de filtros para buscar cuentas de usuario solo funciona si las propiedades de la cuenta contienen información precisa.
Creación de una matriz de usuarios de destino para la asignación masiva de licencias
El punto es que no importa cómo generes un conjunto de cuentas objetivo. Lo único importante es que su secuencia de comandos proporcione un conjunto de identificadores que puedan usarse para la asignación de licencias. Esos identificadores pueden ser identificadores de objetos de cuenta (GUID) o nombres principales de usuario.
Para este ejemplo, debido a que mucha gente usa archivos CSV para señalar cuentas de destino, eso es lo que hago en el script de ejemplo:
$InputFile = "c:\temp\Users.csv"
[array]$Users = Import-CSV $InputFile
Los datos contenidos en la matriz $Users contienen el nombre principal del usuario y el nombre para mostrar de las cuentas a las que queremos asignar licencias:
UPN DisplayName
--- -----------
Lotte.Vetler@office365itpros.com Lotte Vetler
Hans.Flick@office365itpros.com Otto Flick
James.Ryan@office365itpros.com James Ryan
Hans.Geering@office365itpros.com Hans Geering
Joe.Sop@contoso.com Joe Sop
Ben.James@office365itpros.com Ben James
Brian.Weakliam@office365itpros.com Brian Weakliam
Asignación de licencias a cada cuenta de usuario
El trabajo estará a medio hacer cuando el conjunto de cuentas de usuario objetivo esté disponible. Después de todo, lo único que queda por hacer es ejecutar el cmdlet Set-MgUserLicense para cada cuenta. Bueno, eso es ciertamente cierto si desea realizar una operación única, pero es mejor crear algunos controles y equilibrios en cualquier código de script que pueda reutilizarse.
Para ilustrar lo que quiero decir, examine el procesamiento que se muestra en la Figura 1.
El guión:
- Encuentra los productos suscritos (SKU) conocidos por el inquilino y selecciona los SKU que todavía tienen algunas licencias disponibles.
- Presenta la lista de SKU al usuario para permitirle elegir qué licencia asignar a los usuarios de destino.
- Comprueba que existen suficientes licencias disponibles para asignar a todos los usuarios de destino.
- Comprueba que cada usuario de destino no tenga ya la licencia en su conjunto asignado.
- Si la licencia no está presente para un usuario, intente asignar la licencia a la cuenta (nota: si su inquilino usa unidades administrativas restringidas, solo las cuentas que tengan funciones de administrador para las unidades administrativas pueden asignar licencias a las cuentas de los miembros).
- Captura detalles del éxito o fracaso de la asignación de licencia y registra la información en un objeto de lista (Figura 2).
- Informa los detalles del procesamiento, incluida cuántas asignaciones de licencias exitosas y fallidas ocurrieron.
La cadena de eliminación de Microsoft 365 y la gestión de rutas de ataque
Una estrategia de ciberseguridad eficaz requiere una comprensión clara y completa de cómo se desarrollan los ataques. Lea este documento técnico para obtener la información experta que necesita para defender su organización.
Más mejoras posibles
Pasé una tarde feliz jugando con el guión para anticiparme a algunas de las situaciones que podrían encontrarse durante las operaciones de asignación de licencias, pero creo que apenas toqué la superficie. Se podría hacer mucho más para expandir el script para manejar diferentes condiciones, como por ejemplo:
- Asignar múltiples SKU de productos al mismo tiempo.
- Deshabilitar los planes de servicio que la organización no quiere que las personas usen de los SKU de productos. Por ejemplo, la organización podría decidir que Viva Engage (Yammer) no es necesario y, por lo tanto, deshabilita el plan de servicio Viva Engage Core en SKU como Office 365 E3 y E5. Eso es posible, pero si desactiva Viva Engage, perderá algunas funciones de Teams, como la aplicación de preguntas y respuestas en las reuniones.
- Comparta los resultados del procesamiento de asignación de licencia con otras personas por correo electrónico o Teams.
No dude en modificar el script que escribí (disponible para descargar desde GitHub) para agregar sus ideas. Puede que no esté de acuerdo con tus sugerencias, pero al menos podemos tener una discusión.
Asignación masiva de licencias automatizada a su manera
PowerShell hace posible automatizar las operaciones de la forma en que usted desea que se hagan las cosas, en lugar de la forma en que Microsoft cree que se deben hacer las cosas. Esa es su gran ventaja y la razón principal por la que todo administrador de Microsoft 365 debería dominar PowerShell.
Si asiste a la Conferencia de Expertos en Atlanta (19 y 20 de septiembre de 2023), asegúrese de asistir al Gran Script-Off de PowerShell para divertirse y apoyar a los concursantes en su lucha con los desafíos que les plantearemos. Todos los desafíos son tareas comunes de automatización de inquilinos de Microsoft 365, por lo que es posible que usted también aprenda algo.

