Zriaďovanie tried vo veľkom pomocou prostredia PowerShell a Microsoft Graph

Keďže spoločnosť Microsoft vylepšuje svoju úroveň zabezpečenia vo všetkých produktoch a službách, došlo k zmenám funkcií rozhrania API, ktoré môžu mať vplyv na zákazníkov, ktorí sa predtým spoliehali na povolenia len pre aplikácie pri zriaďovaní poznámkových blokov pre učebné predmety a triedne tímy pomocou rozhraní API.

Poznámka

Vo väčšine prípadov odporúčame používať bezplatnú službu School Data Sync (SDS), ktorá pomáha automatizovať proces synchronizácie údajov o používateľoch a zoznamoch zo študentských informačných alebo riadiacich systémov so službou Microsoft 365. SDS vám pomôže spravovať vzdelávaciu organizáciu, používateľov, triedy a roly, synchronizuje vaše údaje s Microsoft Entra ID a Microsoft 365, aby ste mohli používať Microsoft Teams, Intune for Education, Exchange Online, SharePoint Online, onenotové poznámkové bloky pre učebné predmety a povoliť aplikácie tretích strán s Jediné prihlásenie integrácie.

Predmety a poznámkové bloky môžete naďalej zriaďovať vo veľkom pomocou prostredí PowerShell a Microsoft Graph nasledovaním podporovaných metód. V tomto článku sú uvedené kroky a prepojenia na príslušnú dokumentáciu.

Dôležité

Ak spolupracujete s partnerom tretej strany na zriaďovaní tried, pred podniknutím vlastných krokov s ním zdieľajte tento článok.

Zriadenie nových tried

Upozornenie

Pred 21. augustom 2025 predchádzajúca verzia tejto dokumentácie odporúčala zriadenie prostredníctvom prostredia PowerShell aplikácie Teams pred vykonaním požadovaných aktualizácií. Tieto aktualizácie sú už dokončené a v tomto postupe môžete pokračovať. Ďakujeme za trpezlivosť.

Zriadenie nových tried pomocou prostredia PowerShell aplikácie Teams, ktoré bude obsahovať všetky potrebné nastavenia pre učebné predmety a poznámkové bloky, je jednoduché. Jednoducho prispôsobte požadované zobrazované meno v nasledujúcom skripte a spustite ho ako správca.

Dôležité

Nasledujúci skript vyžaduje používanie prostredia PowerShell aplikácie Microsoft Teams verzie 7.3.1 alebo novšej. 

Vzorový skript

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

2. možnosť: Použitie prostredia Microsoft Graph PowerShell

Ak nemáte prístup k prostrediu PowerShell aplikácie Teams, možno budete chcieť preskúmať triedy zriaďovania vo veľkom pomocou Microsoft Graphu. Podľa potreby upravte parametre v hornej časti nasledujúceho skriptu a potom spustite skript ako správca, aby ste zriadili triedy a poznámkové bloky vo veľkom rozsahu:

Vzorový 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​​​​​​​

Riešenie problémov: udelenie povolení existujúcim lokalitám kurzov

Poznámka

Tento prístup bude tiež vyžadovať, aby osoba, ktorá spúšťa skript, bola správcom lokality, ako je popísané nižšie. Skript uvedený nižšie obsahuje krok na pridanie aktuálne prihláseného používateľa ako správcu lokalít vyžadujúcich riešenie problémov.

Ak ste už zriadili triedy a pozorujú sa zlyhania alebo problémy s povoleniami v poznámkovom bloku pre učebné predmety alebo priradených úlohách aplikácie Teams, môžete aktualizovať povolenia lokality pre svoje triedy pomocou nasledujúceho skriptu, v ktorom nahradíte parameter rawGroups identifikátormi skupiny dotknutých tried:

Vzorový 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"
}