Copier l'appartenance à un groupe d'un utilisateur à un autre dans Microsoft Entra ID

Vous devez donner à un utilisateur les mêmes appartenances à un groupe qu'un autre utilisateur. Vous pouvez le faire manuellement en ajoutant chaque groupe individuellement à l'utilisateur. Mais cela prend du temps. Une meilleure façon consiste à automatiser le processus avec PowerShell. Dans cet article, vous apprendrez comment copier l'appartenance à un groupe d'un utilisateur à un autre dans Microsoft Entra ID.

Copier le script PowerShell d'appartenance à un groupe

Le script PowerShell Copy-GroupMembership.ps1 copiera les appartenances aux groupes d'un utilisateur spécifié (source) vers un autre utilisateur (cible) dans Microsoft Entra ID.

Note:Le script ne peut pas copier les groupes de sécurité ou les listes de distribution à extension messagerie, car ceux-ci doivent être gérés avec Exchange Online PowerShell. De plus, si un groupe est synchronisé à partir d'Active Directory sur site, vous ne pouvez le gérer qu'à partir de là, pas dans Microsoft Entra ID.

Voici un exemple d'appartenance au groupe de l'utilisateur[email protégé].

Étape 1. Installez Microsoft Graph PowerShell

Exécutez Windows PowerShell en tant qu'administrateur et installez Microsoft Graph PowerShell.

Install-Module Microsoft.Graph -Force

Important:Mettez toujours à jour vers la dernière version du module Microsoft Graph PowerShell avant d’exécuter une applet de commande ou un script pour éviter les erreurs et les résultats incorrects.

Maintenant que le module SDK Microsoft Graph PowerShell est installé, nous pouvons passer à l’étape suivante.

En savoir plus:Actualiser l'adhésion aux groupes AD sans redémarrage/déconnexion

Étape 2. Connectez-vous à Microsoft Graph PowerShell

Vous devez vous connecter à Microsoft Graph PowerShell avec les autorisations appropriées.

Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "GroupMember.ReadWrite.All" -NoWelcome

Étape 3. Téléchargez le script PowerShell de copie-adhésion

Créez deux dossiers sur le(C :)conduire:

  • Scripts
  • Température

Téléchargez et placez le script PowerShell Copy-GroupMembership.ps1 dans leC:Scriptsdossier. Le script copiera toutes les appartenances aux groupes d'un utilisateur spécifié vers un autre utilisateur dans Microsoft Entra ID.

Assurez-vous que le fichier est débloqué pour éviter les erreurs lors de l'exécution du script. Pour en savoir plus, consultez l'article Erreur non signée numériquement lors de l'exécution du script PowerShell.

Une autre option consiste à copier et coller le code ci-dessous dans le Bloc-notes. Donnez-lui le nomCopier-GroupMemberships.ps1et placez-le dans leC:Scriptsdossier.

<#
    .SYNOPSIS
    Copy-GroupMemberships.ps1

    .DESCRIPTION
    Copy all group memberships of a specified user to another user in Microsoft Entra ID.

    .LINK
    www.alitajran.com/copy-group-membership-from-one-user-to-another-in-microsoft-entra-id/

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.alitajran.com
    LinkedIn:   linkedin.com/in/alitajran
    X:          x.com/alitajran

    .CHANGELOG
    V1.00, 05/25/2025 - Initial version
#>

# Define parameters for the script
param (
    [Parameter(Mandatory = $true, HelpMessage = "Enter the User ID (e.g., email or object ID) of the source Entra ID user")]
    [string]$UserId,
    [Parameter(HelpMessage = "Specify the path for the CSV output file")]
    [string]$CsvFilePath,
    [Parameter(HelpMessage = "Enable to display results in Out-GridView")]
    [switch]$OutGridView,
    [Parameter(HelpMessage = "Enter the User ID (e.g., email or object ID) of the target user to copy memberships to")]
    [string]$TargetUserId
)

# Connect to Microsoft Graph with required scopes
Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "GroupMember.ReadWrite.All" -NoWelcome

# Initialize a list to store report data
$Report = [System.Collections.Generic.List[Object]]::new()

try {
    # If TargetUserId is provided, verify target user exists
    if ($TargetUserId) {
        $TargetUser = Get-MgUser -UserId $TargetUserId -ErrorAction Stop
    }

    # Fetch the source user's group memberships
    $EntraGroupMembers = Get-MgUserMemberOf -UserId $UserId -All -ErrorAction Stop

    # Check if the source user is a member of any groups
    if (-not $EntraGroupMembers) {
        Write-Host "No group memberships found for user: $UserId" -ForegroundColor Cyan
        return
    }

    # Process each group membership
    foreach ($EntraGroup in $EntraGroupMembers) {
        # Extract group details from AdditionalProperties
        $AdditionalProperties = $EntraGroup.AdditionalProperties

        # Determine group type
        $GroupType = if ($AdditionalProperties.groupTypes -contains "Unified" -and $AdditionalProperties.securityEnabled) {
            "Microsoft 365 (security-enabled)"
        }
        elseif ($AdditionalProperties.groupTypes -contains "Unified" -and -not $AdditionalProperties.securityEnabled) {
            "Microsoft 365"
        }
        elseif (-not ($AdditionalProperties.groupTypes -contains "Unified") -and $AdditionalProperties.securityEnabled -and $AdditionalProperties.mailEnabled) {
            "Mail-enabled security"
        }
        elseif (-not ($AdditionalProperties.groupTypes -contains "Unified") -and $AdditionalProperties.securityEnabled) {
            "Security"
        }
        elseif (-not ($AdditionalProperties.groupTypes -contains "Unified") -and $AdditionalProperties.mailEnabled) {
            "Distribution"
        }
        else {
            "N/A"
        }

        # Create a custom object for the group details
        $GroupDetails = [PSCustomObject]@{
            Id              = $EntraGroup.Id
            DisplayName     = if ($AdditionalProperties.displayName) { $AdditionalProperties.displayName } else { "N/A" }
            Email           = if ($AdditionalProperties.mail) { $AdditionalProperties.mail } else { "N/A" }
            SecurityEnabled = if ($AdditionalProperties.securityEnabled) { $AdditionalProperties.securityEnabled } else { "N/A" }
            MailEnabled     = if ($AdditionalProperties.mailEnabled) { $AdditionalProperties.mailEnabled } else { "N/A" }
            GroupType       = $GroupType
            Source          = if ($AdditionalProperties.onPremisesSyncEnabled) { "On-Premises" } else { "Cloud" }
        }
        # Add the group details to the report list
        $Report.Add($GroupDetails)
    }

    # Output to console only if TargetUserId is not provided
    if (-not $TargetUserId) {
        $Report | Sort-Object DisplayName | Format-Table -AutoSize
    }

    # Output to Out-GridView if specified
    if ($OutGridView) {
        $Report | Sort-Object DisplayName | Out-GridView -Title "Group Memberships for $UserId"
    }

    # Export to CSV if CsvFilePath is provided
    if ($CsvFilePath) {
        $Report | Sort-Object DisplayName | Export-Csv -Path $CsvFilePath -NoTypeInformation -Force
        Write-Host "Group memberships exported to $CsvFilePath" -ForegroundColor Cyan
    }

    # Copy memberships to target user if TargetUserId is provided
    if ($TargetUserId) {
        foreach ($Group in $Report) {
            try {
                # Check if the target user is already a member
                $ExistingMember = Get-MgGroupMember -GroupId $Group.Id -All | Where-Object { $_.Id -eq $TargetUser.Id }
                if (-not $ExistingMember) {
                    New-MgGroupMember -GroupId $Group.Id -DirectoryObjectId $TargetUser.Id -ErrorAction Stop
                    Write-Host "Added $TargetUserId to group: $($Group.DisplayName)" -ForegroundColor Green
                }
                else {
                    Write-Host "User $TargetUserId is already a member of group: $($Group.DisplayName)" -ForegroundColor Yellow
                }
            }
            catch {
                Write-Host "Failed to add $TargetUserId to group $($Group.DisplayName): $($_.Exception.Message)" -ForegroundColor Red
            }
        }
    }
}
catch {
    # Handle errors (e.g., invalid UserId, insufficient permissions, or Graph API issues)
    Write-Host "An error occurred: $($_.Exception.Message)" -ForegroundColor Red
}

Étape 4. Exécutez le script PowerShell Copy-GroupMembership

Exécutez la commande ci-dessous pour obtenir l’adhésion au groupe de l’utilisateur.

C:scripts.Copy-GroupMemberships.ps1 -UserId "[email protected]"

Exécutez la commande ci-dessous pour obtenir l'appartenance au groupe de l'utilisateur et afficher le résultat dans un tableau interactif dans une fenêtre séparée.

C:scripts.Copy-GroupMemberships.ps1 -UserId "[email protected]" -OutGridView

Exécutez la commande ci-dessous pour obtenir l'appartenance au groupe de l'utilisateur, afficher la sortie dans un tableau interactif dans une fenêtre séparée et exporter les résultats dans un fichier CSV.

C:scripts.Copy-GroupMemberships.ps1 -UserId "[email protected]" -OutGridView -CsvFilePath "C:tempAmanda_GroupMemberships.csv"

La sortie apparaît toujours dans PowerShell.

Id                                   DisplayName Email                SecurityEnabled MailEnabled GroupType     Source
--                                   ----------- -----                --------------- ----------- ---------     ------
d62bbb93-90d6-4560-94f5-7536cb1d5ac5 All Company [email protected] N/A                    True Microsoft 365 Cloud
c36abb7f-30e6-4cf5-9c12-12a4b8184d96 DG001       [email protected]      N/A                    True Distribution  Cloud
068346f3-3b9a-44b8-81ff-db5167644d74 Group1_WR   N/A                  True                    N/A Security      Cloud
496c0a4a-91a0-4c5c-bbd3-b4bb30211e56 HR          N/A                  True                    N/A Security      Cloud
7def1c3e-ccbe-4458-ac41-8e9452460e9a Sales       [email protected]      N/A                    True Microsoft 365 Cloud

Copiez les membres du groupe de l'utilisateur source ([email protégé]) à l'utilisateur cible ([email protégé]).

C:scripts.Copy-GroupMemberships.ps1 -UserId "[email protected]" -TargetUserId "[email protected]"

La sortie apparaît.

Added [email protected] to group: Group1_WR
Added [email protected] to group: All Company
User [email protected] is already a member of group: Sales
Failed to add [email protected] to group DG001: [Request_BadRequest] : Cannot Update a mail-enabled security groups and or distribution list.
Added [email protected] to group: HR

Vérifiez que les appartenances aux groupes sont copiées avec succès.

C:scripts.Copy-GroupMemberships.ps1 -UserId "[email protected]" -OutGridView -CsvFilePath "C:tempElisa_GroupMemberships.csv"

Voici à quoi ressemble l’appartenance au groupe pour l’utilisateur cible Elisa Malor.

C'est ça!

Conclusion

Vous avez appris à copier l'appartenance à un groupe d'un utilisateur à un autre dans Microsoft Entra ID. Utilisez le script PowerShell pour obtenir l'appartenance au groupe de l'utilisateur (source). Ensuite, copiez-le vers un autre utilisateur (cible). Vérifiez que l'appartenance au groupe est ajoutée avec succès à l'utilisateur cible.

Avez-vous apprécié cet article ? Vous aimerez peut-être également Comment utiliser Get-MgUser dans PowerShell. N'oubliez pas de nous suivre et de partager cet article.

Related Posts