Comment créer des équipes Teams en masse ?
Sommaire
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 :
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.
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.
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
Bonjour Florian, je confirme ce que dit Noureddine Tazi, je n’ai pas de problème non plus pour créer les équipes en Powershell mais les classes ne sont pas Activées par défaut, on ne peut donc pas ajouter les membres. Il faut d’abord activer les équipes manuellement pour ensuite les peupler. Ça l’air d’être spécifique à la version Education. Ton article date de 2020. Y a t’il eu des évolutions depuis sur ce sujet ?
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