Comment créer des équipes Teams en masse ?

I. Présentation

Avec la montée en puissance du télétravail et des cours à distance, les entreprises et les établissements scolaires ont besoin de solutions collaboratives, que ce soit pour l'aspect webconférence ou le partage de documents. Microsoft propose un outil que l'on ne présente plus, baptisé Teams, et qui va permettre de regrouper toutes ces fonctionnalités au sein d'une interface unique.

Néanmoins, la création des équipes Teams manuellement peut s'avérer fastidieuse et répétitive... Surtout s'il y en a plusieurs dizaines voire centaines à créer. D'ailleurs, c'est ce que j'ai eu à faire pour certains clients dans le domaine de l'éducation récemment : créer des équipes Teams et les peupler avec les utilisateurs, aussi bien les propriétaires que les membres, le tout en automatique.

Pour automatiser la création en masse d'équipes Teams, je me suis appuyé sans hésitation sur le module PowerShell "Microsoft Teams" dont je vous ai déjà parlé plusieurs fois, notamment dans cet article :

Teams et PowerShell

Dans cet article, je vais vous montrer un exemple simple, sur la base d'un fichier CSV pour créer automatiquement des équipes Teams. Nous pourrons voir également comment ajouter automatiquement les membres dans ces équipes. Tout en sachant que l'on peut aller beaucoup plus loin... ?

Tutoriel disponible au format vidéo :

Avant de commencer, je vous invite justement à installer le module PowerShell de Microsoft Teams :

Install-Module -Name MicrosoftTeams -Force

II. Le fichier CSV : la source

Commençons par définir notre fichier source qui sera un fichier de données au format CSV. Nous pouvons imaginer un fichier CSV avec simplement trois colonnes : le nom de l'équipe, l'adresse e-mail de l'utilisateur à ajouter dans l'équipe et le rôle (membre ou propriétaire). Ainsi, si une équipe doit contenir 5 membres, nous allons avoir 5 lignes pour cette même équipe dans le fichier CSV.

Jeu de données pour cet exemple :

Equipe;Email;Role;
"Redacteurs";"[email protected]";"propriétaire";
"Redacteurs";"[email protected]";"membre";
"Redacteurs";"[email protected]";"membre";
"Redacteurs";"[email protected]";"membre";
"Support";"[email protected]";"propriétaire";
"Support";"[email protected]";"membre";
"Support";"[email protected]";"membre";
"Support";"[email protected]";"membre";
"Communication";"[email protected]";"propriétaire";
"Communication";"[email protected]";"membre";

Quelques lignes seulement dans ce fichier, mais dans votre cas vous devez en avoir beaucoup plus j'imagine ! À la lecture de mon fichier CSV, on peut voir qu'il y aura 3 équipes Teams de créées avec différents propriétaires et membres.

III. Créer les équipes Teams en masse

L'étape qui suit après l'installation du module, c'est la connexion à Teams en ligne de commande. Cette opération s'effectue en deux étapes : on récupère les identifiants, puis on se connecte :

$Credentials = Get-Credential
$Credentials.password.MakeReadOnly()

Authentifiez-vous auprès de Teams ensuite en réutilisant notre objet de credentials :

Connect-MicrosoftTeams -Credential $Credentials

Au niveau d'Office 365, le compte que vous utilisez peut être "Administrateur général" bien sûr, mais il peut être seulement "Administrateur du service Teams" au niveau de ses rôles.

Ensuite, nous allons récupérer la liste des équipes Teams à créer. Pour cela, on va lire les données du fichier CSV en récupérant une seule fois le nom de chaque équipe dans le but de créer une liste de valeurs uniques.

Commençons par charger l'ensemble du fichier CSV dans la variable $CSV.

$CSV = Import-Csv -Path "C:\DATA\Teams.csv" -Delimiter ";" -Encoding UTF8

Ensuite, nous allons récupérer la liste des équipes à créer :

$TeamsToCreate = ($CSV | Select-Object Equipe -Unique).Equipe

La liste étant stockée dans une variable ($TeamsToCreate), une boucle Foreach va nous permettre de parcourir cette liste et de créer l'ensemble des équipes.

Foreach($Team in $TeamsToCreate){

    Try{ 
        New-Team -DisplayName $Team -Description "Equipe pour $Team" -MailNickName $Team `
               -AllowGiphy $false -AllowStickersAndMemes $false `
               -ErrorAction SilentlyContinue -InformationAction SilentlyContinue

        Write-Output "OK : équipe Teams $Team créée avec succès !"

    }Catch{
        Write-Output "ERREUR lors de la création de l'équipe Teams : $Team"
    }
}

Cette boucle va créer chacune des équipes de notre liste en reprenant le nom à l'identique tel qu'il est défini dans le CSV. Le paramètre -MailNickName correspond au nom à utiliser pour l'adresse e-mail de l'équipe.

La commande New-Team contient différents paramètres booléens pour préconfigurer les équipes. Dans cet exemple, j'ai utilisé -AllowGiphy qui permet d'indiquer si l'on autorise ou non l'utilisation des GIF via Giphy, ainsi que -AllowStickersAndMemes pour gérer les stickers et les mèmes. Ces options peuvent également être modifiées ultérieurement par les propriétaires de l'équipe ainsi que par les stratégies Teams.

Lorsque vous créez des équipes, le compte administrateur utilisé pour s'authentifier sur Teams (Connect-MicrosoftTeams) sera automatiquement ajouté en tant que propriétaire des équipes. Si vous souhaitez éviter ce comportement et ajouter plutôt un autre compte en tant que propriétaire, vous devez ajouter le paramètre -Owner suivi de l'e-mail à la commande New-Team.

Remarque : si vous souhaitez créer des équipes Teams pour l'éducation, vous devez utiliser un template prédéfini. Pour le moment, ce template n'est pas disponible dans la version "stable" du module, mais seulement dans la version preview. Pour l'avoir utilisé, cela fonctionne très bien. Il faudra l'utiliser comme ceci : -Template "EDU_Class".

On peut lister les équipes Teams du tenant pour s'assurer qu'elles soient bien créées.

Get-Team

Pour lister les équipes Teams "Education", utilisez cette commande :

Get-Team -Visibility HiddenMembership

Passons à l'étape suivante : l'ajout des utilisateurs au sein des équipes.

IV. Ajouter les utilisateurs en masse dans les équipes Teams

Avoir des équipes Teams, c'est bien, c'est un début, mais pour les exploiter pleinement il va falloir associer des utilisateurs à ces équipes ! Toujours en prenant comme base notre fichier CSV, nous allons ajouter dans les équipes les différents propriétaires et membres.

Commençons par stocker dans une variable la liste des équipes Teams :

$TeamListing = Get-Team

Comme bien souvent lorsque l'on fait du script, il y a plusieurs façons de faire. On aurait pu faire une seule boucle qui crée les équipes et qui met les membres en même temps. Avant d'ajouter un utilisateur dans une équipe, il aurait fallu vérifier que l'équipe existe bien en allant requêter à chaque fois Teams avec Get-Team. En termes de performance, je trouve que c'est plus efficace en deux temps : on crée toutes les équipes, on stocke la liste dans une variable et ensuite on peut se satisfaire de consulter le contenu de cette liste, car on sait qu'elle ne bougera plus puisque toutes les équipes déclarées dans le CSV sont déjà créées. De cette façon, on s'affranchit des latences côtés Microsoft 365 et de la ligne Internet...

Voici le bout de code qui va permettre d'ajouter les utilisateurs dans les équipes :

foreach($User in $CSV){

  # Si l'équipe est bien dans la liste des équipes créées...
  if($User.Equipe -in $TeamListing.DisplayName){

      Write-Host "Equipe $($User.Equipe) trouvée : $($User.Email) va être ajouté en tant que $($User.Role)"
      $TeamGroupId = ($TeamListing | Where{ $_.DisplayName -eq $User.Equipe } ).GroupId
      # Définir le rôle à partir du fichier CSV
      if($User.Role -eq "propriétaire"){ 

          $TeamRole = "owner"
      }else{

          $TeamRole = "member"
      }

      # On ajoute l'utilisateur dans l'équipe
      Try{

         Add-TeamUser -GroupId $TeamGroupId -User $User.Email -Role $TeamRole -ErrorAction SilentlyContinue
         Write-Host "Equipe $($User.Equipe) : $($User.Email) ajouté avec succès !"
      }Catch{

         Write-Host "Equipe $($User.Equipe) : ERREUR avec $($User.Email) !"
      }

  }else{

      Write-Host "ERREUR ! Impossible de trouver l'équipe suivante : $($User.Equipe)"
  }

  Clear-Variable TeamGroupId
}

La variable $TeamGroupId contient l'identifiant unique de l'équipe (GroupId) : une donnée indispensable pour pouvoir utiliser la commande Add-TeamUser qui sert à ajouter l'utilisateur dans l'équipe. Nous avons également la variable $TeamRole qui sera égale à "owner" si l'utilisateur doit être propriétaire et "member" si l'utilisateur doit être membre ou que la valeur dans le CSV est incorrecte.

Enfin, on peut vérifier que ça fonctionne en listant les membres d'une équipe Teams :

# Lister les membres d'une équipe
Get-TeamUser -GroupId <GroupId>
Get-TeamUser -GroupId "b4a8a66e-6626-4f4b-9f42-d9dcefaa204c"

⭐ Téléchargez le script sur mon GitHub : New-BulkTeams.ps1

V. Aller plus loin

Ce script est une bonne base et il vous permettra de faire l'essentiel : créer des équipes et associer à ces équipes des membres et des propriétaires à partir d'un CSV. Cela vous donnera un bon coup de pouce si vous avez de nombreuses équipes Teams à créer et alimenter. Il y a des pistes d'améliorations, notamment la création de canaux dans les équipes si vous souhaitez créer une structure de base commune. En l'état, il y aura seulement le canal "Général" dans les équipes.

Par ailleurs et maintenir dans le temps ces équipes de façon automatique, il faudrait aller plus loin dans la gestion des erreurs : vérifier que l'utilisateur existe sur le tenant avant de l'ajouter dans l'équipe et ne pas essayer d'ajouter l'utilisateur à l'équipe s'il est déjà membre. À ce moment-là, il faudra se poser la bonne question : il est déjà dans l'équipe en tant que membre, mais peut être que l'on veut qu'il devienne propriétaire 😉

Lorsque vous créez les équipes, je vous invite à indiquer dans la description (par exemple) un identifiant unique. Ainsi, plutôt que de rechercher une équipe, vous pouvez la rechercher par son identifiant plutôt que par son nom. De cette manière, vous allez éviter de recréer une équipe si en fait c'est seulement une équipe existante qui a changé de nom dans votre CSV. Tout dépend si vous avez besoin de créer des équipes Teams en une seule fois ou si vous avez besoin de les maintenir à jour régulièrement à partir d'un CSV source qui évolue.

Enfin, amusez-vous à générer un rapport par e-mail qui va recenser les membres ajoutés par équipe tout en mettant en évidence les éventuelles erreurs pour faciliter le debug.

N'hésitez pas à me contacter si vous souhaitez un accompagnement pour la création des équipes Teams en masse dans votre établissement.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5575.Voir tous les posts

3 thoughts on “Comment créer des équipes Teams en masse ?

  • Bonjour M. Florian,
    J’ai un problème avec la cmdlet New-Team et le Template EDU_Class, j’arrive à créer des équipes de type classe, mais pour ajouter des membres, il faut d’abord activer l’équipe.
    Que faudrait-il faire pour effectuer cette activation via un script ?
    Merci de votre aide.

    Répondre
    • Bonjour,
      Je crois que ce n’est pas possible d’activer une équipe par script. En tout cas, je n’ai jamais trouvé de solution jusqu’à maintenant… Cela fait un moment que je n’ai pas regardé mais il me semble que ça n’a pas évolué. Par contre, avec PowerShell vous pouvez créer l’équipe EDU_Class et ajouter des membres ainsi que des propriétaires sans même qu’elle soit activée. Je suis sûr que cela fonctionne. Pas chez vous ?
      Bon courage
      Florian

      Répondre
  • Bonjour Florian,
    Je viens de faire mon script pour créer des équipes pour un Teams Education, mais ça ne fonctionne pas car dans mon fichier CSV il y a des espaces entre les noms d’équipe du genre « Education Musicale 6A »; « EPS 6B », etc…
    Si je met des tirets bas ça fonctionne mais ce n’est pas ce que je voulais. Y a t’il une solution pour contourner ce problème ? Merci

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.