Búsqueda de sitios web

Cómo actualizar de forma masiva los propietarios de grupos de Microsoft 365 con PowerShell


Los grupos de Microsoft 365 deben tener propietarios asignados, esto significa que no puede crear un nuevo grupo sin un propietario asignado, esto es cierto ya sea que cree un grupo a través del Centro de administración de Microsoft Entra o a través de Microsoft Graph PowerShell.

Con los desafíos diarios de la administración de usuarios, es posible que se encuentre en una posición en la que necesite cambiar el propietario de uno o varios grupos existentes. En esta publicación, demuestro cómo agregar y eliminar propietarios de grupos con PowerShell, así como el script necesario para actualizar varios propietarios de grupos para todos los grupos de su organización.

Si aún no ha utilizado Microsoft Graph PowerShell, consulte los siguientes recursos:

  • Cómo instalar el módulo Microsoft Graph PowerShell
  • Cómo encontrar permisos para Microsoft Graph PowerShell

Ver propietarios de grupos actuales con Get-MgGroupOwner

Para ver los propietarios actuales de su grupo objetivo, primero obtenga y almacene los detalles de su grupo objetivo, use Get-MgGroupOwner para extraer el ID de cada propietario de grupo, luego recorra cada propietario y use el cmdlet Get-MgUser para generar el información del usuario a su sesión de PowerShell.

group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"
$owners = Get-MgGroupOwner -GroupId $group.Id
Foreach ($owner in $owners){
    Get-MgUser -userid $owner.id | Select DisplayName, ID
}

Otra solución para mostrar de manera significativa a cada propietario, evitando la necesidad de realizar otra llamada a Microsoft Graph, es crear un informe con la información que ya está almacenada en la variable $owners, simplemente oculta, como se muestra a continuación:

$OwnersList = [System.Collections.Generic.List[Object]]::new()
Foreach ($owner in $owners){
    $obj = [PSCustomObject][Ordered]@{  
         "DisplayName"             = $owner.AdditionalProperties.displayName
         "ID"                      = $owner.Id
    }
    $OwnersList.Add($obj)
}
$OwnersList

Agregar un nuevo propietario de grupo

Para agregar un nuevo propietario de grupo a un grupo existente, podemos usar el cmdlet New-MgGroupOwner. El nuevo propietario debe definirse dentro de una tabla hash con un enlace OData; a continuación, definí el nuevo propietario en la variable $propietario. Asegúrese de modificar OWNER_UPN el nombre de usuario de su usuario objetivo.

$owner = @{ 
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER_UPN"
}

También necesitarás saber el ID del grupo que estás intentando modificar. La forma más sencilla de hacerlo es utilizar el cmdlet Get-MgGroup con un filtro en DisplayName, como se muestra a continuación. Asegúrese de modificar GROUP_NAME por el nombre de su grupo objetivo.

$group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"

Una vez que tenga estos dos datos, estará listo para agregar el nuevo propietario del grupo a su grupo.

 New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner

Eliminar un propietario de grupo existente

Para eliminar a un propietario de un grupo existente, debe utilizar el cmdlet Remove-MgGroupOwnerByRef. Esto nos permite eliminar a uno o todos los propietarios específicos de un grupo objetivo.

Al igual que antes, comience almacenando la información de su grupo objetivo para que podamos usarla en el siguiente paso.

$group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"

Luego utilice uno de los ejemplos anteriores para ver y almacenar los propietarios del grupo actual. Para este ejemplo, hemos guardado a los propietarios de nuestro grupo objetivo en la variable $OwnersList. Como esta variable es una matriz que contiene todos los propietarios del grupo actual, podemos usar "segmentación de matriz" o corchetes para seleccionar un usuario específico de la matriz, como se muestra a continuación:

$OwnersList[0]
or
$OwnersList[1]

Evalúe con lo anterior qué propietario necesita eliminar, luego use el siguiente comando para eliminar ese propietario del grupo.

 Remove-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectID $OwnersList[1].Id 

Agregar y reemplazar varios propietarios de grupos

Una de las limitaciones del cmdlet New-MgGroupOwner es que espera el cuerpo de la solicitud en forma de tabla hash, que contiene pares clave-valor. Con una tabla hash, cada clave debe ser única, por lo tanto, la tabla hash solo puede contener una única entrada de una clave específica, que en este caso es el identificador OData del objeto de usuario propietario.

Por ejemplo, en el caso de que necesite reemplazar dos propietarios de grupo existentes con dos nuevos propietarios de grupo para todos los grupos de su inquilino, deberá especificar cada nuevo propietario de grupo en su propia tabla hash y realizar un bucle para agregarlos. Una vez que se agreguen, podrá recorrer los propietarios existentes para eliminarlos y, por lo tanto, reemplazarlos.

El siguiente script proporciona cierta lógica para reemplazar a los propietarios como se describe anteriormente. Observe que uso Get-MgGroupOwner para almacenar los propietarios del grupo como primer paso, esto se debe a que los grupos necesitan un propietario y no pueden quedarse sin uno asignado. Es por eso que debemos agregar el propietario y luego eliminarlo, en ese orden.

Connect-MgGraph -scope group.readwrite.all

$owner1 = @{ 
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER1ID"
}
$owner2 = @{ 
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER2ID" 
}

$groups = Get-MgGroup -All

Foreach ($group in $groups){
    $owners = $null
    $owners = Get-MgGroupOwner -GroupId $group.Id 
    New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner1
    New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner2
    Foreach ($owner in $owners) {
        Remove-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectID $owner.Id 
    }
}

Terminando

Existen muchas complejidades diferentes al agregar, eliminar y reemplazar propietarios de grupos en grupos de Microsoft 365 existentes y activos. El ejemplo anterior demuestra la funcionalidad principal para realizar estas tareas, pero no representan scripts listos para producción. Revise siempre el código de otra persona y modifíquelo para cumplir con sus propios requisitos.

Artículos relacionados