PowerShell と Microsoft Graph を使用した大規模なクラスのプロビジョニング

Microsoft がすべての製品とサービスのセキュリティ体制を強化するにつれて、API 機能に 変更 が加わり、API を使用して Class Notebook と Class Teams をプロビジョニングするためにアプリのみのアクセス許可に以前依存していたお客様に影響を与える可能性があります。

ほとんどの場合、学生情報または管理システムのユーザーと名簿データを Microsoft 365 と同期するプロセスを自動化するのに役立つ無料サービスである School データ同期 (SDS) を使用することをお勧めします。 SDS を使用すると、教育organization、ユーザー、クラス、ロールを管理し、データをMicrosoft Entra IDと Microsoft 365 と同期できるため、Microsoft Teams、教育、Exchange Online、SharePoint Online、OneNote Class ノートブックのIntuneを使用し、サード パーティ製アプリを有効にすることができます。シングル サインオン統合。

サポートされているメソッドに従って、PowerShell と Microsoft Graph を使用して、クラスとノートブックを大規模にプロビジョニングできます。 この記事では、手順の概要を説明し、関連するドキュメントへのリンクを示します。

重要

クラスの大規模なプロビジョニングでサード パーティ パートナーと連携している場合は、独自の手順を実行する前に、この記事を共有してください。

新しいクラスのプロビジョニング

警告

2025 年 8 月 21 日より前に、このドキュメントの以前のバージョンでは、必要な更新が行われる前に Teams PowerShell を使用したプロビジョニングが推奨されていました。 これらの更新プログラムは完了し、 現時点ではこの方法を続行できます。 お待ちいただき、ありがとうございました。

Teams PowerShell を使用して新しいクラスをプロビジョニングするのは簡単です。これには、クラスとノートブックに必要なすべてのセットアップが含まれます。 次のスクリプトで目的の表示名をカスタマイズし、管理者として実行するだけです。

重要

次のスクリプトでは、 PowerShell バージョン 7.3.1 以降Microsoft Teams 使用する必要があります。 

サンプル スクリプト

# Teams PowerShell SDK Install-Module の使用 -MicrosoftTeams -Force -AllowClobber New-Team -DisplayName 'Test Class 20251208.4' -Template 'EDU_Class'

オプション 2: Microsoft Graph PowerShell の使用

Teams PowerShell にアクセスできない場合は、Microsoft Graph を使用して、プロビジョニング クラスを大規模に調べることができます。 次のスクリプトの上部にあるパラメーターを必要に応じて編集し、管理者としてスクリプトを実行して、クラスとノートブックを大規模にプロビジョニングします。

サンプル スクリプト

# 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]|[ ] '' # このメールエイリアスを優先する生成方法に置き換えます $OwnerId = "000-00000-00000-00000-0000" # これを所有者の GUID # ------------ # 新しい M365 グループの作成 $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:8f348 934-64be-4bb2-bc16-c54c96789f43:fullcontrol" ] } "@ $NewGroup = Invoke-MgGraphRequest -uri 'https://graph.microsoft.com/v1.0/groups/' -Body $CreateGroupBody -MethodPOST -ContentType "application/json" # グループ $CreateTeamBody から Teams クラス チームを作成する = @{ "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

トラブルシューティング: 既存のクラス サイトにアクセス許可を付与する

この方法では、ここで説明するように、スクリプトを実行しているユーザーがサイト管理者である必要 もあります。 次のスクリプトには、トラブルシューティングを必要とするサイトのサイト管理者として、現在ログインしているユーザーを追加する手順が含まれています。

クラスを既にプロビジョニングしていて、Class Notebook または Teams の割り当てでエラーやアクセス許可の問題が発生している場合は、次のスクリプトを使用してクラスのサイトアクセス許可を更新し、rawGroups パラメーターを影響を受けるクラスの group ID に置き換えることができます。

サンプル スクリプト

#You は、SharePoint、Exchange Online、 および 次の -Scopes Sites.FullControl.All を含む Graph と、影響を受けるクラス チームのグループ ID を収集します。 $rawGroups =@("b0a5905d-09ae-4605-8e12-94da93ecbe92","e0eec729-24ef-451e-b079-56d 0baf4dfc9") # .groupid $groups = $rawGroups を持つオブジェクトの配列に変換する | ForEach-Object { Get-UnifiedGroup -Identity $_ } $step = 0 #get、現在ログインしているユーザーのアカウントを #get してサイト管理者の$CUA = =(get-mgcontext).account foreach ($groups の$group) { $step = $step + 1 Set-SPOUser -Site $group。SharePointSiteUrl -LoginName $CUA -IsSiteCollectionAdmin $true Write-Host "SiteCollectionAdmin add on $step of $($Groups.Count) Class Sites" } #Pause 5 分間待ってから、一般フォルダーの作成 Write-Host 「5 分間一時停止してから perms を追加して許可する」 SiteCollectionAdmin to propagate" Start-Sleep -Seconds 300 Write-Host "$($Groups.Count) クラスの操作" foreach ($groups の$group) { #$step = $step + 1 $Site = Get-MgGroupSite -GroupId $group。ExternalDirectoryObjectId -SiteId "root" $SiteId = $Site.Id Write-Host $($Groups.Count) クラスの$stepに対する処理アクセス許可# これらは、一般的な Microsoft EDU Apps $AppIds = @{ "8f348934-64be-4bb2-bc16-c54c96789f43"="EDU Assignments" の AppId です。"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";} # グループ サイト $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 クラス, sitecollectionadmin の削除" $step = 0 foreach ($groups$group) { $step = $step + 1 Set-SPOUser -Site $group。SharePointSiteUrl -LoginName $CUA -IsSiteCollectionAdmin $false Write-Host $($Groups.Count) クラス サイトの$stepで SiteCollectionAdmin が削除されました" }