À mesure que Microsoft améliore sa posture de sécurité sur tous les produits et services, des modifications apportées aux fonctionnalités des API peuvent avoir un impact sur les clients qui comptaient auparavant sur des autorisations d’application uniquement pour configurer des blocs-notes pour la classe et des équipes de classe à l’aide d’API.
Remarque
Dans la plupart des cas, nous vous recommandons d’utiliser School Synchronisation des données (SDS), un service gratuit qui permet d’automatiser le processus de synchronisation des données des utilisateurs et des listes à partir des informations sur les élèves ou des systèmes de gestion avec Microsoft 365. SDS vous aide à gérer votre organisation éducative, vos utilisateurs, vos classes et vos rôles, en synchronisant vos données avec Microsoft Entra ID et Microsoft 365, afin que vous puissiez utiliser Microsoft Teams, Intune pour l’éducation, Exchange Online, SharePoint Online, les blocs-notes OneNote pour la classe, et activer des applications tierces avec Intégration de l’authentification unique.
Vous pouvez toujours mettre en service des classes et des blocs-notes à grande échelle à l’aide de PowerShell et Microsoft Graph en suivant les méthodes prises en charge. Cet article décrit les étapes et fournit des liens vers la documentation pertinente.
Important
Si vous travaillez avec un partenaire tiers sur la mise en service à grande échelle de classes, partagez cet article avec celui-ci avant d’entreprendre les étapes par vous-même.
Approvisionnement de nouvelles classes
Option 1 (recommandée) : utilisation de Teams PowerShell
Avertissement
Avant le 21 août 2025, une version antérieure de cette documentation recommandait l’approvisionnement via Teams PowerShell avant que les mises à jour requises aient été effectuées. Ces mises à jour sont désormais terminées. Vous pouvez poursuivre cette démarche pour l’instant. Merci de votre patience.
Il est simple de configurer de nouvelles classes à l’aide de Teams PowerShell, qui inclut toutes les configurations nécessaires pour les classes et les blocs-notes. Personnalisez simplement le nom d’affichage souhaité dans le script suivant et exécutez-le en tant qu’administrateur.
Important
Le script suivant nécessite que vous utilisiez Microsoft Teams PowerShell version 7.3.1 ou ultérieure.
Exemple de script
# Using the Teams PowerShell SDK
Install-Module -MicrosoftTeams -Force -AllowClobber
New-Team -DisplayName 'Test Class 20251208.4' -Template 'EDU_Class'
Option 2 : Utilisation de Microsoft Graph PowerShell
Si vous n’avez pas accès à Teams PowerShell, vous pouvez explorer l’approvisionnement de classes à grande échelle à l’aide de Microsoft Graph. Modifiez les paramètres en haut du script suivant selon vos besoins, puis exécutez le script en tant qu’administrateur pour configurer les classes et les blocs-notes à grande échelle :
Exemple de script
# Using the MS Graph API
Install-Module Microsoft.Graph -AllowClobber -Force
# PARAMETERS
$Name = "Test Class 20251208.3"
$Description = "A Test Class"
$Mail = $Name -replace '[^a-zA-Z0-9\s]|[ ]', '' # Replace this mail alias with a preferred generation method
$OwnerId = "000-000-00000-000000-000" # Replace this with the Owner's GUID
# ------------
# Create a new M365 Group
$CreateGroupBody = @"
{
"description": "$Name",
"displayName": "$Description",
"groupTypes": [
"Unified"
],
"mailEnabled": false,
"mailNickname": "$Mail",
"securityEnabled": false,
"members@odata.bind": [
"https://graph.microsoft.com/v1.0/users/$OwnerId"
],
"owners@odata.bind": [
"https://graph.microsoft.com/v1.0/users/$OwnerId"
],
"visibility": "HiddenMembership",
"creationOptions": [
"ExchangeProvisioningFlags:461",
"classAssignments"
],
"extension_fe2174665583431c953114ff7268b7b3_Education_ObjectType": "Section",
"resourceBehaviorOptions": [
"appRoleForSite:22d27567-b3f0-4dc2-9ec2-46ed368ba538:fullcontrol",
"appRoleForSite:c9a559d2-7aab-4f13-a6ed-e7e9c52aec87:fullcontrol",
"appRoleForSite:13291f5a-59ac-4c59-b0fa-d1632e8f3292:fullcontrol",
"appRoleForSite:2d4d3d8e-2be3-4bef-9f87-7875a61c29de:fullcontrol",
"appRoleForSite:8f348934-64be-4bb2-bc16-c54c96789f43:fullcontrol"
]
}
"@
$NewGroup = Invoke-MgGraphRequest -uri 'https://graph.microsoft.com/v1.0/groups/' -Body $CreateGroupBody -Method POST -ContentType "application/json"
# Create Teams Class Team from group
$CreateTeamBody = @{
"template@odata.bind" = "https://graph.microsoft.com/v1.0/teamsTemplates('educationClass')"
"group@odata.bind" = "https://graph.microsoft.com/v1.0/groups('$($NewGroup.Id)')"
}
New-MgTeam -BodyParameter $CreateTeamBody
Résolution des problèmes : octroi d’autorisations à des sites de classe existants
Remarque
Cette approche nécessite également que la personne qui exécute le script soit un administrateur du site, comme décrit ici. Le script ci-dessous comprend une étape permettant d’ajouter l’utilisateur actuellement connecté en tant qu’administrateur de site pour les sites nécessitant une résolution des problèmes.
Si vous avez déjà mis en service des classes et que vous constatez des échecs ou des problèmes d’autorisation avec le bloc-notes pour la classe ou les devoirs Teams, vous pouvez mettre à jour les autorisations de site pour vos classes à l’aide du script suivant, en remplaçant le paramètre rawGroups par les groupID des classes affectées :
Exemple de script
#You will need to connect to SharePoint, Exchange Online, and Graph with the following -Scopes Sites.FullControl.All, as well as collect the groupIDs of Class Teams affected
$rawGroups =@("b0a5905d-09ae-4605-8e12-94da93ecbe92","e0eec729-24ef-451e-b079-56d0baf4dfc9")
# Convert to array of objects with .groupid
$groups = $rawGroups | ForEach-Object { Get-UnifiedGroup -Identity $_ }
$step = 0
#get the currently logged in user's account to add as a site admin
$CUA = (get-mgcontext).account
foreach ($group in $groups) {
$step = $step + 1
Set-SPOUser -Site $group.SharePointSiteUrl -LoginName $CUA -IsSiteCollectionAdmin $true
Write-Host "SiteCollectionAdmin added on $step of $($Groups.Count) Class Sites"
}
#Pause for 5 minutes before triggering the General Folder creation
Write-Host "Pausing for 5 Minutes before adding perms to allow SiteCollectionAdmin to propagate"
Start-Sleep -Seconds 300
Write-Host "Working on $($Groups.Count) Classes"
foreach ($group in $groups) {
#$step = $step + 1
$Site = Get-MgGroupSite -GroupId $group.ExternalDirectoryObjectId -SiteId "root"
$SiteId = $Site.Id
Write-Host "Processing permissions on $step of $($Groups.Count) Classes"
# These are the AppIds for common Microsoft EDU Apps
$AppIds = @{
"8f348934-64be-4bb2-bc16-c54c96789f43"="EDU Assignments";
"22d27567-b3f0-4dc2-9ec2-46ed368ba538"="Reading Assignments";
"2d4d3d8e-2be3-4bef-9f87-7875a61c29de"="OneNote";
"c9a559d2-7aab-4f13-a6ed-e7e9c52aec87"="Microsoft Forms";
"13291f5a-59ac-4c59-b0fa-d1632e8f3292"="EDU OneNote";
}
# Apply the permissions to the group site
$AppIds.Keys | %{
$AppId = $_
$Name = $AppIds[$_]
$Body = @"
{
"roles": ["fullcontrol"],
"grantedToIdentities": [{
"application": {
"id": "$AppId",
"displayName": "$Name"
}
}]
}
"@
Invoke-MgGraphRequest -Method POST -Uri "https://graph.microsoft.com/v1.0/sites/$SiteId/permissions" -Body $Body -ContentType "application/json"
}
}
Write-Host "Processed $($Groups.Count) Classes, removing sitecollectionadmin"
$step = 0
foreach ($group in $groups) {
$step = $step + 1
Set-SPOUser -Site $group.SharePointSiteUrl -LoginName $CUA -IsSiteCollectionAdmin $false
Write-Host "SiteCollectionAdmin removed on $step of $($Groups.Count) Class Sites"
}