Cómo automatizar la obtención de todos los Teams de un inquilino con Power Automate

En este blog vamos a ver las distintas formas de obtener un listado de equipos de Teams sin necesidad de ser miembro. Principalmente, vamos a ver las alternativas disponibles con Power Automate.


Actualmente disponemos de la acción de listar los equipos de Teams en Power Automate pero necesitamos ser miembros de los equipos de Teams para que nos aparezcan en el listado. No obstante, lo que algunos administradores queremos, es poder listar todos los equipos de Teams que hay creados en un inquilino de Microsoft 365 para poder realizar distintas acciones sobre ellos.


Uso de PowerShell


Si habláramos de PowerShell lo tendríamos fácil, simplemente con el comando "Get-Team" podríamos obtenerlos.

Aquí os dejo un ejemplo del un código de PowerShell para obtener los equipos de teams y sus propietarios.

# Obtener Credenciales  
$credentials=Get-Credential  
 
# Conectar al módulo de Microsoft Teams  
Connect-MicrosoftTeams -Credential $credentials  
 
# Obtener los equipos de Teams del inquilino 
$teams=Get-Team  
 
# Obtener para cada Teams su propietario 
foreach($team in $teams)  
{  
    Write-Host -ForegroundColor White "Obteniendo propietarios de:" $team.DisplayName  
 
    # Obtener propietarios
    $owners= Get-TeamUser -GroupId $team.GroupId -Role Owner  
  
    foreach($owner in $owners)  
    {  
    [pscustomobject]@{UserID = $owner.UserId; User = $owner.User; Name = $owner.Name} 
    }      
} 

En Power Automate, en cambio, sabiendo que la acción actual de obtener equipos de Teams solo nos lista aquellos equipos de los que somos miembros vamos a tener que dar un pequeño rodeo para conseguir nuestro objetivo.


Uso de Microsoft Graph


La primera opción que vamos a ver es el uso de Microsoft Graph, es un poco más largo que usar el PowerShell pero....debemos usar el conector premium de llamada http por lo tanto vamos a necesitar derechos de uso sobre este conector. Resumiendo: necesitamos licencia de Power Automate .


Para ello haremos una llamada a Microsoft Graph del tipo GET que tendremos a continuación.

https://graph.microsoft.com/v1.0/groups?$select=DisplayName,id,resourceProvisioningOptions



Cuando el grupo de Microsoft 365 tenga un equipo de Microsoft Teams asociado, dentro de resourceProvisioningOptions tendremos "Team"


{
 "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups(displayName,id,resourceProvisioningOptions)",
 "value": [
    {
 "displayName": "Visitor management",
 "id": "0cab752c-7094-4133-b1bb-bd5c51958a58",
 "resourceProvisioningOptions": [
 "Team"
      ]
    },
    {
 "displayName": "Teams",
 "id": "4515a243-ed1b-4cff-a95c-9087f0534d1e",
 "resourceProvisioningOptions": [
 "Team"
      ]
    },
    {
 "displayName": "Test",
 "id": "679636e8-8c34-4b3a-b1ef-3e5a5a071bf3",
 "resourceProvisioningOptions": []
    }
  ]
}

De esta forma podemos generar una matriz con todos los equipos de Teams en el inquilino (tenant).



Pero.... ¿y si no dispongo de derechos de uso de conectores premium y no puedo usar Graph? Llegados a este punto la solución es un poquito más enrevesada pero es posible.


Uso de Power Automate conociendo la arquitectura de SharePoint


Cada equipo de Teams tiene un sitio de SharePoint que usa la plantilla de Team Site y está conectado a un grupo de Microsoft 365.


Sabiendo esto, vamos a sacar todos los sitios de SharePoint con su id de grupo que estén conectados a un grupo de Microsoft 365. Para ello haremos una llamada a la API de REST de SharePoint Online con la acción de "Send HTTP request to SharePoint".


Es importante que sepamos que dentro del sitio de administración de SharePoint existe una lista que contiene todo los sitios de SharePoint llamada "DO_NOT_DELETE_SPLIST_TENANTADMIN_AGGREGATED_SITECOLLECTIONS" por lo tanto haremos la siguiente llamada GET a esa lista:


_api/web/lists/GetByTitle('DO_NOT_DELETE_SPLIST_TENANTADMIN_AGGREGATED_SITECOLLECTIONS')/items?$filter=IsGroupConnected eq 1&$select=Title,GroupId,SiteUrl,SiteId


De la salida obtenida en esta acción veremos de cada grupo de Microsoft 365 si contiene Team en "resourceProvisioningOptions"




Con estos pasos podremos obtener todos los equipos de Teams de un inquilino sin necesidad de que seamos miembros de cada uno de ellos.


A partir de aquí, y gracias a la información que nos proporcionará la lista de los equipos de Teams que habremos obtenido utilizando cualquiera de la opciones que hemos visto, podremos ejecutar acciones para el conjunto de los equipos que tengamos.