نظرا لأن Microsoft تحسن وضعها الأمني عبر جميع المنتجات والخدمات، فقد حدثت تغييرات على وظائف واجهة برمجة التطبيقات قد تؤثر على العملاء الذين كانوا يعتمدون مسبقا على أذونات التطبيق فقط لتوفير دفاتر ملاحظات للصفوف وفرق الصفوف باستخدام واجهات برمجة التطبيقات.
ملاحظة: في معظم الحالات، نوصي باستخدام School Data Sync(SDS)، وهي خدمة مجانية تساعد على أتمتة عملية مزامنة بيانات المستخدم والقوائم من معلومات الطلاب أو أنظمة الإدارة مع Microsoft 365. يساعدك SDS على إدارة مؤسستك التعليمية والمستخدمين والصفوف والأدوار، ومزامنة بياناتك مع Microsoft Entra ID وMicrosoft 365، حتى تتمكن من استخدام Microsoft Teams، Intune للتعليم، Exchange Online، SharePoint Online، دفاتر ملاحظات للصفوف في OneNote، وتمكين تطبيقات الجهات الخارجية باستخدام تسجيل الدخول الأحادي تكامل.
لا يزال بإمكانك توفير الفئات ودفاتر الملاحظات على نطاق واسع باستخدام PowerShell وMicrosoft Graph باتباع الأساليب المدعومة. توضح هذه المقالة الخطوات وتوفر ارتباطات إلى الوثائق ذات الصلة.
هام: إذا كنت تعمل مع شريك تابع لجهة خارجية على توفير الفئات على نطاق واسع، فالرجاء مشاركة هذه المقالة معهم قبل اتخاذ الخطوات بنفسك.
توفير فئات جديدة
الخيار 1 (مستحسن): استخدام Teams PowerShell
تحذير: قبل 21 أغسطس 2025، أوصى إصدار سابق من هذه الوثائق بالتزويد عبر Teams PowerShell قبل التحديث المطلوب. اكتملت هذه التحديثات الآن، ويمكنك متابعة هذا النهج في الوقت الحالي. نشكرك على انتظارك.
من السهل توفير فصول جديدة باستخدام Teams PowerShell، والتي ستتضمن جميع الإعدادات الضرورية للصفوف ودفاتر الملاحظات. ما عليك سوى تخصيص اسم العرض المطلوب في البرنامج النصي التالي وتشغيله كمسؤول.
نموذج البرنامج النصي
# Using the 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. قم بتحرير المعلمات في أعلى البرنامج النصي التالي حسب الاقتضاء، ثم قم بتشغيل البرنامج النصي كمسؤول لتوفير الفئات ودفاتر الملاحظات على نطاق واسع:
نموذج البرنامج النصي
# 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
|
استكشاف الأخطاء وإصلاحها: منح أذونات لمواقع الفئات الموجودة
ملاحظة: سيتطلب هذا الأسلوب أيضا أن يكون الشخص الذي يقوم بتشغيل البرنامج النصي مسؤول موقع، كما هو موضح هنا. يتضمن البرنامج النصي أدناه خطوة لإضافة المستخدم الذي قام بتسجيل الدخول حاليا كمسؤول موقع للمواقع التي تتطلب استكشاف الأخطاء وإصلاحها.
إذا كنت قد قمت بالفعل بتوفير الفئات وكنت تلاحظ حالات فشل أو مشكلات في الأذونات في "دفتر الملاحظات للصفوف" أو "تعيينات Teams"، فيمكنك تحديث أذونات الموقع للفئات الخاصة بك باستخدام البرنامج النصي التالي، واستبدال معلمة rawGroups بمعرف المجموعة للفئات المتأثرة:
نموذج البرنامج النصي
#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"
}
|