SDK de Microsoft Graph PowerShell: operaciones de usuarios y grupos
Mover tareas comunes al gráfico
En la primera parte de esta serie, expliqué cómo el SDK de Microsoft Graph PowerShell simplifica el uso de la API de Microsoft Graph al reemplazar las llamadas API con cmdlets de PowerShell más familiares. También mostré cómo instalar el SDK y conectarme para ejecutar sus primeros cmdlets.
Algunas de las actividades más comunes que deben realizar los administradores implican la gestión de usuarios y grupos. Este artículo profundiza en el uso del SDK para realizar tareas diarias comunes para administrar usuarios y grupos a través de Graph.
Un lugar para administrar Microsoft 365 (más o menos...)
Uno de los mayores beneficios de Microsoft Graph API y SDK es la capacidad de administrar muchos aspectos de Microsoft 365 desde un solo lugar. Esto puede parecer una cosa pequeña, pero cuando comienzas a automatizar escenarios más complejos, realizar un seguimiento de los módulos necesarios es engorroso y asegurarte de que tu entorno esté preparado lleva tiempo. Sin mencionar mantener actualizados todos los diferentes módulos.
Un caso atípico curioso es la falta de puntos finales para administrar Exchange Online. Si bien se puede acceder a los datos del buzón a través de Graph, la mayoría de las tareas de administración de Exchange Online (por ejemplo, listas de direcciones, reglas de flujo de correo) aún deben realizarse a través del módulo Exchange Online PowerShell (recientemente actualizado a la versión 3). Exchange tiene sus propias API internas que aún no están disponibles a través de Graph. Esto significa que la administración de buzones de correo no es algo que admita el SDK (ni siquiera la API Graph).
Usar filtrado y búsqueda
Un escenario común para muchos administradores es devolver datos basados en información parcial. Por ejemplo, buscar todos los usuarios dentro de un departamento específico. El parámetro de consulta -filter se utiliza para filtrar resultados según criterios conocidos y admite operadores de filtro OData estándar (es igual a, no es igual a, menor que, etc.) y funciones (empieza con/termina con). El soporte para operadores varía según los módulos y puntos finales, por lo que vale la pena consultar la documentación al planificar sus scripts.
Los filtros admiten operadores condicionales (y/o) para compilar consultas más complejas. Por ejemplo, el siguiente comando consulta a los usuarios con su departamento configurado en "Marketing":
Get-MgUser -Filter "department eq 'Marketing'"Luego agregue comienza con para buscar usuarios de marketing que tengan un nombre para mostrar que comience con 'A':
Get-MgUser -Filter "(department eq 'Marketing') and (startswith(DisplayName,'A'))"Finalmente, agregamos otro filtro para excluir la cuenta de usuario con la dirección de correo electrónico “AllanD@M365x18562375.OnMicrosoft.com”. Tenga en cuenta que el filtro notequals (ne) es una consulta avanzada de Graph, por lo que el nivel de coherencia (eventual ) y se deben pasar los parámetros countvariable:
Get-MgUser -Filter "(department eq 'Marketing') and (startswith(DisplayName,'A')) and (Mail ne 'AllanD@M365x18562375.OnMicrosoft.com')" -ConsistencyLevel eventual -CountVariable countEn la Figura 1, vemos estos filtros en acción.
Para propiedades con valores múltiples, el filtro requiere un poco más de trabajo con la adición de operadores Lambda. Los operadores Lambda se utilizan para filtrar estas propiedades, por ejemplo, cuando se filtra por una licencia específica, como se explica en este artículo sobre cómo usar /Any Filters en consultas de Microsoft Graph API con PowerShell.
La búsqueda es otro método para encontrar datos y es útil cuando se tiene información menos específica. Por ejemplo, para buscar todos los grupos con la palabra "Ventas" en el nombre para mostrar, utilice la siguiente sintaxis.
Get-MgGroup -Search "Displayname:Sales" -ConsistencyLevel eventualTenga en cuenta que cuando se utiliza el parámetro Buscar, el parámetro ConsistencyLevel debe establecerse en eventual ya que se trata de una consulta avanzada. El parámetro CountVariable no es necesario con search. Los parámetros búsqueda y filtro también se pueden utilizar juntos para limitar aún más los resultados, como se muestra en la Figura 2.
Filtrar y buscar con el SDK de PowerShell es un proceso más sencillo que crear la llamada API manualmente. Al igual que con cualquier cmdlet del SDK de PowerShell, agregar el parámetro debug muestra el URI utilizado para aplicar los filtros (Figura 3).
Planificación y consolidación de la migración de la plataforma Microsoft
Simplifique la planificación de la migración, supere los desafíos de la migración y finalice los proyectos más rápido mientras minimiza los costos, los riesgos y las interrupciones para los usuarios.
Informes
Graph API es una herramienta útil para generar informes sobre objetos en un entorno. Por ejemplo, este artículo sobre Cómo crear un informe de licencias de Microsoft 365 utilizando el SDK de Microsoft Graph para PowerShell muestra cómo, con (relativa) facilidad y una pequeña cantidad de secuencias de comandos, se pueden crear y adaptar informes exactamente a lo que se necesita. Esto puede ser de gran ayuda cuando los informes integrados no le brindan lo que busca.
Otra tarea común es generar informes sobre Grupos de Microsoft 365. Los Grupos de Microsoft 365 son un componente clave de muchas cargas de trabajo y, como administrador, no es fácil diferenciar qué grupos están conectados a qué componentes. El objeto Grupo devuelto por Graph API contiene una gran cantidad de información para ayudar con esto y, al combinarlo con otros cmdlets en el SDK, crear estos informes personalizados es un proceso mucho más sencillo.
Por ejemplo, el siguiente código primero devuelve todos los grupos unificados de la organización (usando el filtrado en el atributo groupTypes ) y luego usa el cmdlet Get-MgGroupDrive para recuperar la URL de la Biblioteca de documentos asociada al Grupo. Estos datos se almacenan en la variable $Report junto con algunos otros detalles del grupo, listos para exportarse según sea necesario.
##Return all Unified Groups
[array]$Groups = Get-MgGroup -Filter "groupTypes/any(x:x eq 'Unified')" -All
##Create Report Array
$Report = @()
##Iterate each Group to retrieve the Drive URL and append to the Report
Foreach($Group in $Groups){
$Drive = Get-MgGroupDrive -GroupId $Group.id
$DriveDetails = [PSCustomObject]@{
GroupID = $Group.id
GroupName = $Group.displayname
Email = $Group.mail
URL = $Drive.webURL
}
$Report += $DriveDetails
}
Este informe rápido (el resultado se muestra en la Figura 4) muestra lo fácil que es recuperar la información que necesita sin mucho esfuerzo.
Gestión masiva
Localizar e informar sobre usuarios y grupos a través del SDK es bueno, pero una gran parte de la administración de un entorno de Microsoft 365 consiste en actualizar y crear nuevos objetos. Las licencias son una vez más un buen ejemplo aquí, como se describe en este artículo sobre Administración de licencias de Microsoft 365 para cuentas de Azure AD con el SDK de Microsoft Graph PowerShell.
Otro caso de uso común es la creación masiva de objetos, por ejemplo, la creación masiva de usuarios. Un escenario típico aquí es el aprovisionamiento de usuarios desde un archivo CSV extraído de una base de datos de recursos humanos. Generalmente, aprovisionamos usuarios y agregamos una licencia; en este caso, los agregamos a un grupo de licencias de Azure AD.
Usando el archivo CSV que se muestra en la Figura 5, la siguiente secuencia de comandos aprovisiona a los usuarios, usando el formato primer nombre.apellido@dominio.com, establece una contraseña temporal y agrega el usuario al grupo de licencias:
##Retrieve the Licensing Group
$LicenseGroup = Get-MgGroup -Filter "Displayname eq 'M365-E3-License'"
##Import the CSV
$csv = Import-Csv C:\temp\NewStaff.csv
##Set the Domain Suffix
$DomainSuffix = "M365x18562375.onmicrosoft.com"
##Loop through each user
foreach($user in $csv){
$PasswordProfile = @{
Password = $user.'Temporary Password'
}
##Provision the user
$UserObject = New-MgUser -DisplayName "$($user.'first name') $($user.surname)" -PasswordProfile $PasswordProfile -AccountEnabled -MailNickname "$($user.'first name').$($user.surname)" -UserPrincipalName "$($user.'first name').$($user.surname)@$DomainSuffix"
##Add the user to the license group
New-MgGroupMember -GroupId $LicenseGroup.id -DirectoryObjectId $UserObject.id
}
Resumen
En este artículo, analicé algunos escenarios comunes en los que el SDK de Microsoft Graph PowerShell puede ayudar a los administradores de inquilinos a automatizar procesos comunes. No hay nada terriblemente nuevo aquí para cualquiera que haya estado usando PowerShell para administrar su inquilino durante un tiempo, aunque tener todo disponible en un módulo tiene ventajas. Adaptar el código de los otros módulos no debería ser un gran desafío una vez que domines los conceptos básicos. En la siguiente parte de esta serie, las cosas se complican un poco más a medida que profundizamos en la interacción con servicios individuales como Teams y Exchange y exploramos algunas de las ventajas interesantes de usar Graph.
Gestión de riesgos de ciberseguridad para Active Directory
Descubra cómo prevenir y recuperarse de ataques AD a través de estas soluciones de gestión de riesgos de ciberseguridad.




