Etter hvert som Microsoft forbedrer sikkerhetsstillingen på tvers av alle produkter og tjenester, har det vært endringer i API-funksjonaliteten som kan påvirke kunder som tidligere var avhengige av kun app-tillatelser for å klargjøre klassenotatblokker og klasseteam ved hjelp av API-er.
Obs!
I de fleste tilfeller anbefaler vi å bruke School Data Sync (SDS), en gratis tjeneste som hjelper til med å automatisere prosessen med å synkronisere bruker- og listedata fra systemer for elevinformasjon eller administrasjonssystemer med Microsoft 365. SDS hjelper deg med å administrere utdanningsorganisasjonen, brukere, klasser og roller, og synkroniserer dataene med Microsoft Entra ID og Microsoft 365, slik at du kan bruke Microsoft Teams, Intune for Education, Exchange Online, SharePoint Online, OneNote-klassenotatblokker og aktivere tredjepartsapper med Enkel pålogging-integrasjon.
Du kan fremdeles klargjøre klasser og notatblokker i stor skala ved hjelp av PowerShell og Microsoft Graph ved å følge støttede metoder. Denne artikkelen beskriver trinnene og inneholder koblinger til relevant dokumentasjon.
Viktig
Hvis du arbeider med en tredjepartspartner om klargjøring av klasser i stor skala, må du dele denne artikkelen med dem før du utfører dine egne trinn.
Klargjøre nye klasser
Alternativ 1 (anbefales): Bruke Teams PowerShell
Advarsel
Før 21. august 2025 anbefalte en tidligere versjon av denne dokumentasjonen klargjøring via Teams PowerShell før nødvendige oppdateringer var gjort. Disse oppdateringene er nå fullført, og du kan fortsette med denne fremgangsmåten nå. Takk for tålmodigheten.
Det er enkelt å klargjøre nye klasser ved hjelp av Teams PowerShell, som vil inkludere alt nødvendig oppsett for klasser og notatblokker. Bare tilpass ønsket visningsnavn i følgende skript og kjør det som en administrator.
Viktig
Følgende skript krever at du bruker Microsoft Teams PowerShell versjon 7.3.1 eller nyere.
Eksempel på skript
# Using the Teams PowerShell SDK
Install-Module -MicrosoftTeams -Force -AllowClobber
New-Team -DisplayName 'Test Class 20251208.4' -Template 'EDU_Class'
Alternativ 2: Bruke Microsoft Graph PowerShell
Hvis du ikke har tilgang til Teams PowerShell, kan det være lurt å utforske klargjøringsklasser i stor skala ved hjelp av Microsoft Graph. Rediger parameterne øverst i følgende skript etter behov, og kjør deretter skriptet som administrator for å klargjøre klasser og notatblokker i stor skala:
Eksempel på skript
# 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
Feilsøking: gi tillatelser til eksisterende klassenettsteder
Obs!
Denne fremgangsmåten krever også at personen som kjører skriptet, er en nettstedadministrator, som beskrevet her. Skriptet nedenfor inkluderer et trinn for å legge til den påloggede brukeren som en nettstedsadministrator for nettsteder som krever feilsøking.
Hvis du allerede har klargjort klasser og observerer feil eller tillatelsesproblemer med klassenotatblokken eller Teams-oppgaver, kan du oppdatere nettstedstillatelsene for klassene dine ved hjelp av følgende skript og erstatte rawGroups-parameteren med gruppe-ID-ene til de berørte klassene:
Eksempel på skript
#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"
}