Comment utiliser Get-MgGroup dans PowerShell

La cmdlet Get-MgGroup dans Microsoft Graph PowerShell récupère tous les détails du groupe dans Microsoft Entra ID. Vous pouvez obtenir tous les groupes Microsoft 365 ou des groupes spécifiques de votre organisation. Bien que vous puissiez obtenir tous les groupes dans le centre d'administration Microsoft Entra ou le centre d'administration Microsoft 365, vous pouvez toujours en faire plus et être précis avec PowerShell. Dans cet article, vous apprendrez à utiliser la cmdlet Get-MgGroup dans PowerShell.

Avant de commencer

Il est important que vous installiez et vous connectiez à Microsoft Graph PowerShell avant de continuer. Sinon, la cmdlet Get-MgGroup ne fonctionnera pas.

Installer Microsoft Graph PowerShell

Exécutez PowerShell en tant qu'administrateur et installez le module 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.

Connectez-vous à Microsoft Graph PowerShell

Vous devez vous connecter à Microsoft Graph PowerShell avec les autorisations appropriées. Si vous ne le faites pas, vous ne pourrez pas récupérer les résultats du groupe avec la cmdlet Get-MgGroup.

Connect-MgGraph -Scopes "Group.Read.All"

Souhaitez-vous vous connecter sans interaction de l'utilisateur car vous souhaitez qu'un script s'exécute automatiquement ? Configurez-le avec une authentification basée sur un certificat ou un secret client. Pour en savoir plus, consultez l'article Connectez-vous à Microsoft Graph PowerShell.

Obtenir des informations sur le groupe

Commençons par les bases, c'est-à-dire obtenir les informations du groupe.

Obtenir des informations sur un seul groupe

Pour obtenir les informations du groupe, utilisez le-IDGroupeparamètre et ajoutez l’ID du groupe.

Get-MgGroup -GroupId "14603c19-0afa-4f2f-9c13-64d25eedfca3"

Vous pouvez également utiliser le-Filtreparamètre à rechercher sur DisplayName pour obtenir les informations sur le groupe.

Get-MgGroup -Filter "DisplayName eq 'Group1'"

Ajoutez leListe de formatsapplet de commande pour obtenir une liste de propriétés.

Get-MgGroup -Filter "DisplayName eq 'Group1'" | Format-List

Obtenez toutes les informations sur les groupes

Exécutez l'applet de commande Get-MgGroup, y compris le-Tousparamètre, pour récupérer tous les groupes.

Note:Utilisez toujours le-Tousparamètre pour obtenir tous les résultats. Sinon, seuls 100 éléments apparaîtront.

Get-MgGroup -All

Pour compter tous les groupes, on ajoutera lesMesure-Objetapplet de commande à la commande.

Get-MgGroup -All | Measure-Object | Select-Object -ExpandProperty Count

Une autre façon de compter tous les groupes.

(Get-MgGroup -All).Count

Obtenez des groupes vides

Recherchez tous les groupes auxquels aucun membre n’est affecté.

Get-MgGroup -All | Where-Object { (Get-MgGroupMember -GroupId $_.Id).Count -eq 0 } | Sort-Object DisplayName

Pour obtenir tous les groupes et leurs types de groupe, utilisez le script PowerShell dans l'articleComment rechercher des groupes vides dans Microsoft 365 avec PowerShell.

Obtenez tous les groupes de cloud

Si vous disposez d’un environnement hybride, les groupes sont synchronisés depuis AD sur site vers Microsoft Entra ID. L'AD sur site est votre autorité de domaine et vous devez y créer les groupes. Toutefois, certains groupes de l'organisation peuvent être directement créés dans le cloud.

Filtrons uniquement sur les groupes de cloud et trions-les par nom d'affichage.

En savoir plus:Correctif : Windows PowerShell manquant dans le menu Démarrer

Get-MgGroup -All -Filter "OnPremisesSyncEnabled ne true" -ConsistencyLevel eventual -CountVariable CountVar | Sort-Object DisplayName

Obtenez des groupes synchronisés sur site

Synchronisez uniquement les groupes sur site avec le cloud et triez-les par nom d'affichage.

Get-MgGroup -All -Filter "OnPremisesSyncEnabled eq true" -ConsistencyLevel eventual -CountVariable CountVar | Sort-Object DisplayName

Obtenir les propriétaires des groupes

Pour savoir quel propriétaire est affecté à quel groupe, nous pouvons obtenir une liste de tous les groupes et de leurs propriétaires. Vous devez utiliser les applets de commande Get-MgGroup et Get-MgGroupOwner pour récupérer les membres.

Exportons tous les groupes, y compris leurs propriétaires, vers un fichier CSV. Remplissez le chemin CSV surligne 4.

Connect-MgGraph -Scopes "Group.Read.All", "Directory.Read.All" -NoWelcome

# Define the CSV file path
$csvPath = "C:tempGroupOwners.csv"

# Get all groups
$Groups = Get-MgGroup -All
$TotalGroups = $Groups.Count
$ProgressCounter = 0

$Report = [System.Collections.Generic.List[Object]]::new()

# Loop through each group
foreach ($Group in $Groups) {
    $ProgressCounter++
    $Percentage = [Math]::Round(($ProgressCounter / $TotalGroups) * 100, 2)
    Write-Progress -Activity "Processing Groups - $Percentage%" -Status "Checking owners for $($Group.DisplayName)" -PercentComplete $Percentage

    $Owners = Get-MgGroupOwner -GroupId $Group.Id -All | Select-Object -ExpandProperty AdditionalProperties
    if ($Owners) {
        foreach ($Owner in $Owners) {
            $OwnerType = switch ($Owner.'@odata.type') {
                "#microsoft.graph.user" { "User" }
                "#microsoft.graph.group" { "Group" }
                "#microsoft.graph.servicePrincipal" { "Service Principal" }
                "#microsoft.graph.device" { "Device" }
                "#microsoft.graph.orgContact" { "Contact" }
                default { "Unknown" }
            }
            $ReportLine = [PSCustomObject]@{
                GroupName              = $Group.DisplayName
                OwnerName              = $Owner.displayName
                OwnerEmail             = $Owner.mail
                OwnerUserPrincipalName = $Owner.userPrincipalName
                OwnerType              = $OwnerType
            }
            $Report.Add($ReportLine)
        }
    }
    else {
        $ReportLine = [PSCustomObject]@{
            GroupName              = $Group.DisplayName
            OwnerName              = ""
            OwnerEmail             = ""
            OwnerUserPrincipalName = ""
            OwnerType              = ""
        }
        $Report.Add($ReportLine)
    }
}

# Complete the progress bar
Write-Progress -Activity "Processing Groups" -Status "Completed" -PercentComplete 100 -Completed

# Export the report to CSV
$Report | Sort-Object GroupName | Export-Csv -Path $csvPath -NoTypeInformation -Encoding utf8
Write-Host "Report exported to $csvPath" -ForegroundColor Cyan

Voici à quoi ressemble le rapport du fichier CSV.

En savoir plus surComment utiliser Get-MgGroupOwner dans PowerShell.

Obtenez des membres de groupes

Pour savoir quel membre est affecté à quel groupe, nous pouvons obtenir une liste de tous les groupes et de leurs membres. Vous devez utiliser les applets de commande Get-MgGroup et Get-MgGroupMember pour récupérer les membres.

Exportons tous les groupes, y compris leurs membres, vers un fichier CSV. Remplissez le chemin CSV surligne 4.

Connect-MgGraph -Scopes "Group.Read.All", "Directory.Read.All" -NoWelcome

# Define the CSV file path
$csvPath = "C:tempGroupMembers.csv"

# Get all groups
$Groups = Get-MgGroup -All
$TotalGroups = $Groups.Count
$ProgressCounter = 0

$Report = [System.Collections.Generic.List[Object]]::new()

# Loop through each group
foreach ($Group in $Groups) {
    $ProgressCounter++
    $Percentage = [Math]::Round(($ProgressCounter / $TotalGroups) * 100, 2)
    Write-Progress -Activity "Processing Groups - $Percentage%" -Status "Checking members for $($Group.DisplayName)" -PercentComplete $Percentage

    $Members = Get-MgGroupMember -GroupId $Group.Id -All | Select-Object -ExpandProperty AdditionalProperties
    if ($Members) {
        foreach ($Member in $Members) {
            $memberType = switch ($Member.'@odata.type') {
                "#microsoft.graph.user" { "User" }
                "#microsoft.graph.group" { "Group" }
                "#microsoft.graph.servicePrincipal" { "Service Principal" }
                "#microsoft.graph.device" { "Device" }
                "#microsoft.graph.orgContact" { "Contact" }
                default { "Unknown" }
            }
            $ReportLine = [PSCustomObject]@{
                GroupName               = $Group.DisplayName
                MemberName              = $Member.displayName
                MemberEmail             = $Member.mail
                MemberUserPrincipalName = $Member.userPrincipalName
                MemberType              = $memberType
            }
            $Report.Add($ReportLine)
        }
    }
    else {
        $ReportLine = [PSCustomObject]@{
            GroupName               = $Group.DisplayName
            MemberName              = ""
            MemberEmail             = ""
            MemberUserPrincipalName = ""
            MemberType              = ""
        }
        $Report.Add($ReportLine)
    }
}

# Complete the progress bar
Write-Progress -Activity "Processing Groups" -Status "Completed" -PercentComplete 100 -Completed

# Export the report to CSV
$Report | Sort-Object GroupName | Export-Csv -Path $csvPath -NoTypeInformation -Encoding utf8
Write-Host "Report exported to $csvPath" -ForegroundColor Cyan

Voici à quoi ressemble le rapport du fichier CSV.

En savoir plus surComment utiliser Get-MgGroupMember dans PowerShell.

Obtenez des groupes commençant par un nom d'affichage

On peut ajouter lecommenceAvecopérateur et récupérez tous les résultats qui commencent par un nom d’affichage.

Get-MgGroup -All -Filter "startsWith(DisplayName,'Sales')"

Vous pouvez également ajouter une lettre au lieu d'un mot.

Get-MgGroup -All -Filter "startsWith(DisplayName,'S')"

Obtenez des groupes qui se terminent par une adresse e-mail

Ajoutez lese termine paropérateur pour récupérer tous les groupes qui se terminent par une adresse e-mail spécifique et les trier par nom d'affichage.

Get-MgGroup -All -Filter "endsWith(mail,'exoip.com')" -Sort "displayName" -ConsistencyLevel eventual -CountVariable CountVar

Recherchez les deux domaines qui se terminent par une adresse e-mail spécifique.

Get-MgGroup -All -Filter "endsWith(mail,'exoip.com') or endsWith(mail,'tajran.com')" -Sort "displayName" -ConsistencyLevel eventual -CountVariable CountVar

Obtenez les groupes créés à la date

Obtenez la date de création d'un seul groupe.

Get-MgGroup -GroupId "14603c19-0afa-4f2f-9c13-64d25eedfca3" | Select-Object DisplayName, CreatedDateTime

Obtenez la date de création de tous les groupes.

Get-MgGroup -All | Select-Object DisplayName, CreatedDateTime | Sort-Object CreatedDateTime

Récupérons tous les groupes créés en 2024.

Get-MgGroup -All -Filter ("CreatedDateTime ge " + (Get-Date "2024-01-01T00:00:00Z").ToString("yyyy-MM-ddTHH:mm:ssZ") + " and CreatedDateTime le " + (Get-Date "2024-12-31T23:59:59Z").ToString("yyyy-MM-ddTHH:mm:ssZ")) -ConsistencyLevel eventual -CountVariable Count

Exemples de scripts PowerShell Get-MgGroup

Un excellent moyen de comprendre comment ajouter l'applet de commande Get-MgGroup dans les scripts PowerShell consiste à parcourir les exemples de script PowerShell :

  • Vérifiez que la licence utilisateur Microsoft 365 est attribuée directement ou héritée du groupe
  • Supprimer les licences attribuées directement pour les utilisateurs disposant de licences de groupe
  • Exporter les membres du groupe Microsoft 365 au format CSV avec PowerShell

Conclusion

Vous avez appris à utiliser Get-MgGroup dans PowerShell. La cmdlet Get-MgGroup est une excellente applet de commande pour récupérer les groupes de Microsoft Entra ID et Microsoft 365. Utilisez des paramètres spécifiques ou combinez-les pour filtrer les résultats de la recherche en fonction de la façon dont vous souhaitez que les résultats apparaissent.

Avez-vous apprécié cet article ? Vous aimerez peut-être également Créer des utilisateurs Microsoft Entra ID à partir d’un CSV avec PowerShell. N'oubliez pas de nous suivre et de partager cet article.

Related Posts