Тъй като Microsoft подобрява състоянието на защита на всички продукти и услуги, има промени във функционалността на API, които могат да повлияят на клиентите, които преди са разчитали на разрешения само за приложения, за да осигуряват бележници на класове и екипи на класове с помощта на API.
Забележка
В повечето случаи препоръчваме да използвате синхронизирането на училищни данни (SDS) – безплатна услуга, която помага за автоматизиране на процеса на синхронизиране на потребителски данни и данни за списъци от учащите и системи за управление или управление с Microsoft 365. SDS ви помага да управлявате своята образователна организация, потребители, класове и роли, като синхронизирате данните си с Microsoft Entra ID и Microsoft 365, така че да можете да използвате Microsoft Teams, Intune for Education, Exchange Online, SharePoint Online, бележниците на класа в OneNote и да разрешавате приложения на други разработчици с Еднократно идентифициране интеграция.
Все още можете да осигурявате класове и бележници в мащаб с помощта на PowerShell и Microsoft Graph чрез следните поддържани методи. Тази статия описва стъпките и предоставя връзки към съответната документация.
Важно
Ако работите с партньор трето лице по осигуряването на класове в мащаб, моля, споделете тази статия с него, преди да предприемете стъпки сами.
Осигуряване на нови класове
Опция 1 (препоръчително): Използване на PowerShell на Teams
Предупреждение
Преди 21 август 2025 г. предишна версия на тази документация препоръчваше осигуряване чрез PowerShell на Teams, преди да са направени необходимите актуализации. Тези актуализации вече са завършени и можете да продължите с този подход към момента. Благодарим за търпението.
Лесно е да осигурите нови класове чрез PowerShell на Teams, който ще включва всички необходими настройки за класове и бележници. Просто персонализирайте желаното показвано име в следващия скрипт и го стартирайте като администратор.
Важно
Следващият скрипт изисква да използвате Microsoft Teams PowerShell версия 7.3.1 или по-нова.
Примерен скрипт
# Using the Teams PowerShell SDK
Install-Module -MicrosoftTeams -Force -AllowClobber
New-Team -DisplayName 'Test Class 20251208.4' -Template 'EDU_Class'
Опция 2: Използване на Microsoft Graph PowerShell
Ако нямате достъп до PowerShell на Teams, може да поискате да проучите осигуряването на класове в мащаб с помощта на Microsoft Graph. При необходимост редактирайте параметрите в горната част на следния скрипт и след това стартирайте скрипта като администратор, за да осигурите класове и бележници в мащаб:
Примерен скрипт
# 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
Отстраняване на неизправности: даване на разрешения за съществуващи сайтове на класа
Забележка
При този подход също така човекът, изпълняващ скрипта, трябва да е администратор на сайта, както е описано тук. Скриптът по-долу включва стъпка за добавяне на влезлия в момента потребител като администратор на сайт за сайтовете, изискващи отстраняване на неизправности.
Ако вече сте осигурили класове и наблюдавате грешки или проблеми с разрешенията с бележника на класа или възложените задачи в Teams, можете да актуализирате разрешенията за сайтове за вашите класове, като използвате следния скрипт, замествайки параметъра rawGroups с groupID на засегнатите класове:
Примерен скрипт
#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"
}