Klašu nodrošināšana lielā mērogā, izmantojot PowerShell un Microsoft Graph

Tā kā Microsoft uzlabo drošības stāvokli visos produktos un pakalpojumos, ir veiktas izmaiņas API funkcionalitātē, kas var ietekmēt klientus, kuri iepriekš paļāvās uz tikai programmu atļaujām, lai nodrošinātu klases piezīmju grāmatiņas un klases grupas, izmantojot API.

Piezīme

Vairumā gadījumu mēs iesakām izmantot skolas datu sinhronizāciju (SDS), bezmaksas pakalpojumu, kas palīdz automatizēt lietotāju un sarakstu datu sinhronizācijas procesu no skolēnu informācijas vai pārvaldības sistēmām ar Microsoft 365. SDS palīdz pārvaldīt izglītības organizāciju, lietotājus, klases un lomas, sinhronizējot jūsu datus ar Microsoft Entra ID un Microsoft 365, lai jūs varētu izmantot Microsoft Teams, Intune izglītībai, Exchange Online, SharePoint Online, OneNote Class piezīmju grāmatiņas un iespējot trešo pušu lietojumprogrammas, izmantojot Vienotā pierakstīšanās integrācija.

Jūs joprojām varat nodrošināt klases un piezīmju grāmatiņas lielā mērogā, izmantojot PowerShell un Microsoft Graph, ievērojot tālāk norādītās atbalstītās metodes. Šajā rakstā ir aprakstītas darbības un sniegtas saites uz atbilstošo dokumentāciju.

Svarīgi!

Ja sadarbojaties ar trešās puses partneri, lai nodrošinātu klases plaša mēroga nodrošināšanu, lūdzu, kopīgojiet šo rakstu ar viņiem, pirms patstāvīgi veicat darbības.

Jaunu klašu nodrošināšana

Brīdinājums

Pirms 2025. gada 21. augusta šīs dokumentācijas iepriekšējā versijā pirms nepieciešamās atjaunināšanas tika ieteikts nodrošināšana, izmantojot Teams PowerShell. Šie atjauninājumi tagad ir pabeigti, un šobrīd varat turpināt šo pieeju. Paldies par pacietību.

Jaunas nodarbības var vienkārši nodrošināt, izmantojot Teams PowerShell, kas ietvers visu nepieciešamo iestatīšanu klasēm un piezīmju grāmatiņām. Vienkārši pielāgojiet vēlamo parādāmo vārdu tālāk norādītajā skriptā un palaidiet to kā administrators.

Svarīgi!

Tālāk norādītajam skriptam ir jāizmanto Microsoft Teams PowerShell versija 7.3.1 vai jaunāka versija. 

Skripta paraugs

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

2. opcija. Microsoft Graph PowerShell izmantošana

Ja jums nav piekļuves Teams PowerShell, iespējams, vēlēsities izpētīt nodrošināšanas klases plašā mērogā, izmantojot Microsoft Graph. Atbilstoši rediģējiet parametrus tālāk norādītā skripta augšdaļā un pēc tam izpildiet skriptu kā administrators, lai nodrošinātu klases un piezīmju grāmatiņas plašā mērogā:

Skripta paraugs

# 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 

Problēmu novēršana: atļauju piešķiršana esošām mācību priekšmeta vietnēm

Piezīme

Šai pieejai būs arī nepieciešams, lai persona, kas izpilda skriptu, būtu vietnes administrators, kā aprakstīts šeit. Tālāk redzamajā skriptā ir iekļauta darbība, lai lietotāju, kurš pašlaik ir pieteicies, pievienotu kā vietnes administratoru vietnēm, kurām nepieciešama problēmu novēršana.

Ja jums jau ir nodrošinātas nodarbības un novērojat kļūmes vai atļauju problēmas saistībā ar klases piezīmju grāmatiņas vai Teams uzdevumiem, varat atjaunināt vietnes atļaujas savām klasēm, izmantojot tālāk norādīto skriptu, aizstājot rawGroups parametru ar ietekmēto klašu groupID:

Skripta paraugs

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