Convert Azure AD User and Device Groups with PowerShell

Entra ID Gruppen mit PowerShell konvertieren

In deiner Umgebung hast du mehrere Gruppen, um Zuweisungen einer App oder eines Konfigurationsprofils zu erstellen. Wenn du später feststellst, dass es besser gewesen wäre, wenn dies keine Gerätegruppe, sondern eine Benutzergruppe wäre, ist es schwierig, das zu ändern, ohne dass es Auswirkungen auf die Benutzer hat oder du großen Aufwand betreiben musst. Ich habe ein Skript geschrieben, mit dem du eine Benutzergruppe in eine Gerätegruppe oder eine Gerätegruppe in eine Benutzergruppe umwandeln kannst – basierend auf dem einem Gerät zugewiesenen Benutzer oder basierend auf den einem Benutzer zugewiesenen Geräten.

PowerShell-Skript für die Azure AD Gruppenmigration

Wie funktioniert es

Zunächst liest das Skript alle Mitglieder der definierten Gruppe aus und kennzeichnet sie als Benutzer, Gerät oder Gruppe. Anschließend wird jedes Gruppenmitglied verarbeitet: Bei einer Benutzer-zu-Gerät-Migration wird geprüft, welche Geräte dem jeweiligen Benutzer in Microsoft Entra ID (ehemals Azure AD) zugewiesen sind, und bei einer Gerät-zu-Benutzer-Migration wird geprüft, wer in Microsoft Entra ID der zugewiesene Besitzer dieses Geräts ist. Handelt es sich um eine hybride Gruppe, in der bereits Benutzer- oder Geräteobjekte enthalten sind, werden diese ebenfalls migriert:

function Get-MigrateGroupMember{
    param (
        [String]$migrationType,
        [array]$groupMember = $null,
        $windows = $true,
        $ios = $true,
        $macos = $true,
        $android = $true
    )

    $os = @()
    if($windows){$os += 'Windows'}
    if($macos){$os += 'MacMDM'}
    if($android){$os += 'Android'}
    if($ios){$os += 'IOS'}

    $newGroupMember = @()

    if($migrationType -eq 'User'){
        $groupMember | Where-Object {$_.ItemType -eq 'Device'} | Foreach-Object {
            $userId = (Get-MgDeviceRegisteredOwner -DeviceId $_.Id).Id
            if($userId){
                $newGroupMember += [PSCustomObject]@{
                    Uri = "https://graph.microsoft.com/v1.0/directoryObjects/" + $userId
                }
            }
        }
        $groupMember  | Where-Object {$_.ItemType -eq 'User'} | Foreach-Object {
            $newGroupMember += [PSCustomObject]@{
                Uri             = $_.Uri
            }
        }
    }elseif($migrationType -eq 'Device'){
        $groupMember  | Where-Object {$_.ItemType -eq 'User'} | Foreach-Object {

            (Get-MgUserOwnedDevice -UserId $_.Id) | ForEach-Object {
                $newGroupMember += [PSCustomObject]@{
                    Uri             = "https://graph.microsoft.com/v1.0/directoryObjects/" + $_.Id
                    OperatinSystem  = $_.AdditionalProperties.operatingSystem
                }
            }
        }
        $groupMember  | Where-Object {$_.ItemType -eq 'Device'} | Foreach-Object {
            $newGroupMember += [PSCustomObject]@{
                Uri             = $_.Uri
                OperatinSystem  = $_.OperatinSystem
            }
        }
        $newGroupMember = $newGroupMember | Where-Object {$_.OperatinSystem -in $os}
    }
    $newGroupMember = $newGroupMember | Sort-Object -Property uri -Uniqu
    return $newGroupMember
}

Bevor du das Skript ausführst, stelle sicher, dass du mit ausreichenden Berechtigungen bei Microsoft Graph angemeldet bist. Das Skript nutzt das Microsoft Graph PowerShell SDK und benötigt mindestens die Scopes Group.ReadWrite.All, Device.Read.All und User.Read.All. Melde dich zuerst mit Connect-MgGraph -Scopes "Group.ReadWrite.All","Device.Read.All","User.Read.All" an, sonst liefern die Abfragen nach registrierten Besitzern und zugewiesenen Geräten einfach nichts zurück und deine konvertierte Gruppe bleibt leer.

Wie kann ich eine Gruppe migrieren

  • Lade das Skript aus meinem GitHub-Repository herunter
  • Führe das Skript aus und gib die folgenden Informationen ein:

Zu Benutzergruppe:

Zu Gerätegruppe:

Ein paar typische Stolperfallen, auf die du achten solltest:

  • Geräte ohne registrierten Besitzer in Entra ID werden bei einer Gerät-zu-Benutzer-Konvertierung übersprungen. Prüfe daher vorher, ob deinen Geräten tatsächlich ein primärer Benutzer zugewiesen ist.
  • Die neue Gruppe wird auf Basis der aktuellen Mitgliedschaft befüllt. Die Konvertierung ist also eine Momentaufnahme und keine dynamische Regel. Ändert sich die Ausgangsgruppe später, musst du das Skript erneut ausführen.
  • Teste immer zuerst mit einer kleinen Pilotgruppe. Wenn du die ursprüngliche Zuweisung entfernst, bevor die neue Gruppe vollständig befüllt ist, können Geräte für diese Richtlinie kurzzeitig ohne Verwaltung dastehen.

Warum ist das wichtig? Die Wahl zwischen einer Benutzergruppe und einer Gerätegruppe ist nicht nur kosmetisch. Eine Gerätegruppe ist das richtige Ziel, wenn eine Konfiguration der Hardware folgen soll, unabhängig davon, wer sich anmeldet, zum Beispiel ein Kiosk-Profil, eine Security-Baseline oder eine Win32-App, die schon vor der ersten Benutzeranmeldung vorhanden sein muss. Eine Benutzergruppe hingegen folgt der Person über alle ihre Geräte hinweg, was du etwa für Microsoft 365 Lizenzzuweisungen, benutzerbezogene App-Bereitstellungen oder Conditional Access brauchst.

Die falsche Wahl zu Beginn führt dazu, dass deine Zuweisung zum falschen Zeitpunkt greift, und genau dieses mühsame manuelle Aufräumen bei einer großen Anzahl an Objekten soll dir das Skript abnehmen.

Fazit

Ich hoffe, ich konnte dir helfen, den Wechsel von Benutzer zu Gerät oder umgekehrt einfacher zu gestalten. Für wiederkehrende Aufgaben wie diese kann auch ein Azure Automation Runbook zur Automatisierung von Aufgaben in Intune ein sinnvoller nächster Schritt sein. Besonders bei großen Gruppen kann es eine recht mühsame Aufgabe sein, eine Benutzerzuweisung in eine Gerätezuweisung zu ändern.

Bleib gesund, Cheers
Jannik

Update 02.08.2022

Du kannst mein Skript auch aus der PowerShell Gallery herunterladen:
Wenn du nach einer weiteren Möglichkeit suchst, Intune-Zuweisungen zu automatisieren, schau dir Intune App-Zuweisungsgruppen mit Azure Runbooks automatisieren an.

Für einen aktualisierten Ansatz mit der Microsoft Graph API kannst du auch Intune-Gerätegruppen über die Graph API in Benutzergruppen konvertieren ansehen.

Install-Script -Name Translate-AadGroupUserDevice