使用 Microsoft Graph PowerShell 設定從 Microsoft Entra ID 到 Microsoft Entra Domain Services 的範圍同步處理
為了提供驗證服務,Microsoft Entra Domain Services 會同步處理 Microsoft Entra ID 中的使用者和群組。 在混合式環境中,內部部署 Active Directory Domain Services (AD DS) 環境中的使用者和群組可以先使用 Microsoft Entra Connect 同步至 Microsoft Entra ID,然後同步處理至 Domain Services。
預設會將 Microsoft Entra 目錄中的所有使用者和群組都同步至 Domain Services 受控網域。 如果您有特定需求,可以改為選擇只同步處理一組已定義的使用者。
本文說明如何建立使用限域同步處理的受控網域,然後使用 MS Graph PowerShell 變更或停用一組限域使用者。 您也可以使用 Microsoft Entra 系統管理中心來完成這些步驟。
開始之前
若要完成本文章所述的操作,您需要下列資源和權限:
- 有效的 Azure 訂用帳戶。
- 如果您沒有 Azure 訂用帳戶,請先建立帳戶。
- 與訂用帳戶相關聯的 Microsoft Entra 租用戶,且其已與內部部署目錄或純雲端目錄同步。
- 在您的 Microsoft Entra 租用戶中啟用和設定的 Microsoft Entra Domain Services 受控網域。
- 如有需要,請完成教學課程,以建立和設定 Microsoft Entra Domain Services 受控網域。
- 您需要應用程式管理員和租用戶中群組管理員 Microsoft Entra 角色,才能變更 Domain Services 同步處理範圍。
限域同步處理概觀
預設會將 Microsoft Entra 目錄中的所有使用者和群組都同步至受控網域。 如果只有幾個使用者需要存取受控網域,您可以只同步處理這些使用者帳戶。 此限域同步處理是以群組為基礎。 當您設定群組型限域同步處理時,只有屬於您所指定群組的使用者帳戶會同步處理至受控網域。 巢狀群組不會同步處理,只有您選取的特定群組會同步處理。
您可以在建立受控網域之前或之後變更同步處理範圍。 同步處理的範圍是由應用程式識別碼為 2565bd9d-da50-47d4-8b85-4c97f669dc36 的服務主體所定義。 若要防止範圍遺失,請勿刪除或變更服務主體。 如果意外刪除,則無法復原同步處理範圍。
如果您變更同步處理範圍,請記住下列注意事項:
- 會發生完整的同步處理。
- 受控網域中不再需要的物件會被刪除。 系統會在受控網域中建立新物件。
若要深入了解同步處理程序,請參閱<了解 Microsoft Entra Domain Services 中的同步處理>。
限域同步處理的 PowerShell 指令碼
若要使用 PowerShell 設定限域同步處理,請先將下列指令碼儲存至名為 Select-GroupsToSync.ps1
的檔案。
此指令碼會將 Domain Services 設定為從 Microsoft Entra ID 同步處理選取的群組。 屬於指定群組的所有使用者帳戶都會同步處理至受控網域。
本文的其他步驟會使用此指令碼。
param (
[Parameter(Position = 0)]
[String[]]$groupsToAdd
)
Connect-MgGraph -Scopes "Directory.Read.All","AppRoleAssignment.ReadWrite.All"
$sp = Get-MgServicePrincipal -Filter "AppId eq '2565bd9d-da50-47d4-8b85-4c97f669dc36'"
$role = $sp.AppRoles | where-object -FilterScript {$_.DisplayName -eq "User"}
Write-Output "`n****************************************************************************"
Write-Output "Total group-assignments need to be added: $($groupsToAdd.Count)"
$newGroupIds = New-Object 'System.Collections.Generic.HashSet[string]'
foreach ($groupName in $groupsToAdd)
{
try
{
$group = Get-MgGroup -Filter "DisplayName eq '$groupName'"
$newGroupIds.Add($group.Id)
Write-Output "Group-Name: $groupName, Id: $($group.Id)"
}
catch
{
Write-Error "Failed to find group: $groupName. Exception: $($_.Exception)."
}
}
Write-Output "****************************************************************************`n"
Write-Output "`n****************************************************************************"
$currentAssignments = Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $sp.Id -All:$true
Write-Output "Total current group-assignments: $($currentAssignments.Count), SP-ObjectId: $($sp.Id)"
$currAssignedObjectIds = New-Object 'System.Collections.Generic.HashSet[string]'
foreach ($assignment in $currentAssignments)
{
Write-Output "Assignment-ObjectId: $($assignment.PrincipalId)"
if ($newGroupIds.Contains($assignment.PrincipalId) -eq $true)
{
Write-Output "This assignment is not needed anymore. Removing it! Assignment-ObjectId: $($assignment.PrincipalId)"
Remove-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $sp.Id -AppRoleAssignmentId $assignment.Id
}
else
{
$currAssignedObjectIds.Add($assignment.PrincipalId)
}
}
Write-Output "****************************************************************************`n"
Write-Output "`n****************************************************************************"
foreach ($id in $newGroupIds)
{
try
{
if ($currAssignedObjectIds.Contains($id) -eq $false)
{
Write-Output "Adding new group-assignment. Role-Id: $($role.Id), Group-Object-Id: $id, ResourceId: $($sp.Id)"
$appRoleAssignment = @{
"principalId"= $group.Id
"resourceId"= $sp.Id
"appRoleId"= $role.Id
}
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $sp.Id -BodyParameter $appRoleAssignment
}
else
{
Write-Output "Group-ObjectId: $id is already assigned."
}
}
catch
{
Write-Error "Exception occurred assigning Object-ID: $id. Exception: $($_.Exception)."
}
}
Write-Output "****************************************************************************`n"
啟用限域同步處理
若要針對受控網域啟用群組型限域同步處理,請完成下列步驟:
請先在 Domain Services 資源上設定 "filteredSync" = "Enabled",然後更新受控網域。
管理此功能需要全域管理員。
使用 Connect-MgGraph Cmdlet 登入您的 Microsoft Entra 租用戶:
# Connect to your Entra ID tenant Connect-MgGraph -Scopes "Application.ReadWrite.All","Group.ReadWrite.All" # Retrieve the Microsoft Entra DS resource. $DomainServicesResource = Get-AzResource -ResourceType "Microsoft.AAD/DomainServices" # Enable group-based scoped synchronization. $enableScopedSync = @{"filteredSync" = "Enabled"} # Update the Microsoft Entra DS resource Set-AzResource -Id $DomainServicesResource.ResourceId -Properties $enableScopedSync
現在指定應將所含使用者同步處理至受控網域的群組清單。
執行
Select-GroupsToSync.ps1
指令碼,並指定要同步的群組清單。在下列範例中,要同步處理的群組是 GroupName1 和 GroupName2。警告
您必須將 AAD DC Administrators 群組包括在限域同步處理的群組清單中。 如果未包括此群組,受控網域無法使用。
.\Select-GroupsToSync.ps1 -groupsToAdd @("AAD DC Administrators", "GroupName1", "GroupName2")
變更同步處理的範圍會導致受控網域重新同步處理所有資料。 已刪除受控網域中不再需要的物件,重新同步處理可能需要很長的時間才能完成。
修改限域同步處理
若要修改應將所含使用者同步至受控網域的群組清單,請執行 Select-GroupsToSync.ps1
指令碼,並指定要同步處理的新群組清單。
在下列範例中,要同步處理的群組不再包括 GroupName2,現在包括 GroupName3。
警告
您必須將 AAD DC Administrators 群組包括在限域同步處理的群組清單中。 如果未包括此群組,受控網域無法使用。
管理此功能需要全域管理員。
使用 Connect-MgGraph Cmdlet 登入您的 Microsoft Entra 租用戶。
.\Select-GroupsToSync.ps1 -groupsToAdd @("AAD DC Administrators", "GroupName1", "GroupName3")
變更同步處理的範圍會導致受控網域重新同步處理所有資料。 已刪除受控網域中不再需要的物件,重新同步處理可能需要很長的時間才能完成。
停用限域同步處理
若要停用受控網域的群組型限域同步處理,請在 Domain Services 資源上設定 "filteredSync" = "Disabled",然後更新受控網域。 完成時,所有使用者和群組都會設定為從 Microsoft Entra ID 同步處理。
管理此功能需要全域管理員。
使用 Connect-MgGraph Cmdlet 登入您的 Microsoft Entra 租用戶:
# Connect to your Entra ID tenant
Connect-MgGraph -Scopes "Application.ReadWrite.All","Group.ReadWrite.All"
# Retrieve the Microsoft Entra DS resource.
$DomainServicesResource = Get-AzResource -ResourceType "Microsoft.AAD/DomainServices"
# Disable group-based scoped synchronization.
$disableScopedSync = @{"filteredSync" = "Disabled"}
# Update the Microsoft Entra DS resource
Set-AzResource -Id $DomainServicesResource.ResourceId -Properties $disableScopedSync
變更同步處理的範圍會導致受控網域重新同步處理所有資料。 已刪除受控網域中不再需要的物件,重新同步處理可能需要很長的時間才能完成。
後續步驟
若要深入了解同步處理程序,請參閱<了解 Microsoft Entra Domain Services 中的同步處理>。