Jak korzystać z Get-MgGroup w PowerShell

Polecenie cmdlet Get-MgGroup w programie Microsoft Graph PowerShell pobiera wszystkie szczegóły grupy w identyfikatorze Microsoft Entra ID. Możesz uzyskać wszystkie grupy Microsoft 365 lub określone grupy ze swojej organizacji. Chociaż wszystkie grupy możesz uzyskać w centrum administracyjnym Microsoft Entra lub centrum administracyjnym Microsoft 365, zawsze możesz zrobić więcej i zachować precyzję dzięki PowerShell. W tym artykule dowiesz się, jak używać polecenia cmdlet Get-MgGroup w PowerShell.

Zanim zaczniesz

Przed kontynuowaniem ważne jest zainstalowanie programu Microsoft Graph PowerShell i nawiązanie połączenia z nim. W przeciwnym razie polecenie cmdlet Get-MgGroup nie będzie działać.

Zainstaluj Microsoft Graph PowerShell

Uruchom PowerShell jako administrator i zainstaluj moduł Microsoft Graph PowerShell.

Install-Module Microsoft.Graph -Force

Ważny:Zawsze aktualizuj moduł Microsoft Graph PowerShell do najnowszej wersji przed uruchomieniem polecenia cmdlet lub skryptu, aby zapobiec błędom i nieprawidłowym wynikom.

Połącz się z Microsoft Graph PowerShell

Musisz połączyć się z Microsoft Graph PowerShell z odpowiednimi uprawnieniami. W przeciwnym razie nie będzie można pobrać wyników grupy za pomocą polecenia cmdlet Get-MgGroup.

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

Czy chcesz się połączyć bez interakcji użytkownika, ponieważ chcesz, aby skrypt działał automatycznie? Skonfiguruj za pomocą uwierzytelniania opartego na certyfikatach lub klucza tajnego klienta. Przeczytaj więcej w artykule Połącz się z Microsoft Graph PowerShell.

Uzyskaj informacje o grupie

Zacznijmy najpierw od podstaw, a to będzie zdobycie informacji o grupie.

Uzyskaj informacje o pojedynczej grupie

Aby uzyskać informacje o grupie, użyj metody-Identyfikator grupyparametr i dołącz identyfikator grupy.

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

Możesz także skorzystać z-Filtrparametr do wyszukiwania w DisplayName w celu uzyskania informacji o grupie.

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

DodajLista formatówcmdlet, aby uzyskać listę właściwości.

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

Uzyskaj informacje o wszystkich grupach

Uruchom polecenie cmdlet Get-MgGroup, w tym plik-Wszystkoparametr, aby pobrać wszystkie grupy.

Notatka:Zawsze używaj-Wszystkoparametr, aby uzyskać wszystkie wyniki. W przeciwnym razie pojawi się tylko 100 pozycji.

Get-MgGroup -All

Aby policzyć wszystkie grupy, dodamyZmierz-obiektcmdlet do polecenia.

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

Inny sposób policzenia wszystkich grup.

(Get-MgGroup -All).Count

Zdobądź puste grupy

Znajdź wszystkie grupy, do których nie przypisano żadnych członków.

Przeczytaj także:Typowe polecenia programu PowerShell | Każdy administrator musi wiedzieć

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

Aby uzyskać wszystkie grupy i ich typy, użyj skryptu PowerShell opisanego w artykuleJak znaleźć puste grupy na platformie Microsoft 365 za pomocą programu PowerShell.

Pobierz wszystkie grupy chmur

Jeśli masz środowisko hybrydowe, grupy są synchronizowane z lokalnej usługi AD do Microsoft Entra ID. Lokalna usługa AD jest organem domeny i należy tam utworzyć grupy. Jednakże w organizacji mogą istnieć grupy utworzone bezpośrednio w chmurze.

Przefiltrujmy tylko grupy chmur i posortujmy je według wyświetlanej nazwy.

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

Uzyskaj zsynchronizowane grupy lokalne

Zsynchronizuj tylko grupy lokalne z chmurą i posortuj je według nazwy wyświetlanej.

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

Uzyskaj właścicieli grup

Aby dowiedzieć się, który właściciel jest przypisany do której grupy, możemy uzyskać listę wszystkich grup i ich właścicieli. Aby pobrać elementy członkowskie, należy użyć poleceń cmdlet Get-MgGroup i Get-MgGroupOwner.

Wyeksportujmy wszystkie grupy wraz z ich właścicielami do pliku CSV. Wypełnij ścieżkę CSV nalinia 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

Tak wygląda raport w pliku CSV.

Przeczytaj więcej oJak używać Get-MgGroupOwner w PowerShell.

Zdobądź członków grup

Aby dowiedzieć się, który członek jest przypisany do której grupy, możemy uzyskać listę wszystkich grup i ich członków. Aby pobrać elementy członkowskie, należy użyć poleceń cmdlet Get-MgGroup i Get-MgGroupMember.

Wyeksportujmy wszystkie grupy wraz z ich członkami do pliku CSV. Wypełnij ścieżkę CSV nalinia 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

Tak wygląda raport w pliku CSV.

Przeczytaj więcej oJak używać Get-MgGroupMember w PowerShell.

Pobierz grupy rozpoczynające się od nazwy wyświetlanej

Możemy dodaćzaczyna się odoperator i pobierz wszystkie wyniki zaczynające się od nazwy wyświetlanej.

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

Zamiast słowa możesz także dodać literę.

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

Uzyskaj grupy kończące się adresem e-mail

Dodajkończy sięoperator, aby pobrać wszystkie grupy zakończone określonym adresem e-mail i posortować je według wyświetlanej nazwy.

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

Wyszukaj obie domeny zakończone określonym adresem e-mail.

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

Pobierz grupy utworzone na bieżąco

Uzyskaj datę utworzenia pojedynczej grupy.

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

Uzyskaj datę utworzenia wszystkich grup.

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

Weźmy wszystkie grupy utworzone w roku 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

Przykłady skryptów Get-MgGroup PowerShell

Doskonałym sposobem na zrozumienie sposobu dodawania polecenia cmdlet Get-MgGroup w skryptach PowerShell jest przejrzenie przykładów skryptów PowerShell:

  • Sprawdź, czy licencja użytkownika Microsoft 365 jest przypisana bezpośrednio lub dziedziczona z grupy
  • Usuń licencje przypisane bezpośrednio użytkownikom z licencjami grupowymi
  • Eksportuj członków grupy Microsoft 365 do pliku CSV za pomocą programu PowerShell

Wniosek

Nauczyłeś się używać Get-MgGroup w PowerShell. Polecenie cmdlet Get-MgGroup to doskonałe polecenie cmdlet umożliwiające pobieranie grup z Microsoft Entra ID i Microsoft 365. Użyj określonych parametrów lub połącz je, aby filtrować wyniki wyszukiwania zgodnie z oczekiwanym wyglądem.

Czy podobał Ci się ten artykuł? Możesz także polubić opcję Utwórz użytkowników Microsoft Entra ID z pliku CSV za pomocą programu PowerShell. Nie zapomnij nas obserwować i udostępnić ten artykuł.

Related Posts