Convert Intune Device Groups to User Groups via Graph API

Intune-Gerätegruppen in Benutzergruppen umwandeln

Aktuell bin ich auf der MMS-Konferenz in Fort Lauderdale, wo ein Teilnehmer eine gute Frage gestellt hat: Ist es möglich, eine Gerätegruppe in eine Benutzergruppe umzuwandeln und umgekehrt? Die Antwort lautet sowohl ja als auch nein. Zwar gibt es in Intune keine sofort verfügbare Funktion, um das direkt zu erreichen, aber es ist möglich, indem man die Microsoft Graph API nutzt.

Symbole für Geräte- und Benutzergruppen, verbunden durch Microsoft Graph

Warum Gerätegruppen in Benutzergruppen umwandeln?

Es gibt zahlreiche praktische Szenarien, in denen man eine Gerätegruppe in eine Benutzergruppe umwandeln muss. Vielleicht wurde eine App oder Richtlinie ursprünglich Geräten zugewiesen, jetzt möchten Sie aber die Personen ansprechen, denen diese Geräte gehören, oder genau umgekehrt. Da Intune dafür keine native Schaltfläche bietet, besteht der praktische Weg darin, die Mitgliedschaft der einen Gruppe auszulesen und auf den anderen Gruppentyp zu übertragen, und genau das macht das folgende Skript.

Ein konkretes Beispiel: Sie haben während eines Hardware-Refreshs eine Branchen-App an eine Gerätegruppe ausgerollt, und nun möchte die Compliance dieselbe App aus Lizenzgründen pro Benutzer auswerten. Statt die Zuweisung von Hand neu aufzubauen, lesen Sie die Gerätemitgliedschaft aus, ermitteln den registrierten Besitzer jedes Geräts und erstellen eine passende Benutzergruppe. Der umgekehrte Fall ist genauso häufig, wenn ein benutzerbasierter Ausschluss in Conditional Access ein gerätebasiertes Gegenstück benötigt.

Vor einigen Jahren habe ich ein Tool namens Intune Tool Box entwickelt – mein erster Versuch, ein Community-Tool zu erstellen, um einige Lücken zu schließen, die von den nativen Funktionen von Intune nicht abgedeckt werden. Dieses Tool enthielt die Funktionalität zum Umwandeln von Gruppen, wird aber nicht mehr gepflegt. Ich habe den Code überarbeitet, um diese Aufgabe zu erfüllen, und hier ist das Ergebnis:

Voraussetzungen und Graph-Berechtigungen

Bevor Sie etwas ausführen, stellen Sie sicher, dass das Microsoft Graph PowerShell-Modul installiert ist und dass das angemeldete Konto den delegierten Berechtigungen zustimmen kann, die das Skript anfordert. Sie benötigen Group.ReadWrite.All, um die neue Gruppe zu erstellen und Mitglieder hinzuzufügen, sowie User.Read.All, Device.Read.All und Directory.Read.All, damit das Skript die Beziehung zwischen Geräten und ihren registrierten Besitzern auflösen kann. Falls Ihr Tenant eine Administratorzustimmung verlangt, muss ein Intune- oder globaler Administrator diese Berechtigungen einmalig genehmigen, bevor die Umwandlung für alle anderen funktioniert.

# Install the Microsoft Graph PowerShell module if not already installed
# Install-Module Microsoft.Graph -Scope CurrentUser

Import-Module Microsoft.Graph

# Connect to Microsoft Graph with the required scopes
Connect-MgGraph -Scopes "Group.ReadWrite.All", "User.Read.All", "Device.Read.All", "Directory.Read.All"

# Function to convert a group and include associated devices or users
function Convert-Group {
    param (
        [Parameter(Mandatory = $true)]
        [string]$SourceGroupId,
        [Parameter(Mandatory = $true)]
        [ValidateSet("User", "Device")]
        [string]$TargetMembershipType,
        [Parameter(Mandatory = $false)]
        [string]$NewGroupName
    )

    # Get the source group
    $sourceGroup = Get-MgGroup -GroupId $SourceGroupId

    # Get all members of the source group
    $members = Get-MgGroupMember -GroupId $SourceGroupId -All

    # Initialize an array to hold the target members
    $targetMembers = @()

    if ($TargetMembershipType -eq "User") {
        # For each device, get the assigned user
        foreach ($member in $members) {
            if ($member.'@odata.type' -eq '#microsoft.graph.device') {
                $deviceId = $member.Id
                # Get the registered user of the device
                $device = Get-MgDevice -DeviceId $deviceId -ExpandProperty registeredOwners
                $assignedUsers = $device.RegisteredOwners | Where-Object { $_.'@odata.type' -eq '#microsoft.graph.user' }
                foreach ($user in $assignedUsers) {
                    if (-not $targetMembers.Contains($user.Id)) {
                        $targetMembers += $user.Id
                    }
                }
            }
        }
    } elseif ($TargetMembershipType -eq "Device") {
        # For each user, get all devices assigned to them
        foreach ($member in $members) {
            if ($member.'@odata.type' -eq '#microsoft.graph.user') {
                $userId = $member.Id
                # Get devices registered to the user
                $userDevices = Get-MgUserRegisteredDevice -UserId $userId -All
                foreach ($device in $userDevices) {
                    if (-not $targetMembers.Contains($device.Id)) {
                        $targetMembers += $device.Id
                    }
                }
            }
        }
    }

    # Set the new group name
    if (-not $NewGroupName) {
        $NewGroupName = "$($sourceGroup.DisplayName) - Converted to $TargetMembershipType Group"
    }

    # Create a new security group
    $newGroupParams = @{
        DisplayName     = $NewGroupName
        MailEnabled     = $false
        MailNickname    = $NewGroupName -replace ' ', ''
        SecurityEnabled = $true
        GroupTypes      = @()
    }

    $newGroup = New-MgGroup @newGroupParams

    # Add members to the new group
    foreach ($memberId in $targetMembers) {
        try {
            New-MgGroupMemberByRef -GroupId $newGroup.Id -DirectoryObjectId $memberId
        } catch {
            Write-Warning "Failed to add member with ID $memberId to the group."
        }
    }

    Write-Host "New group created with ID: $($newGroup.Id)"
}

# Example usage:
# Convert a device group to a user group
Convert-Group -SourceGroupId "<SourceGroupId>" -TargetMembershipType "User"

# Convert a user group to a device group
# Convert-Group -SourceGroupId "<SourceGroupId>" -TargetMembershipType "Device"

Wie das Skript funktioniert

Die Logik ist bewusst einfach gehalten, damit Sie sie anpassen können. Das Skript liest jedes Mitglied der Quellgruppe, prüft den Objekttyp und folgt dann der Beziehung zwischen Gerät und Besitzer in der von Ihnen gewünschten Richtung. Beim Umwandeln in eine Benutzergruppe werden die registeredOwners jedes Geräts ausgewertet und die Benutzer gesammelt; beim Umwandeln in eine Gerätegruppe werden stattdessen die registrierten Geräte jedes Benutzers ermittelt. Doppelte Mitglieder werden herausgefiltert, bevor eine neue Sicherheitsgruppe erstellt und befüllt wird.

Da immer eine neue Gruppe erstellt und nicht die ursprüngliche bearbeitet wird, bleibt die Quellmitgliedschaft unangetastet, sodass ein fehlerhafter Durchlauf niemals eine bestehende Zuweisung zerstört. Das macht das Vorgehen iterierbar: ausführen, das Ergebnis im Entra-Portal prüfen und die neue Gruppe löschen, falls etwas nicht stimmt.

Häufige Stolperfallen

Die häufigste Überraschung ist eine leere Ausgabe: Wenn Ihre Geräte in Entra ID keinen registrierten Besitzer haben, gibt es schlicht keinen Benutzer, auf den projiziert werden könnte, und die resultierende Gruppe bleibt leer. Hybrid-Joined-Geräte und gemeinsam genutzte Kiosk-Geräte sind hier typische Kandidaten. Die zweite Stolperfalle sind dynamische Gruppen: Das Skript kopiert eine statische Momentaufnahme der Mitgliedschaft, sodass eine umgewandelte Gruppe nicht mit einer dynamischen Quelle synchron bleibt. Testen Sie schließlich immer zuerst gegen eine kleine Gruppe und bestätigen Sie die Mitgliedschaft im Entra Admin Center, bevor Sie eine echte Zuweisung auf die neue Gruppe richten.

Zusammengefasst: Auch wenn Intune keine native Option bietet, um Gerätegruppen in Benutzergruppen umzuwandeln, macht das Microsoft Graph PowerShell SDK es unkompliziert. Passen Sie die Berechtigungen und Gruppennamen an Ihren Tenant an, testen Sie zuerst gegen eine kleine Gruppe, und Sie können die Mitgliedschaft zwischen Geräte- und Benutzergruppen verschieben, wann immer ein Bereitstellungsszenario es erfordert.

2 thoughts on “Intune-Gerätegruppen in Benutzergruppen umwandeln

Comments are closed.