Microsoft 365 dağıtım grubu üyelerini PowerShell ile CSV'ye aktarma


Pek çok dağıtım grubu var ve tüm üyeleri ve sahipleri bir araya getirmeyi seviyoruz. Microsoft 365 yönetim merkezindeki grupları tek tek inceleyebiliriz ancak bu çok zaman alır. Öyleyse görevi otomatikleştirelim ve tüm üyelerin, sahiplerin ve daha fazla bilginin yer aldığı bir raporu dışa aktaralım. Bu makalede, Microsoft 365 dağıtım grubu üyelerini PowerShell betiğiyle CSV dosyasına toplu olarak nasıl aktaracağınızı öğreneceksiniz.

Microsoft 365 dağıtım gruplarını bulun

Microsoft 365'teki tüm dağıtım gruplarını 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. Dağıtım gruplarını listelemek için grup türüne tıklayın

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

PowerShell betiğiyle Microsoft 365 dağıtım grubu üyelerini edinin

Export-M365DGMembers.ps1 PowerShell, üyeleri de dahil olmak üzere tüm Microsoft 365 dağıtım gruplarını alacak ve bunları bir CSV dosyasına aktaracaktır.

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

  1. Ekran adı

  2. Tanım

  3. BirincilSmtpAdresi

  4. İkincilSmtpAdresi

  5. Takma ad

  6. Grup Türü

  7. Alıcı Türü

  8. SyncedFromOnPremises

  9. Üye

  10. ÜyeBirincilSmtpAdresi

  11. Üye Türü

  12. Sahipler

  13. Adres Listelerinden Gizli

  14. ÜyeKatılımKısıtlaması

  15. ÜyeDepartKısıtlama

  16. RequireSenderAuthenticationEnabled

  17. YalnızcaGönderen Mesajları Kabul Et

  18. Sendon Adına

  19. Farklı Gönder

  20. Ne ZamanOluşturuldu

  21. Ne ZamanDeğiştirildi

Not: Exchange Server'daki tüm dağıtım grubu üyelerinin bir listesini almak ister misiniz? PowerShell ile dağıtım grubu üyelerini CSV'ye aktarma makalesini okuyun.

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

Daha fazla ilerlemeden ve tüm dağıtım gruplarından Microsoft 365 üyelerini ve sahiplerini 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 dağıtım grubu üyelerinin PowerShell betiğini Dışa Aktarmaya Hazırlayın

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

  • Sıcaklık

  • Kodlar

Export-M365DGMembers.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. Buna Export-M365DGMembers.ps1 adını verin ve C:\scripts klasörüne yerleştirin.

<#
    .SYNOPSIS
    Export-M365DGMembers.ps1

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

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

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

    .CHANGELOG
    V1.00, 03/21/2024 - Initial version
    V1.10, 04/20/2024 - Added MemberType property and report members on seperate row
#>

# CSV file export path
$Csvfile = "C:\temp\M365DGMembers.csv"

# Connect to Exchange Online PowerShell
Connect-ExchangeOnline

# Get all distribution groups
$Groups = Get-DistributionGroup -ResultSize Unlimited

# Create an empty array to store the custom objects
$customObjects = @()

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

# Loop through distribution groups and store custom objects in the array
foreach ($Group in $Groups) {
    $GroupDN = $Group.DistinguishedName
    $DisplayName = $Group.DisplayName
    $Description = $Group.Description
    $PrimarySmtpAddress = $Group.PrimarySmtpAddress
    $SecondarySmtpAddress = $Group.EmailAddresses | Where-Object { $_ -clike "smtp*" } | ForEach-Object { $_ -replace "smtp:", "" }
    $GroupType = $Group.GroupType
    $RecipientType = $Group.RecipientType
    $IsDirSynced = $Group.IsDirSynced
    $Members = Get-DistributionGroupMember $GroupDN -ResultSize Unlimited
    $Owner = $Group.ManagedBy | ForEach-Object { (Get-Recipient $_ -ErrorAction SilentlyContinue).DisplayName }
    $Alias = $Group.Alias
    $HiddenFromAddressLists = $Group.HiddenFromAddressListsEnabled
    $MemberJoinRestriction = $Group.MemberJoinRestriction
    $MemberDepartRestriction = $Group.MemberDepartRestriction
    $RequireSenderAuthenticationEnabled = $Group.RequireSenderAuthenticationEnabled
    $AcceptMessagesOnlyFromIDs = $Group.AcceptMessagesOnlyFrom
    $AcceptMessagesDisplayNames = $AcceptMessagesOnlyFromIDs | ForEach-Object { (Get-Recipient $_).PrimarySmtpAddress }
    $GrantSendOnBehalfToIDs = $Group.GrantSendOnBehalfTo
    $GrantSendOnBehalfToDisplayNames = $GrantSendOnBehalfToIDs | ForEach-Object { (Get-User $_ -ErrorAction SilentlyContinue).DisplayName }
    $WhenCreated = $Group.WhenCreated
    $WhenChanged = $Group.WhenChanged

    # Get SendAs permissions
    $SendAsPermissions = Get-RecipientPermission -Identity $PrimarySmtpAddress
    $SendAsTrustees = $SendAsPermissions.Trustee

    foreach ($Member in $Members) {
        # Create a custom object for each member and add it to the array
        $customObject = [PSCustomObject]@{
            DisplayName                        = $DisplayName
            Description                        = $Description
            PrimarySmtpAddress                 = $PrimarySmtpAddress
            SecondarySmtpAddress               = ($SecondarySmtpAddress -join ',')
            Alias                              = $Alias
            GroupType                          = $GroupType
            RecipientType                      = $RecipientType
            SyncedFromOnPremises               = $IsDirSynced
            Member                             = $Member.DisplayName
            MemberPrimarySmtpAddress           = $Member.PrimarySmtpAddress
            MemberType                         = $Member.RecipientType
            Owners                             = ($Owner -join ',')
            HiddenFromAddressLists             = $HiddenFromAddressLists
            MemberJoinRestriction              = $MemberJoinRestriction
            MemberDepartRestriction            = $MemberDepartRestriction
            RequireSenderAuthenticationEnabled = $RequireSenderAuthenticationEnabled
            AcceptMessagesOnlyFrom             = ($AcceptMessagesDisplayNames -join ',')
            SendOnBehalf                       = ($GrantSendOnBehalfToDisplayNames -join ',')
            SendAs                             = ($SendAsTrustees -join ',')
            WhenCreated                        = $WhenCreated
            WhenChanged                        = $WhenChanged
        }

        $customObjects += $customObject
    }

    # 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

# Output the custom objects array, sort them, and display in a grid view
$customObjects | Sort-Object DisplayName | Out-GridView -Title "M365 Distribution Group Members"

# Export report to CSV file
$customObjects | Sort-Object DisplayName | Export-Csv -Path $Csvfile -NoTypeInformation -Encoding utf8
  • Satır 22: CSV dosya yolunu düzenleyin

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

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

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

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

4. Microsoft 365 dağıtım grubu üyeleri raporunu açın

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

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

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

Microsoft 365 dağıtım grubu üyeleri ve sahipleri raporu harika görünüyor!

Devamını oku: Exchange Hybrid'de dağıtım grubu oluşturma »

Çözüm

Microsoft 365 dağıtım grubu üyelerini PowerShell ile CSV'ye nasıl aktaracağınızı öğrendiniz. Yönetim merkezindeki dışa aktarma işlemi size istediğiniz tüm özellikleri vermez. İhtiyaçlarınıza göre özelleştirebileceğiniz için PowerShell betiğini kullanmak en iyisidir.

Bu makaleyi beğendiniz mi? Ayrıca Dışa Aktarma Entra ID uygulama kayıtları Sertifikaları ve Sırları sona erme raporunu da beğenebilirsiniz. Bizi takip etmeyi ve bu yazımızı paylaşmayı unutmayın.

İlgili makaleler