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

[玩转系统] 使用 PowerShell 导出通讯组和成员

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

使用 PowerShell 导出通讯组和成员


您可以从 Microsoft 365 管理中心导出通讯组信息,但它不会显示所有详细信息。使用 PowerShell,可以更快地将通讯组的详细数据导出到 CSV 文件。在本文中,您将了解如何使用 PowerShell 导出通讯组和成员。

连接到 Exchange Online

为了能够运行 PowerShell 命令,您必须连接到 Exchange Online PowerShell。以管理员身份打开 Windows PowerShell,运行以下 cmdlet,然后使用您的管理员凭据登录。

Connect-ExchangeOnline

查看通讯组列表和成员

我们将展示如何在 PowerShell 输出中显示有关通讯组的信息。请记住,您可以在 PowerShell 控制台上显示的所有信息也可以导出到 CSV 文件。

显示通讯组列表

让我们获取所有现有(安全)通讯组的列表及其信息。要查看现有通讯组或启用邮件的安全组,请使用 Get-DistributionGroup cmdlet。

Get-DistributionGroup -ResultSize Unlimited

PowerShell 输出示例:

Name            DisplayName         GroupType PrimarySmtpAddress               
----            -----------         --------- ------------------               
Sales Employees Sales Employees     Universal [email protected]     
Sales UK        Sales UK            Universal [email protected]
Sales USA       Sales USA mail list Universal [email protected]

显示通讯组成员

您可以显示所有现有通讯组的成员。

请参阅下面的 PowerShell 命令语法。

Get-DistributionGroupMember -ResultSize Unlimited "Distribution Group"

运行以下 PowerShell 命令示例。

Get-DistributionGroupMember -ResultSize Unlimited "[email protected]"

PowerShell 输出显示成员的身份。

Name                                 RecipientType
----                                 -------------
41377e9c-dc47-46c0-b4a5-1d5bbdcb5cc5 UserMailbox  

显示通讯组成员详细信息

要获取有关特定通讯组成员的扩展信息,我们需要使用 PowerShell cmdlet Get-DistributionGroupMember。我们将对结果进行排序并显示有关成员 DisplayNameAliasDepartment 的以下信息。

PowerShell 命令示例:

Get-DistributionGroupMember -ResultSize Unlimited "[email protected]" | Sort -Property DisplayName | Select-Object DisplayName, Alias, Department

PowerShell输出结果:

DisplayName  Alias        Department
-----------  -----        ----------
Brenda Smith Brenda.Smith           
David Kent   David.Kent   Sales     

统计通讯组成员的数量

您还可以查看特定通讯组拥有的成员数量。

请参阅下面的 PowerShell 命令语法。

(Get-DistributionGroupMember -ResultSize Unlimited "Distribution Group").Count

运行以下 PowerShell 命令示例。

(Get-DistributionGroupMember -ResultSize Unlimited "[email protected]").Count

它将在 PowerShell 输出中显示成员数量。

获取特定用户的通讯组成员身份

您还可以了解特定用户拥有多少会员资格。

  1. 在第一行输入用户的身份
  2. 运行以下 PowerShell 脚本
$User = "[email protected]"
$UserDisplayName = (Get-User $User).Name
"The user " + $User + " is a member of the following Distribution Groups:"

foreach ($DistributionGroup in Get-DistributionGroup -ResultSize Unlimited) {
    if ((Get-DistributionGroupMember $DistributionGroup.PrimarySmtpAddress | Select-Object -ExpandProperty Name) -contains $UserDisplayName) {
        $DistributionGroup.PrimarySmtpAddress
    }
}

PowerShell 输出结果显示他们是哪个通讯组的成员。

The User [email protected] is a member of the following Distribution Groups:
[email protected]
[email protected]

在我们的示例中,用户 Brenda 是两个通讯组的成员。

显示具有特定电子邮件域的通讯组列表

查看特定域的通讯组列表。如果您有许多通讯组并希望将其范围缩小到特定域,这非常有用。

请参阅 PowerShell 命令语法。

Get-DistributionGroup -ResultSize Unlimited  -Filter {EmailAddresses -like "*Domain Name"} | ft -Property Name, Alias, EmailAddresses -Autosize

在我们的示例中,我们想要显示电子邮件地址包含域名 a-d.site 的通讯组列表

运行 PowerShell 命令示例。

Get-DistributionGroup -ResultSize Unlimited  -Filter {EmailAddresses -like "*a-d.site*"} | ft -Property Name, Alias, EmailAddresses -Autosize

PowerShell 输出显示以下结果。

Name            Alias           EmailAddresses                                                                                      
----            -----           --------------                                                                                      
Sales Employees Sales.Employees {SMTP:[email protected], smtp:[email protected]}                 
Sales UK        SalesUK         {SMTP:[email protected], smtp:[email protected]}                               
Sales USA       SalesUSA        {SMTP:[email protected], smtp:[email protected], smtp:[email protected]}

显示特定日期范围内的通讯组

您可以获得在特定日期、时间或时间范围内创建的通讯组的列表。

  1. 我们想要将用户添加到在特定时间范围(过去两周)内创建的所有新通讯组中
  2. 我们想要将用户添加到在特定时间范围(最近两周之前)创建的所有通讯组中

要了解特定通讯组的创建时间,我们可以查询WhenCreated。要查找属于特定时间范围(例如最近两周或当前两周之前的时间)的分发组,我们需要使用PowerShell逻辑运算符。

在我们的示例中,我们创建两个 PowerShell 查询,它们将使用以下运算符 -ge-le,并获取以下信息:

  • 获取过去 2 周内创建的通讯组的列表。为此,我们使用 PowerShell 运算符 -ge(大于或等于)。
  • 获取过去 2 周之前创建的通讯组的列表。为此,我们使用 PowerShell 运算符 -le(小于或等于)。

要定义两周的时间范围,我们将按以下方式使用 PowerShell cmdlet Get-Date:(Get-Date).AddDays(-14)。

获取过去 2 周内创建的通讯组

获取过去 14 天内创建的通讯组的列表。

运行以下 PowerShell 示例。

Get-DistributionGroup -ResultSize Unlimited -Filter "WhenCreated -ge '$((Get-Date).AddDays(-14))'" | Format-Table DisplayName, WhenCreated

查看PowerShell输出结果。

DisplayName         WhenCreated        
-----------         -----------        
Sales Employees     25/08/2023 23.07.36
Sales UK            07/09/2023 11.53.47
Sales USA mail list 07/09/2023 10.00.12

获取过去 2 周之前创建的通讯组

获取过去 14 天之前创建的通讯组的列表。

运行以下 PowerShell 命令示例。

Get-DistributionGroup -ResultSize Unlimited -Filter "WhenCreated -le '$((Get-Date).AddDays(-14))'" | Format-Table DisplayName, WhenCreated

PowerShell 输出结果显示过去两周之前创建的所有通讯组的列表。

DisplayName     WhenCreated        
-----------     -----------        
Sales Employees 25/08/2023 23.07.36

显示特定所有者管理的所有通讯组

获取由特定名称管理的所有通讯组的列表。仅查看该特定名称为所有者的通讯组。

在我们的示例中,它将显示所有者包含单词 Amanda 的所有通讯组。

  • 在星号 (*) 之间输入身份名称
  • 运行以下 PowerShell 脚本
$users = Get-User -Identity *amanda*

foreach ($user in $users) {
    $userPrincipalName = $user.UserPrincipalName
    $displayName = $user.DisplayName

    Get-DistributionGroup -ResultSize Unlimited | Where-Object { $_.ManagedBy -like "*$($user.Identity)*" } | 
    Select-Object DisplayName, PrimarySmtpAddress,
    @{Name = 'UserPrincipalName'; Expression = { $userPrincipalName } },
    @{Name = 'UserDisplayName'; Expression = { $displayName } }
}

PowerShell 输出显示属于 Amanda 的所有通讯组。

DisplayName         PrimarySmtpAddress          UserPrincipalName          UserDisplayName
-----------         ------------------          -----------------          ---------------
Sales Germany       [email protected]   [email protected] Amanda Hansen
Sales Germany       [email protected]  [email protected] Amanda Hansen
Sales France        [email protected]    [email protected] Amanda Morgan

显示单个通讯组的所有所有者

您可以显示特定通讯组拥有哪些所有者。

运行以下 PowerShell 命令以显示特定通讯组的所有者。

$group = Get-DistributionGroup -ResultSize Unlimited -Filter "PrimarySmtpAddress -eq '[email protected]'"
$managedBy = $group.ManagedBy | Get-User
$managedBy | Select-Object DisplayName, Identity

PowerShell 输出显示所有所有者的对象 ID

DisplayName    Identity
-----------    --------
Brenda Smith   0f38d53f-cbe0-4844-86e9-1032a45ba31b
George Wilson  67962421-00e7-448b-b382-83b7b434e41c
Amanda Hansen  41377e9c-dc47-46c0-b4a5-1d5bbdcb5cc5
Ken Walker     12eefbb2-e5f4-4eec-bd18-df7ca2f1ee6b

显示所有具有主持人的通讯组

并非所有通讯组都有主持人,因为默认情况下没有设置。主持人可以批准或拒绝发送到通讯组的邮件。

  1. 显示所有现有通讯组(有或没有主持人)的列表

运行以下 PowerShell 命令示例:

Get-DistributionGroup -ResultSize Unlimited | ft DisplayName, ModeratedBy

PowerShell输出结果:

DisplayName          ModeratedBy                                                                 
-----------          -----------                                                                 
Sales Employees      {}                                                                          
Sales UK             {41377e9c-dc47-46c0-b4a5-1d5bbdcb5cc5, eec2668a-0773-4947-93ba-2223f6acfe55}
Sales USA mail list  {}                                                                          
  1. 显示具有管理员的所有通讯组的列表

运行以下 PowerShell 命令示例。

Get-DistributionGroup -ResultSize Unlimited -Filter 'ModeratedBy -ne $null' | ft DisplayName, ManagedBy

PowerShell 输出显示以下结果。

DisplayName ManagedBy                             
----------- ---------                             
Sales UK    {41377e9c-dc47-46c0-b4a5-1d5bbdcb5cc5, eec2668a-0773-4947-93ba-2223f6acfe55}

显示从本地 Active Directory 同步的所有通讯组

运行以下 PowerShell 命令示例。

Get-DistributionGroup -ResultSize Unlimited | Where-Object { $_.IsDirSynced -eq $true } | ft DisplayName, IsDirSynced

显示通讯组传递管理设置

术语传递管理与可以向通讯组发送邮件的用户相关。发件人有两种类型:

  • 内部发件人(组织收件人),被描述为经过身份验证的收件人
  • 外部发件人(非组织收件人),被描述为未经身份验证的收件人

当您创建新的通讯组时,选项仅允许来自组织内部人员的邮件处于启用状态。定义此选项的参数是-RequireSenderAuthenticationEnabled

默认情况下,参数 -RequireSenderAuthenticationEnabled 的值设置为 $True。只有组织内部的人员才能向通讯组发送邮件。

您还可以允许组织外部的人员向通讯组发送消息。参数-RequireSenderAuthenticationEnabled的值应设置为$False

我们将显示已启用或禁用外部发件人的所有通讯组的列表。

运行 PowerShell 命令示例。

Get-DistributionGroup -ResultSize Unlimited | ft DisplayName, RequireSenderAuthenticationEnabled

PowerShell 输出结果。

DisplayName          RequireSenderAuthenticationEnabled
-----------          ----------------------------------
Mail security                                     False
Sales Employees                                   False
Sales France                                       True
Sales Germany                                      True
Sales Norway                                       True
Sales Spain                                        True
Sales Sweden                                       True
Sales UK                                          False
Sales USA mail list                               False

显示接受来自外部收件人的电子邮件的通讯组

仅查看接受外部收件人发送电子邮件的通讯组列表。

运行 PowerShell 命令示例。

Get-DistributionGroup -ResultSize Unlimited | Where-Object { $_.RequireSenderAuthenticationEnabled -eq $True } | ft DisplayName, RequireSenderAuthenticationEnabled

请参阅下面的 PowerShell 输出结果。

DisplayName RequireSenderAuthenticationEnabled
----------- ----------------------------------
Sales UK                                  True

显示不接受来自外部收件人的电子邮件的通讯组

我们将仅显示不允许组织外部的人员(外部收件人)向该组发送电子邮件的通讯组列表。

运行以下 PowerShell 命令:

Get-DistributionGroup -ResultSize Unlimited | Where-Object { $_.RequireSenderAuthenticationEnabled -eq $False } | ft DisplayName, RequireSenderAuthenticationEnabled

PowerShell输出结果:

DisplayName         RequireSenderAuthenticationEnabled
-----------         ----------------------------------
Sales Employees                                  False
Sales USA mail list                              False

将包括成员的通讯组列表导出到 CSV

我们将向您展示如何导出作为 PowerShell 输出结果显示的所有信息。您可以以以下文件格式导出 PowerShell 输出:文本、CSV、HTML 和 XML。

要将 PowerShell 命令输出导出为 CSV(逗号分隔值)文件格式,我们可以添加其他参数,例如:

  • -NoTypeInformation:它可以防止PowerShell向CSV文件添加不必要的信息
  • -编码UTF8:可以导出所有非英文字符,例如中文或阿拉伯语

您需要添加导出数据的路径,这意味着您必须创建一个特定文件夹 (temp) 并将其保存在 (C:) 驱动器中。没有 PowerShell 命令会创建路径中指定的特定文件夹。

设置完成后,我们将向您展示如何将通讯组列表信息导出到各种文件类型。

  1. 将信息导出到 CSV 文件 PowerShell 命令示例:
Get-DistributionGroup -ResultSize Unlimited | Export-CSV "C:\temp\DistributionGroups.csv" -NoTypeInformation -Encoding UTF8
  1. 将信息导出到文本文件 PowerShell 命令示例:
Get-DistributionGroup -ResultSize Unlimited | Out-File "C:\temp\DistributionGroups.txt"
  1. 将信息导出到 HTML 文件 PowerShell 命令示例:
Get-DistributionGroup -ResultSize Unlimited | ConvertTo-Html | Out-File "C:\temp\DistributionGroups.html"

将包含成员的单个通讯组列表导出为 CSV

您可以导出特定通讯组的所有成员的信息。

在我们的示例中,我们希望导出通讯组 Sales UK 的所有成员。

Get-DistributionGroupMember -ResultSize Unlimited -Identity "Sales UK" | Select-Object DisplayName, PrimarySmtpAddress, ExternalEmailAddress, Alias | Export-Csv "C:\temp\DistributionGroupMembers.csv" -NoTypeInformation -Encoding UTF8

它将把 CSV 文件导出到 C:\temp 文件夹。使用 Microsoft Excel 打开 CSV 文件以查看结果。

[玩转系统] 使用 PowerShell 导出通讯组和成员

下图显示了 CSV 文件示例,其中包含通讯组 Sales UK 的所有组成员(包括联系人)。

[玩转系统] 使用 PowerShell 导出通讯组和成员

将所有通讯组(包括成员)的列表导出到 CSV

您可以将所有通讯组成员的列表导出到单个 CSV 文件。

运行 PowerShell 脚本。

$Groups = Get-DistributionGroup -ResultSize Unlimited

# Initialize an array to store the data
$data = @()

foreach ($Group in $Groups) {
    $Members = Get-DistributionGroupMember -ResultSize Unlimited -Identity $Group.PrimarySmtpAddress

    foreach ($Member in $Members) {
        if ($Member.PrimarySmtpAddress) {
            $Recipient = Get-Recipient -Identity $Member.PrimarySmtpAddress

            $data += [PSCustomObject]@{
                GroupName = $Group.DisplayName
                GroupPrimarySmtpAddress = $Group.PrimarySmtpAddress
                MemberDisplayName = $Member.DisplayName
                MemberPrimarySmtpAddress = $Member.PrimarySmtpAddress
                RecipientType = $Recipient.RecipientType
                MemberAlias = $Recipient.Alias
            }
        } else {
            $data += [PSCustomObject]@{
                GroupName = $Group.DisplayName
                GroupPrimarySmtpAddress = $Group.PrimarySmtpAddress
                MemberDisplayName = $Member.DisplayName
                MemberPrimarySmtpAddress = "-"
                RecipientType = "-"
                MemberAlias = "-"
            }
        }
    }
}

# Export the data to a CSV file
$data | Export-Csv -Path "C:\temp\AllDistributionGroupMembers.csv" -NoTypeInformation -Encoding UTF8

它将把 CSV 文件导出到 C:\temp 文件夹。使用 Microsoft Excel 打开 CSV 文件以查看结果。

[玩转系统] 使用 PowerShell 导出通讯组和成员

最终结果显示所有通讯组的列表,包括其成员和组织中的联系人。

[玩转系统] 使用 PowerShell 导出通讯组和成员

了解更多:将 Microsoft 365 邮箱导出到 PST 文件 »

结论

您学习了如何使用 PowerShell 导出通讯组和成员。获取所有通讯组(包括其成员)的详细列表,并将其导出到 CSV 文件。使用 PowerShell,您可以自定义并创建您自己的有关所有通讯组的详细报告。

您喜欢这篇文章吗?您可能还喜欢使用 PowerShell 导出 Microsoft 365 邮箱大小报告。不要忘记关注我们并分享这篇文章。

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

取消回复欢迎 发表评论:

关灯