Konfigurieren der Gruppenquelle der Autorität (SOA)

In diesem Artikel werden die Voraussetzungen und Schritte zum Konfigurieren der Gruppenquelle der Autorität (Group Source of Authority, SOA), das Zurücksetzen von Änderungen und Einschränkungen erläutert. Weitere Informationen zu Gruppen-SOA finden Sie unter "Cloud-first-Haltung übernehmen": Konvertieren der Gruppenquelle der Autorität in die Cloud.

Voraussetzungen

Anforderung BESCHREIBUNG
Rollen Hybridadministrator muss die Microsoft Graph-APIs aufrufen, um SOA von Gruppen zu lesen und zu aktualisieren.
Anwendungsadministrator oder Cloudanwendungsadministrator ist erforderlich, um den Benutzern die erforderlichen Berechtigungen für Microsoft Graph Explorer oder die App zu erteilen, die zum Aufrufen der Microsoft Graph-APIs verwendet wird.
Erlaubnisse Für Apps, die die "onPremisesSyncBehavior Microsoft Graph"-API aufrufen, muss der Berechtigungsbereich "Group-OnPremisesSyncBehavior.ReadWrite.All" erteilt werden. Weitere Informationen finden Sie in wie Sie diese Berechtigung erteilen für den Graph-Explorer oder eine vorhandene App in Ihrem Mandantenkonto.
Lizenz erforderlich Microsoft Entra Free-Lizenz.
Synchronisierungsclient Bevor Sie SOA anwenden, stellen Sie sicher, dass Sie sich auf einer unterstützten Version Ihres Synchronisierungsclients befinden, damit der Client die SOA-Einstellung berücksichtigt. Wenn Sie Connect Sync verwenden, führen Sie ein Upgrade auf die Mindestversion 2.5.76.0 durch. Wenn Sie Cloud Sync verwenden, führen Sie ein Upgrade auf die Mindestversion 1.1.1370.0 durch.
Bereitstellung für AD DS (optional) Um eine SOA-konvertierte Gruppe von Microsoft Entra ID in Active Directory Domain Services (AD DS) bereitzustellen, müssen Sie Cloud Sync verwenden. Außerdem müssen Sie Schritte unternehmen, um die Gruppen mit ihrem ursprünglichen OU-Pfad für die Bereitstellung in AD DS vorzubereiten. Weitere Informationen finden Sie unter Vorbereiten von Gruppen für die Gruppen-SOA-Konvertierung und -Bereitstellung.

Connect-Synchronisierungsclient herunterladen

  1. Laden Sie die Connect Sync-Buildversion 2.5.76.0 oder höher herunter.

  2. Wechseln Sie in der Systemsteuerung zu "Programme ", und bestätigen Sie die Version von Microsoft Entra Connect Sync.

Cloud Sync-Client herunterladen

  1. Laden Sie Die Cloud Sync-Buildversion 1.1.1370.0 oder höher herunter.

  2. Erfahren Sie, wie Sie die aktuelle Version des Agents identifizieren.

  3. Befolgen Sie die Anweisungen zum Konfigurieren der Bereitstellung von AD DS zu Microsoft Entra ID.

Erteilen von Berechtigungen für Apps

Sie können berechtigungen im Microsoft Entra Admin Center oder im Graph-Explorer erteilen. Für diesen hoch privilegierten Vorgang ist die Rolle "Anwendungsadministrator" oder "Cloud-Anwendungsadministrator" erforderlich. Sie können die Zustimmung auch mithilfe von PowerShell erteilen. Weitere Informationen finden Sie unter Erteilen der Zustimmung im Namen eines einzelnen Benutzers.

Benutzerdefinierte Apps

Führen Sie die folgenden Schritte aus, um der entsprechenden App die Berechtigung zu erteilen Group-OnPremisesSyncBehavior.ReadWrite.All . Weitere Informationen zum Hinzufügen neuer Berechtigungen zur App-Registrierung und zum Erteilen der Zustimmung finden Sie unter Aktualisieren der angeforderten Berechtigungen einer App in der Microsoft Entra-ID.

Verwenden des Microsoft Entra Admin Centers zum Erteilen von Berechtigungen für Apps

  1. Melden Sie sich beim Microsoft Entra Admin Center als Anwendungsadministrator oder Als Cloudanwendungsadministrator an.

  2. Navigieren Sie zu Unternehmensanwendungen>App-Name.

  3. Wählen Sie Berechtigungen aus und gewähren Sie Administratorzustimmung für den Mandantennamen.

  4. Melden Sie sich erneut als Anwendungsadministrator oder Als Cloudanwendungsadministrator an.

  5. Überprüfen Sie die Liste der Berechtigungen, die Ihre Zustimmung erfordern, und wählen Sie "Annehmen" aus.

  6. Sie können die Liste der von Ihnen erteilten Berechtigungen anzeigen:

    Screenshot, wie man Berechtigungen erteilt.

Verwenden des Graph-Explorers zum Erteilen von Berechtigungen für Apps

  1. Öffnen Sie graph-Explorer , und melden Sie sich als Anwendungsadministrator oder Cloudanwendungsadministrator an.
  2. Wählen Sie das Profilsymbol aus, und wählen Sie "Zustimmung zu Berechtigungen" aus.
  3. Suchen Sie nach Group-OnPremisesSyncBehavior und wählen Sie Zustimmung für die Berechtigung aus.

Screenshot zum Erteilen der Zustimmung zu Group-OnPremisesSyncBehavior.ReadWrite-Berechtigung.

Vorbereitung der Gruppen für die Gruppen-SOA-Umwandlung und Bereitstellung.

Wenn Sie die Gruppe wieder in AD DS bereitstellen möchten, sollten Sie die folgenden Schritte ausführen, um den OU-Pfad beizubehalten und in der Gruppenbereitstellung für AD-Konfiguration mit der richtigen Zuordnung festzulegen:

  1. Ändern Sie den Gruppenbereich für die AD DS-Gruppen in "Universal".
  2. Erstellen Sie eine Verzeichniserweiterungseigenschaft mit Mandantenbereich für Gruppen.
  3. Ordnen Sie einen lokalen Wert, z. B. den distinguished name (DN), direkt der Erweiterungseigenschaft zu.
  4. Überprüfen Sie den Eigenschaftswert mithilfe von Microsoft Graph.
  5. Konvertieren Sie die Quelle der Autorität (SOA), wenn Sie bereit sind.
  6. Verwenden Sie benutzerdefinierte Ausdrücke, um sicherzustellen, dass Cloud Sync Gruppen zurück zu AD DS mit denselben CN- und OU-Werten bereitstellt.

Weitere Informationen finden Sie unter Bereitstellen von Gruppen für Active Directory-Domänendienste mithilfe von Microsoft Entra Cloud Sync.

SOA für eine Testgruppe konvertieren

Führen Sie die folgenden Schritte aus, um die SOA für eine Testgruppe zu konvertieren:

  1. Erstellen Sie eine Sicherheitsgruppe oder eine E-Mail-aktivierte Verteilergruppe in AD zum Testen und Hinzufügen von Gruppenmitgliedern. Sie können auch eine Gruppe verwenden, die mit Microsoft Entra ID synchronisiert wird, indem Sie Connect Sync verwenden.

  2. Führen Sie den folgenden Befehl aus, um die Verbindungssynchronisierung zu starten:

    Start-ADSyncSyncCycle
    
  3. Überprüfen Sie, ob die Gruppe im Microsoft Entra Admin Center als synchronisierte Gruppe angezeigt wird.

  4. Verwenden Sie die Microsoft Graph-API, um die SOA des Gruppenobjekts zu konvertieren (isCloudManaged=true). Öffnen Sie Microsoft Graph-Explorer , und melden Sie sich mit einer entsprechenden Benutzerrolle an, z. B. Gruppenadministrator.

  5. Überprüfen wir den vorhandenen SOA-Status. Wir haben die SOA noch nicht aktualisiert, daher sollte der wert des isCloudManaged-Attributs "false" sein. Ersetzen Sie die {ID} in den folgenden Beispielen durch die Objekt-ID Ihrer Gruppe. Weitere Informationen zu dieser API finden Sie unter Get onPremisesSyncBehavior.

    GET https://graph.microsoft.com/v1.0/groups/{ID}/onPremisesSyncBehavior?$select=isCloudManaged
    

    Screenshot der Verwendung von Microsoft Graph Explorer zum Abrufen des SOA-Werts einer Gruppe.

  6. Vergewissern Sie sich, dass die synchronisierte Gruppe schreibgeschützt ist. Da die Gruppe lokal verwaltet wird, schlagen alle Schreibversuche in der Gruppe in der Cloud fehl. Die Fehlermeldung unterscheidet sich für E-Mail-aktivierte Gruppen, aktualisierungen sind jedoch immer noch nicht zulässig.

    Hinweis

    Wenn diese API mit 403 fehlschlägt, verwenden Sie die Registerkarte "Berechtigungen ändern ", um der erforderlichen Berechtigung "Group.ReadWrite.All" die Zustimmung zu erteilen.

    PATCH https://graph.microsoft.com/v1.0/groups/{ID}/
       {
         "DisplayName": "Group1 Name Updated"
       }   
    

    Screenshot eines Versuchs, eine Gruppe zu aktualisieren, um zu überprüfen, ob sie schreibgeschützt ist.

  7. Durchsuchen Sie das Microsoft Entra Admin Center für die Gruppe. Vergewissern Sie sich, dass alle Gruppenfelder abgeblentet sind und dass die Quelle Windows Server AD DS ist:

    Screenshot der grundlegenden Gruppeneigenschaften.

    Screenshot der erweiterten Gruppeneigenschaften.

  8. Jetzt können Sie die SOA der Gruppe so aktualisieren, dass sie in der Cloud verwaltet wird. Führen Sie den folgenden Vorgang im Microsoft Graph-Explorer für das Gruppenobjekt aus, das Sie in die Cloud konvertieren möchten. Weitere Informationen zu dieser API finden Sie unter Update onPremisesSyncBehavior.

    PATCH https://graph.microsoft.com/v1.0/groups/{ID}/onPremisesSyncBehavior
       {
         "isCloudManaged": true
       }   
    

    Screenshot des PATCH-Vorgangs zum Aktualisieren von Gruppeneigenschaften.

  9. Um die Änderung zu überprüfen, rufen Sie GET auf, um zu überprüfen, ob "isCloudManaged" wahr ist.

    GET https://graph.microsoft.com/v1.0/groups/{ID}/onPremisesSyncBehavior?$select=isCloudManaged
    

    Screenshot des GET-Aufrufs zum Überprüfen von Gruppeneigenschaften.

  10. Bestätigen Sie die Änderung in den Überwachungsprotokollen. Um auf die Prüfprotokolle im Azure-Portal zuzugreifen, öffnen Sie Verwalten von Microsoft Entra ID>Überwachung>Prüfprotokolle, oder suchen Sie nach Prüfprotokollen. Wählen Sie "Quelle der Autorität ändern" aus AD in die Cloud als Aktivität aus.

    Screenshot der Änderung an Gruppeneigenschaften in Überwachungsprotokollen.

  11. Überprüfen Sie, ob die Gruppe in der Cloud aktualisiert werden kann.

    PATCH https://graph.microsoft.com/v1.0/groups/{ID}/
       {
         "DisplayName": "Group1 Name Updated"
       }   
    

    Screenshot eines Wiederholungsversuches zum Ändern von Gruppeneigenschaften.

  12. Öffnen Sie das Microsoft Entra Admin Center, und vergewissern Sie sich, dass die Quelleigenschaft der Gruppe Cloud ist.

    Screenshot zum Bestätigen der Gruppenquelleigenschaft.

Connect-Synchronisierungsclient

  1. Führen Sie den folgenden Befehl aus, um die Verbindungssynchronisierung zu starten:

    Start-ADSyncSyncCycle
    
  2. Um das Gruppenobjekt mit konvertierter SOA zu betrachten, wechseln Sie im Synchronisierungsdienst-Manager zu Connectors:

    Screenshot von Konnektoren.

  3. Klicken Sie mit der rechten Maustaste auf active Directory Domain Services Connector. Suchen Sie nach der Gruppe mithilfe der relativen Domänennamen-Einstellung (RDN) "CN=<GroupName>":

    Screenshot, wie man nach RDN sucht.

  4. Doppelklicken Sie auf den durchsuchten Eintrag, und wählen Sie Lineage>Eigenschaften des Metaverse-Objekts aus.

    Screenshot zum Anzeigen der Linien.

  5. Wählen Sie Verbinder aus, und doppelklicken Sie auf das Entra ID-Objekt mit "CN={<Alphanumeric Characters>}".

  6. Sie können sehen, dass die BlockOnPremisesSync-Eigenschaft für das Entra ID-Objekt auf "true" festgelegt ist. Dieser Eigenschaftswert bedeutet, dass alle Änderungen, die im entsprechenden AD DS-Objekt vorgenommen wurden, nicht an das Entra ID-Objekt fließen:

    Screenshot zum Blockieren des Datenflusses.

  7. Lassen Sie uns das lokale Gruppenobjekt aktualisieren. Wir ändern den Gruppennamen von SecGroup1 in SecGroup1.1:

    Screenshot zum Ändern des Objektnamens.

  8. Führen Sie den folgenden Befehl aus, um die Verbindungssynchronisierung zu starten:

    Start-ADSyncSyncCycle
    
  9. Öffnen Sie die Ereignisanzeige, und filtern Sie das Anwendungsprotokoll für die Ereignis-ID 6956. Diese Ereignis-ID ist reserviert, um die Kunden darüber zu informieren, dass das Objekt nicht mit der Cloud synchronisiert wird, da sich die SOA des Objekts in der Cloud befindet.

    Screenshot der Ereignis-ID 6956.

Massenaktualisierungen für Gruppen-SOA

Sie können das folgende PowerShell-Skript verwenden, um Gruppen-SOA-Updates mithilfe der appbasierten Authentifizierung zu automatisieren.

<#
.SYNOPSIS
    Updates groups to set isCloudManaged parameter to true for on-premises synchronized groups.

.DESCRIPTION
    This script reads a file containing group Ids, checks each group's OnPremisesSyncEnabled property,
    and if true, calls the onPremisesSyncBehavior API to set isCloudManaged to true.

.PARAMETER FilePath
    Mandatory. Path to the file containing group Ids (one per line).

.PARAMETER WhatIf
    Boolean parameter. When true (default), shows what would be done without making actual changes.

.EXAMPLE
    .\Update-GroupSoA.ps1 -FilePath "C:\temp\groups.txt"
    .\Update-GroupSoA.ps1 -FilePath "C:\temp\groups.txt" -WhatIf $false

.NOTES
    Requires Microsoft.Graph PowerShell module to be installed and appropriate permissions.
    Required Graph permissions: Group.ReadWrite.All, Group-OnPremisesSyncBehavior.ReadWrite.All

    Input file should contain one group Id (GUID) per line.
#>

[CmdletBinding()]
param(
    [Parameter(Mandatory = $true)]
    [string]$FilePath,

    [Parameter(Mandatory = $false)]
    [bool]$WhatIf = $true
)

# Import Groups module
try {
    $moduleName = "Microsoft.Graph.Groups"
    if (-not (Get-Module -Name $moduleName)) {
        Import-Module -Name $moduleName
    }
    Write-Host "Successfully imported Microsoft Graph modules."
}
catch {
    Write-Error "Failed to import Microsoft Graph modules. Please ensure Microsoft.Graph PowerShell SDK is installed."
    Write-Host "Install with: Install-Module Microsoft.Graph -Scope CurrentUser"
    exit 1
}

# Connect to MS Graph
$context = Get-MgContext
if (-not $context) {
    Connect-MgGraph -Scopes 'Group.ReadWrite.All', 'Group-OnPremisesSyncBehavior.ReadWrite.All'
}

# Validate input file
if (-not (Test-Path $FilePath)) {
    Write-Error "Input file not found: $FilePath"
    exit 1
}

Write-Host "Starting group update process using $FilePath (WhatIf: $WhatIf)..."
Write-Host "-----------------------------------"

# Read group Ids from file
$groupGuids = Get-Content $FilePath

if ($groupGuids.Count -eq 0) {
    Write-Error "No group Ids found in the input file."
    exit 1
}

Write-Host "Found $($groupGuids.Count) group Ids to process."

# Initialize counters for summary
$totalGroups = $groupGuids.Count
$processedCount = 0
$updatedCount = 0
$skippedCount = 0
$errorCount = 0

# Process each group
foreach ($groupId in $groupGuids) {
    $processedCount++
    Write-Host "`nProcessing $groupId ($processedCount/$totalGroups)"

    try {
        $group = Get-MgGroup -GroupId $groupId -Property "Id,DisplayName,OnPremisesSyncEnabled"

        Write-Host "Group Name: $($group.DisplayName)"
        Write-Host "OnPremisesSyncEnabled: $($group.OnPremisesSyncEnabled)"

        if ($group.OnPremisesSyncEnabled -eq $true) {
            $actionDescription = "Set isCloudManaged to true for group '$($group.DisplayName)'"

            if ($WhatIf) {
                Write-Host "Skipping since WhatIf is enabled: $actionDescription"
                $skippedCount++
            }
            else {
                try {
                    # Call the onPremisesSyncBehavior API to set isCloudManaged to true
                    $body = @{
                        isCloudManaged = $true
                    }

                    $uri = "https://graph.microsoft.com/v1.0/groups/$groupId/onPremisesSyncBehavior"
                    Invoke-MgGraphRequest -Uri $uri -Method PATCH -Body ($body | ConvertTo-Json) -ContentType "application/json"

                    Write-Host "SUCCESS: Updated group to cloud-managed"
                    $updatedCount++
                }
                catch {
                    Write-Host "ERROR: Failed to update group: $_"
                    $errorCount++
                }
            }
        }
        else {
            Write-Host "SKIPPED: Group is not on-premises synchronized"
            $skippedCount++
        }
    }
    catch {
        Write-Host "ERROR: Failed to retrieve group information: $_"
        $errorCount++
    }
}

Write-Host "`n-----------------------------------"
Write-Host "SUMMARY"
Write-Host "-----------------------------------"
Write-Host "Total groups processed: $totalGroups"
Write-Host "Successfully updated: $updatedCount"
Write-Host "Skipped (not sync-enabled or WhatIf): $skippedCount"
Write-Host "Errors encountered: $errorCount"

Write-Host "`nScript completed."

Status der Attribute nach der Konvertierung von SOA

In der folgenden Tabelle wird der Status für isCloudManaged - und onPremisesSyncEnabled-Attribute erläutert, nachdem Sie die SOA eines Objekts konvertiert haben.

Administratorschritt isCloudManaged-Wert onPremisesSyncEnabled-Wert Beschreibung
Der Administrator synchronisiert ein Objekt von AD DS mit der Microsoft Entra-ID. false true Wenn ein Objekt ursprünglich mit Microsoft Entra-ID synchronisiert wird, wird das onPremisesSyncEnabled-Attribut auf true gesetzt und isCloudManaged auf false festgelegt. 
Der Administrator konvertiert die Autoritätsquelle (SOA) des Objekts in die Cloud. true null Nachdem ein Administrator die SOA eines Objekts in die Cloud konvertiert hat, wird das isCloudManaged-Attribut auf true gesetzt, und der onPremisesSyncEnabled-Attributwert wird auf null festgelegt. 
Der Administrator setzt den SOA-Vorgang zurück. false null Wenn ein Administrator die SOA wieder in AD konvertiert, wird isCloudManaged auf false und onPremisesSyncEnabled auf null gesetzt, bis der Synchronisierungsclient das Objekt übernimmt.   
Der Administrator erstellt ein cloudeigenes Objekt in der Microsoft Entra-ID. false null Wenn ein Administrator ein neues cloudeigenes Objekt in Microsoft Entra ID erstellt, wird isCloudManaged auf false und onPremisesSyncEnabled auf null festgelegt.

Zurücksetzen des SOA-Updates

Von Bedeutung

Stellen Sie sicher, dass die Gruppen, die Sie zurücksetzen, keine Cloudverweise aufweisen. Entfernen Sie Cloudbenutzer aus soA konvertierten Gruppen, und entfernen Sie diese Gruppen aus Zugriffspaketen, bevor Sie die Gruppe auf AD DS zurücksetzen. Der Synchronisierungsclient übernimmt das Objekt im nächsten Synchronisierungszyklus. Ein PowerShell-Beispielskript zum Identifizieren und Entfernen von Cloudbenutzern aus Gruppen finden Sie unter: Skript zum Identifizieren von Cloudmitgliedern (Benutzern) einer Gruppe.

Sie können diesen Vorgang ausführen, um das SOA-Update zurückzuschalten und die SOA lokal zurückzuverwenden.

PATCH https://graph.microsoft.com/v1.0/groups/{ID}/onPremisesSyncBehavior
   {
     "isCloudManaged": false
   }   

Screenshot des API-Aufrufs zum Wiederherstellen von SOA.

Hinweis

Die Änderung von isCloudManaged in false führt dazu, dass ein AD DS-Objekt, das im Bereich der Synchronisierung liegt, bei der nächsten Ausführung von Connect Sync übernommen wird. Bis zum nächsten Ausführen der Connect-Synchronisierung kann das Objekt in der Cloud bearbeitet werden. Das Rollback von SOA ist erst abgeschlossen, nachdem sowohl der API-Aufruf als auch die nächste geplante oder erzwungene Ausführung der Connect-Synchronisierung abgeschlossen sind.

Überprüfen der Änderung in den Audit-Protokollen

Wählen Sie die Aktivität Änderungen der Autoritätsquelle von AD DS zu Cloud rückgängig machen aus:

Screenshot von Rückgängigmachen von Änderungen in Überwachungsprotokollen.

Validieren im Connect Sync-Clients

  1. Führen Sie den folgenden Befehl aus, um die Verbindungssynchronisierung zu starten:

    Start-ADSyncSyncCycle
    
  2. Öffnen Sie das Objekt im Synchronisierungsserver-Manager (Details befinden sich im Abschnitt "Verbindungssynchronisierungsclient "). Sie können den Status des Microsoft Entra ID-Connectorobjekts " Awaiting Export Confirmation " und "blockOnPremisesSync = false" sehen, was bedeutet, dass das Objekt SOA erneut von der lokalen Bereitstellung übernommen wird.

    Screenshot eines Objekts, das auf den Export wartet.

Einschränkungen

  • Keine Abstimmungsunterstützung für AD DS-Gruppen: Ein AD DS-Administrator (oder eine Anwendung mit ausreichenden Berechtigungen) kann eine AD DS-Gruppe direkt ändern. Wenn die Gruppen-SOA für die Gruppe konvertiert wird oder die Bereitstellung von Cloud-Sicherheitsgruppen in AD DS aktiviert ist, werden diese lokalen AD-Änderungen nicht in Microsoft Entra ID widergespiegelt. Wenn eine Änderung an der Cloud-Sicherheitsgruppe vorgenommen wird, werden alle lokalen AD-DS-Änderungen überschrieben, wenn die Gruppenbereitstellung für AD DS ausgeführt wird.

  • Kein doppelter Schreibzugriff zulässig: Nachdem Sie mit der Verwaltung der Mitgliedschaften für die konvertierte Gruppe (z. B. Cloudgruppe A) von Microsoft Entra ID beginnen und diese Gruppe als geschachtelte Gruppe unter einer anderen AD DS-Gruppe (OnPremGroupB) bereitstellen, die im Bereich für die Synchronisierung mit Microsoft Entra-ID liegt, werden die Mitgliedschaftsverweise der Gruppe A nicht synchronisiert, wenn die Synchronisierung für OnPremGroupB erfolgt. Die Mitgliedschaftsverweise werden nicht synchronisiert, da der Synchronisierungsclient die Verweise auf die Cloudgruppenmitgliedschaft nicht kennt. Dieses Verhalten ist beabsichtigt.

  • Keine SOA-Konvertierung geschachtelter Gruppen: Wenn in AD DS geschachtelte Gruppen vorhanden sind und Sie die SOA der übergeordneten Gruppe oder der obersten Gruppe in Microsoft Entra-ID konvertieren möchten, wird nur die übergeordnete Gruppe SOA konvertiert. Geschachtelte Gruppen in der übergeordneten Gruppe sind weiterhin AD DS-Gruppen. Sie müssen die SOA aller geschachtelten Gruppen einzeln konvertieren. Wir empfehlen, mit der Gruppe zu beginnen, die am niedrigsten in der Hierarchie steht, und sich dann nach oben zu bewegen.

  • Keine Unterstützung für Erweiterungsattribute (1-15): Erweiterungsattribute 1 bis 15 werden für Cloudsicherheitsgruppen nicht unterstützt und werden nach der Konvertierung von SOA nicht unterstützt.

Skript zum Identifizieren von Cloudmitgliedern (Benutzern) einer Gruppe

Das folgende Skript kann verwendet werden, um Cloudbenutzer aus Gruppen zu identifizieren und zu entfernen:

<#
.SYNOPSIS
    Finds cloud users in an Entra ID group and optionally removes them.

.DESCRIPTION
    This script pages through all users in a specified Entra ID group, identifies cloud users
    (users where onPremisesSyncEnabled is not set to true), and prints their details.
    Optionally removes these users from the group if removeUsers is set to true.

.PARAMETER GroupId
    The GUID of the Entra ID group to process. This parameter is required.

.PARAMETER RemoveUsers
    Boolean flag to indicate whether to remove cloud users from the group. 
    Default is false (optional parameter).

.EXAMPLE
    .\Find-CloudUsersInGroup.ps1 -GroupId "12345678-1234-1234-1234-123456789012"
    .\Find-CloudUsersInGroup.ps1 -GroupId "12345678-1234-1234-1234-123456789012" -RemoveUsers $true

.NOTES
    Requires Microsoft.Graph PowerShell module to be installed and appropriate permissions.
    Required Graph permissions: Group.Read.All, GroupMember.Read.All, User.Read.All and GroupMember.ReadWrite.All (if removing users)
#>

[CmdletBinding()]
param(
    [Parameter(Mandatory = $true)]
    [System.Guid]$GroupId,

    [Parameter(Mandatory = $false)]
    [bool]$RemoveUsers = $false
)

# Import required modules
try {
    $moduleName = "Microsoft.Graph.Groups"
    if (-not (Get-Module -Name $moduleName)) {
        Import-Module -Name $moduleName
    }
    $moduleName = "Microsoft.Graph.Users"
    if (-not (Get-Module -Name $moduleName)) {
        Import-Module -Name $moduleName
    }
    Write-Host "Microsoft Graph modules imported successfully"
}
catch {
    Write-Error "Failed to import Microsoft Graph modules. Please install Microsoft.Graph PowerShell module."
    Write-Error "Run: Install-Module Microsoft.Graph -Scope CurrentUser"
    exit 1
}

# Connect to MS Graph and verify the group exists
$context = Get-MgContext
if (-not $context) {
    Connect-MgGraph -Scopes 'Group.Read.All','GroupMember.Read.All','GroupMember.ReadWrite.All','User.Read.All'
}

$group = Get-MgGroup -GroupId $GroupId -Property "Id,DisplayName,MailEnabled"
Write-Host "Processing group: $($group.DisplayName) (ID: $GroupId)"

if ($group.MailEnabled -eq $true) {
    Write-Warning "The specified group is mail-enabled. Users can only be identified using this script. To remove users, use Exchange."
}

# Initialize counters
$totalUsers = 0
$cloudUsers = 0
$removedUsers = 0

Write-Host "`nStarting to process group users..."

try {
    # Get all group members that are users
    $usersInGroup = Get-MgGroupMemberAsUser -GroupId $GroupId -All -Property "Id"

    if ($usersInGroup.Count -ge 1) {
        $totalUsers = $usersInGroup.Count
        Write-Host "Found $totalUsers total users in the group"
    }
    else {
        Write-Host "No users found in the group"
        exit 0
    }
}
catch {
    Write-Error "Failed to retrieve group users: $($_.Exception.Message)"
    exit 1
}

Write-Host "`nProcessing each user to identify cloud users..."
Write-Host "-----------------"

# Process each user
foreach ($user in $usersInGroup) {
    try {
        # Get detailed user information
        $user = Get-MgUser -UserId $user.Id -Property "Id,DisplayName,UserPrincipalName,OnPremisesSyncEnabled"

        # Check if user is a cloud user
        $isCloudUser = -not $user.OnPremisesSyncEnabled

        if ($isCloudUser) {
            $cloudUsers++

            # Print cloud user details
            Write-Host "Cloud User Found:"
            Write-Host "  Object ID: $($user.Id)"
            Write-Host "  Display Name: $($user.DisplayName)"
            Write-Host "  User Principal Name: $($user.UserPrincipalName)"
            Write-Host "  OnPremisesSyncEnabled: $($user.OnPremisesSyncEnabled)"

            # Remove user from group if requested
            if ($RemoveUsers) {
                Remove-MgGroupMemberByRef -GroupId $GroupId -DirectoryObjectId $user.Id -ErrorAction Stop
                Write-Host "REMOVED from group"
                $removedUsers++
            }
        }
    }
    catch {
        Write-Warning "Failed to process User ID $($user.Id): $($_.Exception.Message)"
    }
}

# Summary
Write-Host "-----------------"
Write-Host "SUMMARY:"
Write-Host "-----------------"
Write-Host "Total group users processed: $totalUsers"
Write-Host "Cloud users identified: $cloudUsers"
if ($RemoveUsers) {
    Write-Host "Cloud users successfully removed: $removedUsers"
}

if ($cloudUsers -eq 0) {
    Write-Host "No cloud users found in this group."
}

Write-Host "`nScript completed."

Dieses Skript wird als Beispiel bereitgestellt und sollte nicht als offizielle Anleitung zum Identifizieren und Entfernen von Cloudbenutzern aus Gruppenmitgliedschaften betrachtet werden.

Umfang einer Gruppe für SOA-Operationen innerhalb einer administrativen Einheit

Führen Sie die folgenden Schritte aus, um eine Gruppe für 'Source of Authority'-Operationen innerhalb einer Verwaltungseinheit festzulegen:

  1. Erstellen Sie eine Einheit, die als Bereich für die Gruppe verwendet werden soll. Schritte zum Erstellen einer Einheit finden Sie unter: Erstellen einer administrativen Einheit.

  2. Fügen Sie die Gruppe als Hybrid-Identitätsadministrator innerhalb des Bereichs hinzu. Screenshot der Zuweisung einer Hybridadministratorrolle zu einem Bereich

  3. Fügen Sie die Gruppe zur Einheit hinzu. Weitere Informationen hierzu finden Sie unter: Hinzufügen von Benutzern, Gruppen oder Geräten zu einer Verwaltungseinheit.

  4. Übertragen Sie die SOA einer Gruppe innerhalb des Bereichs der Einheit. Eine Anleitung zum Übertragen der SOA von Gruppen finden Sie unter: Konvertieren von SOA für eine Testgruppe.