A medida que Microsoft mejora su posición de seguridad en todos los productos y servicios, se han realizado cambios en la funcionalidad de la API que pueden afectar a los clientes que antes confiaban en permisos de solo aplicación para aprovisionar blocs de notas de clase y equipos de clase mediante API.

Nota: En la mayoría de los casos, se recomienda usar School Data Sync(SDS), un servicio gratuito que ayuda a automatizar el proceso de sincronización de datos de usuarios y listas desde La información de estudiantes o sistemas de administración con Microsoft 365. SDS le ayuda a administrar su organización educativa, usuarios, clases y roles, sincronizando los datos con Microsoft Entra ID y Microsoft 365, para que pueda usar Microsoft Teams, Intune para educación, Exchange Online, SharePoint Online, blocs de notas de clase de OneNote y habilitar aplicaciones de terceros con Inicio de sesión único integración.

Aún puede aprovisionar clases y blocs de notas a escala con PowerShell y Microsoft Graph siguiendo los métodos admitidos. En este artículo se describen los pasos y se proporcionan vínculos a la documentación pertinente.

Importante: Si está trabajando con un partner de terceros en el aprovisionamiento a escala de clases, comparta este artículo con ellos antes de realizar sus propios pasos.

Aprovisionamiento de nuevas clases

Opción 1 (recomendada): Usar El PowerShell de Teams

Advertencia: Antes del 21 de agosto de 2025, una versión anterior de esta documentación recomendaba el aprovisionamiento a través de Teams PowerShell antes de que se hubiera realizado la actualización necesaria. Estas actualizaciones ya están completas y puede continuar con este enfoque en este momento. Hola, gracias por tu paciencia.

Es sencillo aprovisionar nuevas clases con Teams PowerShell, que incluirá toda la configuración necesaria para las clases y los blocs de notas. Solo tiene que personalizar el nombre para mostrar deseado en el script siguiente y ejecutarlo como administrador.

Importante: El script siguiente requiere que use la versión 7.3.1 o posterior de Microsoft Teams PowerShell

Script de ejemplo

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

Opción 2: Usar Microsoft Graph PowerShell

Si no tiene acceso a Teams PowerShell, es posible que desee explorar las clases de aprovisionamiento a escala con Microsoft Graph. Edite los parámetros en la parte superior del script siguiente según corresponda y, a continuación, ejecute el script como administrador para aprovisionar clases y blocs de notas a escala:

Script de ejemplo

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

Solución de problemas: conceder permisos a sitios de clase existentes

Nota: Este enfoque también requerirá que la persona que ejecuta el script sea un administrador del sitio, como se describe aquí. El script siguiente incluye un paso para agregar el usuario actualmente conectado como administrador del sitio para los sitios que requieren solución de problemas.

Si ya ha aprovisionado clases y observa errores o problemas de permisos con las tareas de Bloc de notas de clase o Equipos, puede actualizar los permisos del sitio de las clases con el siguiente script, reemplazando el parámetro rawGroups por los id. de grupo de las clases afectadas:

Script de ejemplo

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

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.