Omogočanje uporabe razredov v velikem obsegu z lupino PowerShell in Microsoft Graphom

Ker Microsoft izboljšuje svojo varnost v vseh izdelkih in storitvah, je prišlo do sprememb funkcionalnosti API-ja, ki lahko vplivajo na stranke, ki so se prej zanašale na dovoljenja samo za aplikacije za omogočanje uporabe zvezkov za predavanja in skupin za predavanja z API-ji.

Opomba

V večini primerov priporočamo uporabo sinhronizacije šolskih podatkov (SDS), brezplačne storitve, ki pomaga avtomatizirati postopek sinhronizacije podatkov uporabnikov in seznamov podatkov iz informacijskih sistemov za študente ali sistemov za upravljanje s storitvijo Microsoft 365. SDS vam pomaga upravljati izobraževalno organizacijo, uporabnike, razrede in vloge ter sinhronizirati podatke z Microsoft Entra ID in Microsoft 365, tako da lahko uporabljate Microsoft Teams, Intune for Education, Exchange Online, SharePoint Online, OneNotove zvezke za predavanja in omogočite aplikacije drugih ponudnikov z integracijo Enotna prijava.

Še vedno lahko omogočite uporabo razredov in zvezkov v velikem obsegu z lupino PowerShell in Microsoft Graph tako, da upoštevate podprte metode. V tem članku so opisani koraki in povezave do ustrezne dokumentacije.

Pomembno

Če sodelujete s partnerjem tretje osebe pri zagotavljanju razredov v velikem obsegu, delite ta članek z njimi, preden sami ukrepate.

Omogočanje uporabe novih razredov

Opozorilo

Pred 21. avgustom 2025 je prejšnja različica te dokumentacije priporočala omogočanje uporabe prek lupine PowerShell za Teams, preden so bile izvedene zahtevane posodobitve. Te posodobitve so zdaj dokončane in trenutno lahko nadaljujete s tem pristopom. Hvala za potrpežljivost.

Nove razrede lahko preprosto omogočite z uporabo Teams PowerShell, ki bo vključeval vse potrebne nastavitve za razrede in zvezke. Preprosto prilagodite želeno prikazno ime v naslednjem skriptu in ga zaženite kot skrbnik.

Pomembno

Naslednji skript zahteva, da uporabite Microsoft Teams PowerShell različice 7.3.1 ali novejše. 

Vzorčni skript

# Using the Teams PowerShell SDK
Install-Module -MicrosoftTeams -Force -AllowClobber
New-Team -DisplayName 'Test Class 20251208.4' -Template 'EDU_Class'

2. možnost: Uporaba lupine Microsoft Graph PowerShell

Če nimate dostopa do lupine PowerShell za Teams, boste morda želeli raziskati razrede omogočanja uporabe v velikem obsegu s storitvijo Microsoft Graph. Po potrebi uredite parametre na vrhu tega skripta in nato zaženite skript kot skrbnik, da omogočite razrede in zvezke v velikem obsegu:

Vzorčni 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​​​​​​​

Odpravljanje težav: dodeljevanje dovoljenj obstoječim mestom za predavanja

Opomba

Ta pristop bo zahteval tudi, da je oseba, ki izvaja skript, skrbnik mesta, kot je opisano tukaj. Spodnji skript vključuje korak za dodajanje trenutno prijavljenega uporabnika kot skrbnika mesta za spletna mesta, ki zahtevajo odpravljanje težav.

Če ste že omogočili razrede in opazite napake ali težave z dovoljenji z zvezkom za predavanja ali dodelitvami v aplikaciji Teams, lahko posodobite dovoljenja mesta za svoje razrede s tem skriptom, tako da parameter rawGroups zamenjate z ID-ji skupin prizadetih razredov:

Vzorčni 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"
}