Microsoft 365 grup üyelerini PowerShell ile CSV'ye aktarma


Kuruluşta birçok grup var ve her gruba hangi üyelerin eklendiğini bilmek isteriz. Grupları manuel olarak inceleyebilir ve bunları yazabiliriz, ancak bu çok zaman alır. Diğer bir yöntem ise süreci hızlandırmak için PowerShell kullanmaktır. Bu makalede Microsoft 365 grup üyelerini PowerShell ile CSV'ye nasıl aktaracağınızı öğreneceksiniz.

Microsoft 365 grup türleri

Microsoft 365'te 4 farklı grup türü bulunmaktadır ve biz bu grupların üyeleri dahil tümünü dışarı aktarmak istiyoruz.

1. Microsoft 365

Ekiplere bir grup e-postası ve konuşmalar, dosyalar ve takvimler için paylaşılan bir çalışma alanı vererek işbirliği yapmalarına olanak tanır. Outlook'ta bunlara Gruplar denir.

2. Dağıtım Listesi

Bir grup insan için bir e-posta adresi oluşturur.

3. Dinamik dağıtım listesi

Listenin tüm üyelerine e-posta gönderir. Grubun üyelik listesi, belirlediğiniz filtrelere ve koşullara göre 24 saatte bir güncellenir.

4. Posta özellikli güvenlik

Grubun tüm üyelerine mesaj gönderir ve OneDrive, SharePoint gibi kaynaklara ve yönetici rollerine erişim sağlar

Microsoft 365 gruplarını bulun

Microsoft 365'teki tüm grupları bulmak için şu adımları izleyin:

  1. Microsoft Exchange yönetim merkezinde oturum açın

  2. Alıcılar > Gruplar'ı tıklayın

  3. Grupları listelemek için grup türünü tıklayın

PowerShell ile Microsoft 365 grup üyelerinin nasıl dışarı aktarılacağına ilişkin bir sonraki adıma bakalım.

PowerShell betiğiyle Microsoft 365 grup üyelerini edinin

Export-M365GroupMembers.ps1 PowerShell, üyeleri de dahil olmak üzere tüm Microsoft 365 grup türlerini alacak ve bunları bir CSV dosyasına aktaracaktır.

Her Microsoft 365 grubu için aşağıdaki bilgileri toplar:

  1. Grup kimliği

  2. GrupGörünenAdı

  3. Grup Türü

  4. KullanıcıGörünenAdı

  5. KullanıcıPrincipalName

  6. KullanıcıAlias

  7. Kullanıcı tipi

  8. Kullanıcı Hesabı Etkinleştirildi

Not: Komut dosyası tüm Microsoft 365 grup türlerini dışa aktaracaktır. Belirli bir grupta grup üyesi yoksa Yok (geçerli değil) olarak gösterilir.

1. Microsoft Graph PowerShell modülünü yükleyin

Daha fazla ilerlemeden ve tüm gruplardan Microsoft 365 grup üyelerini alabilmemiz için Microsoft Graph PowerShell modülünü yüklememiz gerekiyor.

Windows PowerShell'i yönetici olarak başlatın ve aşağıdaki komutları çalıştırın.

Install-Module Microsoft.Graph -Force
Install-Module Microsoft.Graph.Beta -AllowClobber -Force

Önemli: Her zaman Microsoft Graph PowerShell ve Microsoft Graph Beta PowerShell modüllerini yükleyin. Bunun nedeni, bazı cmdlet'lerin henüz son sürümde mevcut olmaması ve çalışmayacak olmasıdır. Hataları ve yanlış sonuçları önlemek için bir cmdlet'i veya betiği çalıştırmadan önce her iki modülü de en son sürüme güncelleyin.

2. Microsoft 365 grup üyelerini Dışa Aktarma PowerShell betiğini hazırlayın

(C:) sürücüsünde iki klasör oluşturun:

  • Sıcaklık

  • Kodlar

Export-M365GroupMembers.ps1 PowerShell betiğini indirin ve C:\scripts klasörüne yerleştirin. Komut dosyası, CSV dosyasını C:\temp klasörüne aktaracaktır.

Komut dosyasını çalıştırırken hataları önlemek için dosyanın engellemesinin kaldırıldığından emin olun. PowerShell betiğini çalıştırırken dijital olarak imzalanmamış hata makalesinde daha fazlasını okuyun.

Diğer bir seçenek de aşağıdaki kodu kopyalayıp Not Defteri'ne yapıştırmaktır. Ona Export-M365GroupMembers.ps1 adını verin ve C:\scripts klasörüne yerleştirin.

<#
    .SYNOPSIS
    Export-M365GroupMembers.ps1

    .DESCRIPTION
    Export Microsoft 365 Group Members to CSV file with PowerShell.

    .LINK
    www.alitajran.com/export-microsoft-365-group-members-to-csv-powershell/

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

    .CHANGELOG
    V1.00, 03/18/2024 - Initial version
#>

# CSV file path to export
$CsvPath = "C:\temp\M365GroupMembers.csv"

# Connect to Microsoft Graph with specified scopes
Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All"

# Retrieve all groups
$groups = Get-MgGroup -All

# Get properties
$Properties = @(
    'Id', 'DisplayName', 'UserPrincipalName', 'UserType', 'AccountEnabled'
)

# Initialize an array to store user information
$allUsers = @()

# Set up the progress bar parameters
$totalGroups = $groups.Count
$currentGroup = 0

# Iterate through each group and retrieve group members
foreach ($group in $groups) {
    # Retrieve group members using the valid Group ID
    $members = Get-MgGroupMember -GroupId $group.id -All

    # Determine the group type
    $groupType = if ($group.groupTypes -eq "Unified" -and $group.securityEnabled) { "Microsoft 365 (security-enabled)" }
    elseif ($group.groupTypes -eq "Unified" -and !$group.securityEnabled) { "Microsoft 365" }
    elseif (!($group.groupTypes -eq "Unified") -and $group.securityEnabled -and $group.mailEnabled) { "Mail-enabled security" }
    elseif (!($group.groupTypes -eq "Unified") -and $group.securityEnabled) { "Security" }
    elseif (!($group.groupTypes -eq "Unified") -and $group.mailEnabled) { "Distribution" }
    else { "N/A" }

    # If there are no members, create an object with empty values
    if ($members.Count -eq 0) {
        $Objects = [PSCustomObject][ordered]@{
            GroupId            = $group.Id
            GroupDisplayName   = $group.DisplayName
            GroupType          = $groupType
            UserDisplayName    = "N/A"
            UserPrincipalName  = "N/A"
            UserAlias          = "N/A"
            UserType           = "N/A"
            UserAccountEnabled = "N/A"
        }
        $allUsers += $Objects
    }
    else {
        # Iterate through each group member and retrieve user details
        foreach ($member in $members) {
            $user = Get-MgUser -UserId $member.Id -Property $Properties -ErrorAction SilentlyContinue | Select-Object $Properties

            # Check if $user is not null before accessing properties
            if ($user.Count -ne 0) {
                # Extract the alias from the UserPrincipalName
                $alias = $user.UserPrincipalName.Split("@")[0]

                # Create an ordered custom object with properties in a specific order
                $Objects = [PSCustomObject][ordered]@{
                    GroupId            = $group.Id
                    GroupDisplayName   = $group.DisplayName
                    GroupType          = $groupType
                    UserDisplayName    = $user.DisplayName
                    UserPrincipalName  = $user.UserPrincipalName
                    UserAlias          = $alias
                    UserType           = $user.UserType
                    UserAccountEnabled = $user.AccountEnabled
                }

                # Add the ordered custom object to the array
                $allUsers += $Objects
            }
        }
    }

    # Update the progress bar
    $currentGroup++
    $status = "{0:N0}" -f ($currentGroup / $totalGroups * 100)

    $progressParams = @{
        Activity        = "Retrieving Group Members"
        Status          = "Processing group: $($group.DisplayName) - $currentGroup of $totalGroups : $status% completed"
        PercentComplete = ($currentGroup / $totalGroups) * 100
    }

    Write-Progress @progressParams
}

# Complete the progress bar
Write-Progress -Activity "Retrieving Group Members" -Completed

# Export all user information to a CSV file
$allUsers | Sort-Object GroupDisplayName | Export-Csv $CsvPath -NoTypeInformation -Encoding utf8
  • 21. Satır: CSV dosya yolunu düzenleyin

3. Microsoft 365 grup üyeleri PowerShell betiğini Dışa Aktarmayı çalıştırın

Üyeleri de dahil olmak üzere tüm Microsoft 365 gruplarını alın ve bunları bir CSV dosyasına aktarın.

Export-M365GroupMembers.ps1 betiğini çalıştırmak için aşağıdaki komutu çalıştırın.

c:\scripts\.\Export-M365GroupMembers.ps1

4. Microsoft 365 grup üyeleri raporunu açın

Export-M365GroupMembers.ps1 PowerShell betiği, tüm Microsoft 365 grup üyelerini bir CSV dosyasına aktarır.

C:\temp yolunda M365GroupMembers.csv dosyasını bulun.

CSV dosyasını favori uygulamanızla açın. Örneğimizde Microsoft Excel var.

Microsoft 365 grup üyeleri raporu harika görünüyor.

Devamını oku: Microsoft 365 devre dışı bırakılmış kullanıcılar raporunu dışarı aktarma »

Çözüm

Microsoft 365 grup üyelerini PowerShell ile CSV'ye nasıl aktaracağınızı öğrendiniz. Grupları yönetici merkezinden dışa aktarabilseniz de grup üyelerini almaz. Özel bir Microsoft 365 grup raporu oluşturmak için PowerShell'i kullanmanız gerekir.

Bu makaleyi beğendiniz mi? Ayrıca paylaşılan posta kutularından oturum açmayı engelle seçeneğini de beğenebilirsiniz. Bizi takip etmeyi ve bu yazımızı paylaşmayı unutmayın.

İlgili makaleler