Búsqueda de sitios web

Cree un nuevo grupo de Microsoft 365 con el SDK de PowerShell


Crear y habilitar en equipo un nuevo grupo

El equipo de soporte para desarrolladores de SharePoint publicó recientemente un artículo interesante sobre cómo crear un nuevo grupo de Microsoft 365 utilizando la API REST de SharePoint Online o la API Graph (Grupos). Los ejemplos utilizan las credenciales de contraseña del propietario del recurso (ROPC) de Azure AD B2C Collaboration para proteger las credenciales. ROPC es también la forma en que Apple planea actualizar las configuraciones de la aplicación de correo en dispositivos iOS para forzar el uso de autenticación moderna al conectarse a Exchange Online.

Aunque el código presentado funciona, usar el SDK de Microsoft Graph PowerShell sería más fácil. Permítanme explicarles por qué y arrojar algo de luz sobre los puntos que el artículo original no cubre.

Obtenga sus etiquetas

El artículo describe cómo crear un nuevo grupo de Microsoft 365 con una etiqueta de confidencialidad. Lo primero que debe hacer es descubrir el GUID de la etiqueta de sensibilidad a utilizar. Solo se pueden usar etiquetas de confidencialidad configuradas para la administración de contenedores, por lo que encontramos esta configuración yendo a la sección Protección de la información del portal de cumplimiento de Microsoft Purview o ejecutando PowerShell. A continuación se explica cómo conectarse a Exchange Online, luego al punto final de cumplimiento y, finalmente, devolver el conjunto de etiquetas de administración de contenedores.

Nota: Solo puede crear grupos de Microsoft 365 con etiquetas de confidencialidad cuando ejecuta el SDK de forma interactiva con permisos delegados. No hay ninguna razón obvia por la que los permisos de la aplicación no deban funcionar, pero el cmdlet New-MgGroup no se ejecutará si incluye la etiqueta de confidencialidad cuando se ejecuta con permisos de la aplicación, como al usar Azure Automation con una identidad administrada.

Connect-ExchangeOnline
Connect-IPPSSession
Get-Label | ? {$_.ContentType -eq "Site, UnifiedGroup"} | ft DisplayName, ImmutableId

DisplayName         ImmutableId
-----------         -----------
Non-business use    a49e1277-93db-4a2f-8105-43c5196b4fef
General Access      e42fd42e-7240-4df0-9d8f-d14658bcf7ce
Guest Access        c29e68f9-bc4f-413b-a741-6db8e38ad1c6
Limited Access      d6cfd185-f31c-4508-ae40-229ff18a9919
Confidential Access c99e52c6-f5ff-4050-9313-ca6a3a35710f

Crea tu grupo

Con el GUID de la etiqueta de confidencialidad elegida definida en una variable, podemos continuar y crear el nuevo grupo. Existen tres diferencias en este código:

  • La propiedad de privacidad para el nuevo grupo no está definida. No es necesario porque la configuración de privacidad (privada o pública) está controlada por la etiqueta de confidencialidad. De hecho, si define una configuración de privacidad y luego selecciona una etiqueta de confidencialidad incompatible (selecciona Privado y la etiqueta dice Público), la solicitud para crear el grupo fallará.
  • El cuerpo de la solicitud de Graph API se define en la tabla hash $NewGroupParams.
  • El cmdlet New-MgGroup se utiliza para crear el nuevo grupo pasando el cuerpo que contiene los parámetros del nuevo grupo.

Actualicé el código para agregar una llamada y encontrar el identificador de una persona específica para usarlo como propietario del grupo.

Connect-MgGraph -Scopes Group.ReadWrite.All, GroupMember.ReadWrite.All
$GroupOwner = (Get-MgUser -UserId Terry.Hegarty@office365itpros.com).Id
$Owner = "https://graph.microsoft.com/v1.0/users/" + $GroupOwner
$SensitivityLabelId = "d6cfd185-f31c-4508-ae40-229ff18a9919"
$NewGroupParams = @{
    "displayName" = "Microsoft Graph PowerShell SDK"
    "mailNickname"= "Microsoft.Graph.PowerShell.SDK"
    "description" = "People who like to discuss how to use the Microsoft Graph PowerShell SDK"
    "owners@odata.bind" = @($Owner)
    "groupTypes" =  @(
                       "Unified"
                     )
    "mailEnabled" =  "true"
    "securityEnabled" = "true"
    "assignedLabels" = @(
                        @{"LabelId"=$SensitivityLabelId}
                        )
} 

$Group = New-MgGroup -BodyParameter $NewGroupParams

Todo funciona sin problemas y el nuevo grupo está disponible en Azure AD, SharePoint Online y Exchange Online.

Usando Invoke-MgGraphRequest

La otra forma de crear el grupo es utilizar el URI y el parámetro de cuerpo con una solicitud POST ejecutada a través del cmdlet Invoke-MgGraphRequest. Básicamente, se utiliza el mismo método que en el artículo original, reemplazando Invoke-RestMethod por Invoke-MgGraphRequest.

$Uri= "https://graph.microsoft.com/v1.0/groups"
$Group = Invoke-MgGraphRequest -Method Post -Uri $Uri -Body $NewGroupParams

Aquí está lo extraño. La creación de un nuevo grupo de Microsoft 365 mediante Invoke-MgGraphRequest crea el grupo en Azure AD y SharePoint Online inmediatamente, pero retrasa la creación del grupo en Exchange Online. Por ejemplo, creé un grupo a las 15:34 y no apareció en Exchange Online hasta 30 minutos después, a las 16:14. A veces el retraso era menor, pero siempre había retraso.

Otra diferencia es que los nuevos grupos creados con New-MgGroup obedecen las políticas de direcciones de Exchange para los grupos, si están presentes. Los nuevos grupos creados con Invoke-MgGraphRequest usan una dirección MOERA para su dirección SMTP principal y luego respetan la política de direcciones una vez que el grupo existe en Exchange Online.

La gente se ha quejado en el pasado de retrasos en la creación de nuevos grupos. Aquí hay un ejemplo de la comunidad técnica de Microsoft y otro de Stackoverflow.com, pero pensé que esos problemas ya no eran un problema. Supongo que estaba equivocado.

La única explicación que se me ocurre es:

  • New-MgGroup es como el cmdlet New-UnifiedGroup y crea el nuevo grupo con una escritura dual en Exchange Online y Azure AD, que se sincroniza con SharePoint Online.
  • El uso del URI de Graph con Invoke-MgGraphRequest crea el nuevo grupo en Azure AD, que sincroniza el nuevo grupo con SharePoint Online. Posteriormente, una operación de sincronización de reposición crea el nuevo grupo en Exchange Online.

Equipo que habilita el nuevo grupo

Dada la popularidad de Teams, es posible que decida habilitar el nuevo grupo para el equipo. Este código configura un cuerpo que contiene la plantilla que se usará para el nuevo equipo (estándar) y el identificador del grupo de Microsoft 365. Luego ejecutamos el cmdlet New-MgTeam para procesar la solicitud.

$NewTeamParams = @{
  "template@odata.bind"="https://graph.microsoft.com/v1.0/teamsTemplates('standard')"
  "group@odata.bind"="https://graph.microsoft.com/v1.0/groups('$($Group.Id)')"
}
New-MgTeam -BodyParameter $NewTeamParams

Se podría hacer lo mismo usando Invoke-MgGraphRequest:

$NewTeamParams = @{
  "template@odata.bind"="https://graph.microsoft.com/v1.0/teamsTemplates('standard')"
  "group@odata.bind"="https://graph.microsoft.com/v1.0/groups('a771ae9d-6a93-4ccb-bbd0-dcfa55138f2f')"
}
$NewTeamParams = $NewTeamParams | Convertto-Json
$Uri = "https://graph.microsoft.com/v1.0/teams"
Invoke-MgGraphRequest -Uri $Uri -Method Post -Body $NewTeamParams

De cualquier manera, terminamos con un nuevo equipo creado con configuraciones heredadas de un nuevo grupo de Microsoft 365 creado usando cmdlets del SDK de Microsoft Graph PowerShell (Figura 1).

Múltiples formas de realizar el trabajo

Al igual que las figuras animadas de nuestro nuevo grupo habilitado para equipos, deberíamos estar felices de descubrir lo fácil que es crear nuevos grupos y equipos utilizando el SDK de Microsoft Graph PowerShell. No digo que esta sea la forma más fácil. Ciertamente es menos complicado usar el cmdlet New-UnifiedGroup del módulo Exchange Online para crear nuevos grupos de Microsoft 365 y el cmdlet New-Team del módulo Microsoft Teams para crear equipos. -habilite un grupo, pero es bueno tener opciones, y el SDK de Microsoft Graph PowerShell es una buena manera de proceder si solo desea trabajar con cmdlets de un solo módulo (aunque hay más de 30 submódulos en el SDK).

Artículos relacionados