当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 将 Microsoft 365 通讯组成员导出到 CSV

作者:精品下载站 日期:2024-12-14 06:31:52 浏览:13 分类:玩电脑

使用 PowerShell 将 Microsoft 365 通讯组成员导出到 CSV


有很多分发组,我们希望获得所有成员和所有者。我们可以单独浏览 Microsoft 365 管理中心中的组,但这需要大量时间。因此,让我们自动化该任务并导出包含所有成员、所有者和更多信息的报告。在本文中,您将了解如何使用 PowerShell 脚本将 Microsoft 365 通讯组成员批量导出到 CSV 文件。

查找 Microsoft 365 通讯组

若要查找 Microsoft 365 中的所有通讯组,请按照以下步骤操作:

  1. 登录 Microsoft Exchange 管理中心

  2. 单击收件人 > 组

  3. 单击组类型以列出通讯组

[玩转系统] 使用 PowerShell 将 Microsoft 365 通讯组成员导出到 CSV

让我们看看下一步如何使用 PowerShell 导出 Microsoft 365 通讯组成员。

使用 PowerShell 脚本获取 Microsoft 365 通讯组成员

Export-M365DGMembers.ps1 PowerShell 将获取所有 Microsoft 365 通讯组(包括其成员),并将它们导出到 CSV 文件。

对于每个 Microsoft 365 通讯组,它收集以下信息:

  1. 显示名称

  2. 描述

  3. 主SMTP地址

  4. 次要 SMTP 地址

  5. 别名

  6. 组类型

  7. 收件人类型

  8. 从本地同步

  9. 成员

  10. 成员主要SMTP地址

  11. 会员类型

  12. 拥有者

  13. 从地址列表中隐藏

  14. 会员加入限制

  15. 会员离境限制

  16. 要求发件人身份验证已启用

  17. 仅接受来自的消息

  18. 山顿代理

  19. 发送方式

  20. 创建时间

  21. 何时改变

注意:您想要获取 Exchange Server 中所有通讯组成员的列表吗?阅读文章使用 PowerShell 将通讯组成员导出到 CSV。

1.安装Microsoft Graph PowerShell模块

在我们进一步继续并从所有通讯组中获取 Microsoft 365 成员和所有者之前,我们需要安装 Microsoft Graph PowerShell 模块。

以管理员身份启动 Windows PowerShell 并运行以下命令。

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

重要提示:始终安装 Microsoft Graph PowerShellMicrosoft Graph Beta PowerShell 模块。这是因为某些 cmdlet 在最终版本中尚不可用,并且无法运行。在运行 cmdlet 或脚本之前将两个模块更新到最新版本,以防止出现错误和不正确的结果。

2. 准备导出 Microsoft 365 通讯组成员 PowerShell 脚本

(C:)驱动器上创建两个文件夹:

  • 温度

  • 脚本

下载 Export-M365DGMembers.ps1 PowerShell 脚本并将其放置在 C:\scripts 文件夹中。该脚本会将 CSV 文件导出到 C:\temp 文件夹。

确保文件未被阻止,以防止运行脚本时出现错误。请阅读文章运行 PowerShell 脚本时出现未数字签名错误来了解更多信息。

另一种选择是将以下代码复制并粘贴到记事本中。将其命名为 Export-M365DGMembers.ps1 并将其放置在 C:\scripts 文件夹中。

<#
    .SYNOPSIS
    Export-M365DGMembers.ps1

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

    .LINK
    www.a-d.site/export-microsoft-365-distribution-group-members-to-csv-powershell/

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.a-d.site
    LinkedIn:   linkedin.com/in/a-d

    .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
  • 第 22 行:编辑 CSV 文件路径

3. 运行导出 Microsoft 365 通讯组成员 PowerShell 脚本

获取所有 Microsoft 365 通讯组,包括其成员和所有者,并将其导出到 CSV 文件。

运行以下命令来运行脚本 Export-M365DGMembers.ps1。

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

4. 打开 Microsoft 365 通讯组成员报告

Export-M365DGMembers.ps1 PowerShell 脚本将所有 Microsoft 365 通讯组成员导出到 CSV 文件。

在路径 C:\temp 中找到文件 M365DGMembers.csv

[玩转系统] 使用 PowerShell 将 Microsoft 365 通讯组成员导出到 CSV

使用您喜欢的应用程序打开 CSV 文件。在我们的示例中,它是 Microsoft Excel。

[玩转系统] 使用 PowerShell 将 Microsoft 365 通讯组成员导出到 CSV

Microsoft 365 通讯组成员和所有者报告看起来很棒!

了解更多:在 Exchange Hybrid 中创建通讯组 »

结论

您了解了如何使用 PowerShell 将 Microsoft 365 通讯组成员导出到 CSV。管理中心中的导出不会为您提供您想要的所有属性。最好使用 PowerShell 脚本,因为您可以根据需要对其进行自定义。

您喜欢这篇文章吗?您可能还喜欢导出 Entra ID 应用程序注册证书和秘密到期报告。不要忘记关注我们并分享这篇文章。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯