Omogočanje uporabe razredov pri prilagoditvi velikosti z ogrodjem PowerShell in storitvijo Microsoft Graph

Ker Microsoft izboljšuje svojo varnostno držo v vseh izdelkih in storitvah, so se funkcije API-ja spremenile, kar lahko vpliva na uporabnike, ki so se pri omogočanju zvezkov za predavanje in ekip za predavanje z vmesniki API zanašali na dovoljenja le za aplikacije.

Opomba

V večini primerov priporočamo uporabo storitve School Data Sync, brezplačne storitve, ki pomaga avtomatizirati postopek sinhronizacije podatkov o uporabnikih in urnikih iz študentskih informacijskih ali upravljavskih sistemov z okoljem Microsoft 365. SDS vam pomaga upravljati izobraževalno organizacijo, uporabnike, razrede in vloge, sinhronizira vaše podatke z Microsoft Entra ID in Microsoft 365, tako da lahko uporabljate Microsoft Teams, Intune za izobraževanje, Exchange Online, SharePoint Online, OneNotove zvezke za predavanja in omogočite aplikacije drugih ponudnikov z integracijo Enotna prijava.

S tehnologijo PowerShell in tehnologijo Microsoft Graph lahko še vedno uporabljate tako prilagojene razrede in zvezke tako, da upoštevate podprte načine. V tem članku so opisani koraki in povezave do ustrezne dokumentacije.

Pomembno

Če sodelujete z neodvisnim partnerjem pri omogočanju uporabe razredov v prilagoditvenem razredu, posredujte ta članek, preden se sami odločite.

Omogočanje uporabe novih razredov

Opozorilo

Pred 21. avgustom 2025 je bila v prejšnji različici te dokumentacije priporočljivo omogočanje uporabe prek lupine PowerShell za aplikacijo Teams, preden so bile izvedene zahtevane posodobitve. Te posodobitve so dokončane in s tem pristopom lahko nadaljujete. Hvala za potrpežljivost.

Nastavitev in omogočanje novih razredov je preprosta z modulom PowerShell za aplikacijo Teams, ki vključuje vse potrebne nastavitve za predavanja in zvezke. Preprosto prilagodite želeno prikazano ime v tem skriptu in ga zaženite kot skrbnik.

Pomembno

Ta skript zahteva, da uporabite Microsoft Teams PowerShell, različico 7.3.1 ali novejšo. 

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 PowerShell za Microsoft Graph

Če nimate dostopa do lupine PowerShell za aplikacijo Teams, boste morda želeli raziskati razdelek o omogočanju uporabe razredov v prilagoditvenem obsegu s tehnologijo Microsoft Graph. Po potrebi uredite parametre na vrhu tega skripta in nato zaženite skript kot skrbnik, da omogočite razrede in zvezke v prilagoditvenem merilu:

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: podeljevanje dovoljenj obstoječim mestom razreda

Opomba

Ta pristop zahteva tudi, da je oseba, ki izvaja skript, skrbnik mesta, kot je opisano tukaj. V skriptu, ki je naveden spodaj, je na voljo korak za dodajanje trenutno prijavljenega uporabnika kot skrbnika mesta za mesta, za katera je potrebno odpravljanje težav.

Če ste predavanja že omogočili in uporabljate predavanja in opažate napake ali težave z dovoljenji pri zvezi z zvezki za predavanja ali dodelitvami v aplikaciji Teams, lahko posodobite dovoljenja za svoja predavanja s skriptom spodaj, pri čemer zamenjate parameter rawGroups z ID-ji skupin zadevnih 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"
}