Búsqueda de sitios web

Exporte miembros del grupo de distribución de Microsoft 365 a CSV con PowerShell


Hay muchos grupos de distribución y nos gusta reunir a todos los miembros y propietarios. Podemos revisar los grupos en el centro de administración de Microsoft 365 individualmente, pero eso lleva mucho tiempo. Entonces, automaticemos la tarea y exportemos un informe con todos los miembros, propietarios y más información. En este artículo, aprenderá cómo exportar de forma masiva los miembros del grupo de distribución de Microsoft 365 a un archivo CSV con un script de PowerShell.

Buscar grupos de distribución de Microsoft 365

Para encontrar todos los grupos de distribución en Microsoft 365, siga estos pasos:

  1. Inicie sesión en el centro de administración de Microsoft Exchange

  2. Haga clic en Destinatarios > Grupos

  3. Haga clic en el tipo de grupo para enumerar los grupos de distribución.

Veamos el siguiente paso sobre cómo exportar miembros del grupo de distribución de Microsoft 365 con PowerShell.

Obtenga miembros del grupo de distribución de Microsoft 365 con script de PowerShell

Export-M365DGMembers.ps1 PowerShell obtendrá todos los grupos de distribución de Microsoft 365, incluidos sus miembros, y los exportará a un archivo CSV.

Para cada grupo de distribución de Microsoft 365, recopila la siguiente información:

  1. Nombre para mostrar

  2. Descripción

  3. Dirección Smtp Primaria

  4. Dirección Smtp Secundaria

  5. Alias

  6. Tipo de grupo

  7. Tipo de destinatario

  8. SincronizadoDesdeOnPremises

  9. Miembro

  10. MiembroPrimarioSmtpDirección

  11. Tipo de miembro

  12. Propietarios

  13. Oculto de listas de direcciones

  14. MiembroJoinRestriction

  15. MiembroSalidaRestricción

  16. RequireSenderAuthenticationEnabled

  17. AceptarMensajesSóloDesde

  18. Enviar en nombre

  19. Enviar como

  20. Cuando se creó

  21. Cuando se cambia

Nota: ¿Desea obtener una lista de todos los miembros del grupo de distribución en Exchange Server? Lea el artículo Exportar miembros del grupo de distribución a CSV con PowerShell.

1. Instale el módulo Microsoft Graph PowerShell

Antes de que podamos continuar y obtener los miembros y propietarios de Microsoft 365 de todos los grupos de distribución, debemos instalar el módulo Microsoft Graph PowerShell.

Inicie Windows PowerShell como administrador y ejecute los siguientes comandos.

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

Importante: Instale siempre los módulos Microsoft Graph PowerShell y Microsoft Graph Beta PowerShell. Esto se debe a que algunos cmdlets aún no están disponibles en la versión final y no funcionarán. Actualice ambos módulos a la última versión antes de ejecutar un cmdlet o script para evitar errores y resultados incorrectos.

2. Prepare el script de PowerShell para exportar los miembros del grupo de distribución de Microsoft 365.

Cree dos carpetas en la unidad (C:):

  • Temperatura

  • Guiones

Descargue el script de PowerShell Export-M365DGMembers.ps1 y colóquelo en la carpeta C:\scripts. El script exportará el archivo CSV a la carpeta C:\temp.

Asegúrese de que el archivo esté desbloqueado para evitar errores al ejecutar el script. Lea más en el artículo Error sin firma digital al ejecutar el script de PowerShell.

Otra opción es copiar y pegar el código siguiente en el Bloc de notas. Asígnale el nombre Export-M365DGMembers.ps1 y colócalo en la carpeta C:\scripts.

<#
    .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
  • Línea 22: Editar la ruta del archivo CSV

3. Ejecute el script de PowerShell Exportar miembros del grupo de distribución de Microsoft 365.

Obtenga todos los grupos de distribución de Microsoft 365, incluidos sus miembros y propietarios, y expórtelos a un archivo CSV.

Ejecute el siguiente comando para ejecutar el script Export-M365DGMembers.ps1.

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

4. Abra el informe de miembros del grupo de distribución de Microsoft 365.

El script de PowerShell Export-M365DGMembers.ps1 exporta todos los miembros del grupo de distribución de Microsoft 365 a un archivo CSV.

Busque el archivo M365DGMembers.csv en la ruta C:\temp.

Abra el archivo CSV con su aplicación favorita. En nuestro ejemplo, es Microsoft Excel.

¡El informe de propietarios y miembros del grupo de distribución de Microsoft 365 se ve genial!

Leer más: Crear grupo de distribución en Exchange Hybrid »

Conclusión

Aprendió a exportar miembros del grupo de distribución de Microsoft 365 a CSV con PowerShell. La exportación en el centro de administración no le brinda todas las propiedades que desea. Es mejor utilizar el script de PowerShell porque puede personalizarlo según sus necesidades.

Disfrutaste este artículo? También te puede interesar Exportar el informe de vencimiento de secretos y certificados de registros de la aplicación Entra ID. No olvides seguirnos y compartir este artículo.

Artículos relacionados