À medida que a Microsoft aprimora sua postura de segurança em todos os produtos e serviços, houve alterações na funcionalidade da API que podem afetar clientes que anteriormente contavam com permissões somente de aplicativo para provisionar Notebooks de Classe e Equipes de Classe usando APIs.

Observação: Na maioria dos casos, recomendamos usar o SDS (Sincronização de Dados Escolares), um serviço gratuito que ajuda a automatizar o processo de sincronização de dados de usuário e de lista de dados dos Sistemas de Gerenciamento ou Informações do Aluno com o Microsoft 365. O SDS ajuda você a gerenciar sua organização educacional, usuários, classes e funções, sincronizando seus dados com Microsoft Entra ID e Microsoft 365, para que você possa usar o Microsoft Teams, Intune for Education, Exchange Online, SharePoint Online, Notebooks da Classe OneNote e habilitar aplicativos de terceiros com Logon único integração.

Você ainda pode provisionar classes e notebooks em escala usando o PowerShell e o Microsoft Graph seguindo métodos com suporte. Este artigo descreve as etapas e fornece links para a documentação relevante.

Importante: Se você estiver trabalhando com um parceiro de terceiros no provisionamento em escala de classes, compartilhe este artigo com eles antes de tomar medidas por conta própria.

Provisionamento de novas classes

Opção 1 (recomendado): Usando o Teams PowerShell

Aviso: Antes de 21 de agosto de 2025, uma versão anterior dessa documentação recomendava provisionamento por meio do Teams PowerShell antes da atualização necessária ter sido feita. Essas atualizações já estão concluídas e você pode continuar com essa abordagem neste momento. Agradecemos pela sua paciência.

É simples provisionar novas classes usando o Teams PowerShell, que incluirá toda a configuração necessária para classes e notebooks. Basta personalizar o nome de exibição desejado no script a seguir e executá-lo como um administrador.

Importante: O script a seguir exige que você use o Microsoft Teams PowerShell versão 7.3.1 ou mais recente. 

Script de exemplo

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

Opção 2: usando o Microsoft Graph PowerShell

Se você não tiver acesso ao Teams PowerShell, talvez queira explorar classes de provisionamento em escala usando o Microsoft Graph. Edite os parâmetros na parte superior do script a seguir conforme apropriado e execute o script como administrador para provisionar classes e notebooks em escala:

Script de exemplo

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

Solução de problemas: concessão de permissões para sites de classe existentes

Observação: Essa abordagem também exigirá que a pessoa que executa o script seja um administrador do site, conforme descrito aqui. O script abaixo inclui uma etapa para adicionar o usuário conectado atualmente como um administrador de site para os sites que exigem solução de problemas.

Se você já tiver provisionado classes e estiver observando falhas ou problemas de permissão com o Bloco de Anotações de Classe ou Atribuições do Teams, poderá atualizar as permissões do site para suas classes usando o script a seguir, substituindo o parâmetro rawGroups pelos groupIDs das classes afetadas:

Script de exemplo

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

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.