Asigurarea accesului la clase la scară utilizând PowerShell și Microsoft Graph

Pe măsură ce Microsoft își îmbunătățește poziția față de securitate în toate produsele și serviciile, au existat modificări ale funcționalității API care pot afecta clienții care anterior se bazau pe permisiuni doar pentru aplicații pentru a asigura accesul la blocnotesurile școlare și echipele școlare utilizând API-uri.

Notă

În majoritatea cazurilor, vă recomandăm să utilizați School Data Sync (SDS), un serviciu gratuit care ajută la automatizarea procesului de sincronizare a datelor despre utilizatori și lista de participanți din sistemele de informații sau de gestionare a elevilor/studenților cu Microsoft 365. SDS vă ajută să gestionați organizația educațională, utilizatorii, cursurile și rolurile, sincronizând datele cu Microsoft Entra ID și Microsoft 365, astfel încât să puteți utiliza Microsoft Teams, Intune pentru educație, Exchange Online, SharePoint Online, blocnotesurile școlare OneNote și să activați aplicațiile de la terți cu Autentificare unică integrare.

Puteți asigura în continuare accesul la cursuri și blocnotesuri la scară, utilizând PowerShell și Microsoft Graph, urmând metodele acceptate. Acest articol schițează pașii și oferă linkuri către documentația relevantă.

Important

Dacă lucrați cu un partener terț la asigurarea accesului la scară a claselor, împărtășiți acest articol cu acesta înainte de a face pașii pe cont propriu.

Asigurarea accesului la clase noi

Avertisment

Înainte de 21 august 2025, o versiune anterioară a acestei documentații recomanda asigurarea accesului prin Teams PowerShell înainte de a se efectua actualizările necesare. Aceste actualizări sunt acum finalizate și puteți continua cu această abordare în acest moment. Vă mulțumim pentru răbdare.

Este simplu să furnizați clase noi utilizând Teams PowerShell, care va include toate configurările necesare pentru cursuri și blocnotesuri. Particularizați pur și simplu numele afișat dorit în următorul script și rulați-l ca administrator.

Important

Următorul script necesită să utilizați Microsoft Teams PowerShell versiunea 7.3.1 sau versiuni mai recente. 

Eșantion script

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

Opțiunea 2: Utilizarea Microsoft Graph PowerShell

Dacă nu aveți acces la Teams PowerShell, se recomandă să explorați asigurarea accesului claselor la scară, utilizând Microsoft Graph. Editați parametrii din partea de sus a scriptului următor, după cum este necesar, apoi rulați scriptul ca administrator pentru a asigura accesul la cursuri și blocnotesuri la scară:

Eșantion script

# 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​​​​​​​

Depanare: acordarea permisiunilor site-urilor școlare existente

Notă

Această abordare va necesita, de asemenea, ca persoana care rulează scriptul să fie administrator de site, așa cum se descrie aici. Scriptul de mai jos include un pas pentru a adăuga utilizatorul conectat în prezent ca administrator de site pentru site-urile care necesită depanare.

Dacă ați asigurat deja accesul la clase și observați erori sau probleme de permisiune cu Blocnotesul școlar sau Teme Teams, puteți actualiza permisiunile de site pentru cursurile dvs. utilizând următorul script, înlocuind parametrul rawGroups cu ID-urile de grup ale claselor afectate:

Eșantion script

#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"
}