Klasių parengimas dideliu mastu naudojant "PowerShell" ir "Microsoft Graph"

"„Microsoft“" gerindama savo saugos būseną visuose produktuose ir paslaugose, buvo API funkcijų pakeitimų , kurie gali turėti įtakos klientams, kurie anksčiau naudojosi tik programų teisėmis konfigūruoti mokomuosius bloknotus ir mokomąsias komandas naudodami API.

Pastaba

Daugeliu atvejų rekomenduojame naudoti mokyklos duomenų sinchronizavimą (SDS) – nemokamą tarnybą, kuri padeda automatizuoti vartotojo ir sąrašo duomenų sinchronizavimo iš studentų informacijos arba valdymo sistemų procesą su "Microsoft 365". SDS padeda valdyti švietimo organizaciją, vartotojus, klases ir vaidmenis, sinchronizuojant duomenis su "Microsoft Entra ID" ir "Microsoft 365", kad galėtumėte naudoti "Microsoft Teams", "Intune for Education", "Exchange Online", "SharePoint Online", "OneNote" mokomuosius bloknotus ir įgalinti trečiųjų šalių programas naudodami Bendroji autentifikacija Integracija.

Vis dar galite konfigūruoti klases ir bloknotus dideliu mastu naudodami "PowerShell" ir "Microsoft Graph" laikydamiesi palaikomų metodų. Šiame straipsnyje aprašomi veiksmai ir pateikiami saitai į susijusius dokumentus.

Svarbu

Jei dirbate su trečiosios šalies partneriu teikdami klases dideliu mastu, prieš imdamiesi savarankiškų veiksmų pasidalykite šiuo straipsniu su juo.

Naujų klasių parengimas

Įspėjimas

Iki 2025 m. rugpjūčio 21 d. ankstesnėje šios dokumentacijos versijoje buvo rekomenduojama parengti per "Teams PowerShell" prieš atliekant reikiamus naujinimus. Šie naujinimai jau baigti ir dabar galite tęsti šį metodą. Dėkojame už kantrybę.

Paprasta parengti naujas klases naudojant "Teams PowerShell", kuri apims visą būtiną klasių ir bloknotų sąranką. Tiesiog tinkinkite norimą rodomą vardą toliau pateiktu scenarijumi ir paleiskite jį kaip administratorius.

Svarbu

Norint naudoti šį scenarijų, reikia naudoti "Microsoft Teams PowerShell" 7.3.1 arba naujesnę versiją

Scenarijaus pavyzdys

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

2 parinktis: "Microsoft Graph PowerShell" naudojimas

Jei neturite prieigos prie "Teams PowerShell", galbūt norėsite ištirti parengimo klases dideliu mastu naudodami "Microsoft Graph". Atitinkamai redaguokite parametrus šio scenarijaus viršuje, tada vykdykite scenarijų kaip administratorius, kad užtikrintumėte klases ir bloknotus reikiamu mastu:

Scenarijaus pavyzdys

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

Trikčių šalinimas: teisių suteikimas esamoms klasės svetainėms

Pastaba

Taikant šį metodą taip pat reikalaujama, kad asmuo, vykdantis scenarijų, būtų svetainės administratorius, kaip čia aprašyta. Toliau pateiktas scenarijus apima veiksmą, skirtą įtraukti šiuo metu prisijungusį vartotoją kaip svetainės administratorių svetainėse, kurioms reikia pašalinti triktis.

Jei jau esate parengę klases ir pastebite mokomojo bloknoto arba "Teams" priskyrimų klaidų ar teisių problemų, galite atnaujinti klasių svetainės teises naudodami šį scenarijų, pakeisdami parametrą rawGroups paveiktų klasių groupID:

Scenarijaus pavyzdys

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