网站搜索

使用 PowerShell 管理电子邮件地址 |办公室 365 |命令参考|第 2 部分#13


当前文章继续上一篇文章,其中我们回顾了与使用 PowerShell 管理电子邮件地址相关的各种管理任务。在本文中,我们回顾以下类型的管理任务:

  • 显示有关电子邮件地址的信息。
  • 搜索有关电子邮件地址的信息。
  • 使用 PowerShell 删除(删除)电子邮件地址。

显示有关电子邮件地址的信息

电子邮件地址“商店”|电子邮件地址属性

有关邮箱收件人电子邮件地址的信息,例如主电子邮件地址、代理电子邮件地址、SIP 地址和 x500 地址,“存储”名为 EmailAddresses 的邮箱属性。

需要“操纵”有关电子邮件地址的数据

从技术上讲,显示或导出有关收件人电子邮件地址的信息的任务可以被视为一项简单的任务。

然而,在很多情况下,我们需要“调整”“标准”PowerShell命令提供的信息。例如,

问题 1 - 我们能够从存储在 EmailAddresses 中的“电子邮件地址数组”中选择特定的“信息”。

默认情况下,PowerShell“吐出”存储在电子邮件地址上的所有内容。 Exchange Online PowerShell cmdlet 不包含使我们能够过滤信息的内置参数,例如要求仅显示代理电子邮件地址等。

问题 2 - PowerShell 默认将显示 EmailAddresses 属性的内容以及与“原始信息电子邮件地址”关联的附加“信息”,例如 SMTP:< 前缀。

我们将从用于“获取”有关电子邮件地址的信息的基本 PowerShell 语法开始,在下一节中,我们将回顾如何使用哈希表和自定义表达式来优化和调整我们需要的信息获取收件人电子邮件地址。

查看有关电子邮件地址的信息

我们用于显示有关收件人电子邮件地址的信息的“默认”PowerShell 命令语法非常简单。

我们需要指定:

  • 收件人的具体类型,例如“邮箱收件人”。
  • Exchange Online 收件人的身份,例如别名、电子邮件地址等。
  • 我们想要显示的特定属性,例如 - DisplayName、PrimarySmtpAddress、EmailAddresses。

PowerShell 命令语法

Get-Mailbox <Identity> | Select DisplayName,EmailAddresses

PowerShell 命令示例

Get-Mailbox Billy | Select DisplayName,EmailAddresses

显示有关主电子邮件地址的信息

如果我们只需要显示有关特定 Exchange Online 收件人的主电子邮件地址的信息,我们可以使用以下语法。

PowerShell 命令示例:

Get-Mailbox Billy |Select-Object DisplayName,PrimarySmtpAddress

要显示有关所有 Exchange Online 邮箱主电子邮件地址的信息,我们可以使用以下 PowerShell 命令语法。

PowerShell 命令示例:

Get-Mailbox -ResultSize Unlimited |Select-Object DisplayName,PrimarySmtpAddress

展开“电子邮件地址属性”

针对多值收件人电子邮件属性显示“完整内容”的“问题”,我们可以针对特定收件人针对多个电子邮件地址显示的问题实施“部分解决方案”,但这种解决方案并不恰当在我们需要显示多个收件人信息的场景中实现

在以下示例中,我们使用 PowerShell 命令获取有关
Angelina 电子邮件地址的信息。

PowerShell 命令示例:

Get-Mailbox Angelina | Select-Object -ExpandProperty EmailAddresses

在输出中,我们可以看到“EmailAddresses”属性包含许多电子邮件地址。

PS C:\script> Get-Mailbox Angelina | Select-Object -ExpandProperty EmailAddresses
smtp:Angelina@o365pilot.com
smtp:kk@o365info.com
SPO:SPO_5b27dc17-68b0-442e-804b-aee5b4df9847@SPO_e95bcc9e-2927-483d-ad36-7311a7152bdd
smtp:Angelina@o365info.com
SMTP:Angelina-NEW01@o365info.com
smtp:Angelina-Alias03@o365info.com
smtp:Angelina-Alias02@o365info.com

使用哈希表优化显示的结果 - 收件人电子邮件地址

在本节中,我们将回顾如何使用哈希表和自定义表达式作为“工具”,增强我们消化从 PowerShell 获取的有关收件人电子邮件的“本机”信息的能力地址。

在我们的特定场景中,我们使用 PowerShell 哈希表来实现三个主要目的:

1. 获取有关特定类型电子邮件地址的信息

如前所述,默认情况下 PowerShell 显示 EmailAddresses 属性的所有内容。通过使用哈希表和自定义表达式选项,我们可以创建一个新的自定义“收件人属性”,使我们能够使用仅获取有关特定电子邮件地址(例如代理电子邮件地址或 SIP 地址)的信息的过滤器。

2. 优化收件人电子邮件地址的PowerShell输出 |从输出中删除“不必要的数据”。

默认情况下,PowerShell 通过添加前缀(例如 SMTP)在电子邮件地址开头添加有关电子邮件地址“类型”的信息:

通过使用哈希表和自定义表达式选项,我们可以定义一个“请求”,该请求将从 PowerShell 命令输出中删除不必要的前缀。

默认 PowerShell 命令输出的附加字符与收件人有多个电子邮件地址的情况相关。在这种情况下,PowerShell 将显示有关“大括号”发音的电子邮件地址的信息。

通过使用哈希表和自定义表达式选项,我们可以定义一个“请求”,它将从 PowerShell 命令输出中删除不必要的大括号。

3. 优化收件人电子邮件地址的PowerShell输出|添加“分隔符

当我们将收件人电子邮件地址的信息导出到 CSV 文件时,PowerShell 会将多个电子邮件地址的信息导出到“一行”,并且不使用“分隔符”。

相反,PowerShell 在每个电子邮件地址之间添加一个“空格字符”。如果我们需要从 CSV 文件导入信息,我们需要有一个“分隔符”,使导入过程能够区分不同的电子邮件地址。

通过使用哈希表和自定义表达式选项,我们可以要求 PowerShell 添加一个“分隔符”,将每个电子邮件地址与其他电子邮件地址分开。

演示我们如何使用哈希表和自定义表达式

在此特定示例中,我们使用 PowerShell 哈希表和自定义表达式来执行以下任务:

  • 仅显示有关代理电子邮件地址的信息(代理电子邮件地址以小型大写字母 SMTP 前缀开头)。
  • 从电子邮件地址的 PowerShell 输出中删除 SMTP 前缀。
  • 删除电子邮件地址数组周围的“大括号”。
  • 添加分隔符 - 在我们的示例中,我们使用字符 (;)

我们使用以下 PowerShell 命令语法:

Get-Mailbox Christina | Select-Object DisplayName,@{Name="EmailAddresses";Expression={ ($_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"} | ForEach-Object {$_ -replace 'smtp:' }) -join ';' }}

在下面的框中,我们可以看到 PowerShell 输出的结果。
注意,现在

  • 每个电子邮件地址均不带 SMTP 前缀。
  • 电子邮件地址数组周围的“大括号”已被删除。
  • 每个电子邮件地址均由字符 - (;) 分隔。

PowerShell 控制台输出示例:

PS C:\script> Get-Mailbox Christina | Select-Object DisplayName,@{Name="EmailAddresses";Expression={ ($_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"} | ForEach-Object {$_ -replace 'smtp:' }) -join ';' }}

DisplayName               EmailAddresses
-----------               --------------
Christina Aguilera        Christina-Alias02@o365info.com;Christina@o365pilot.com

使用哈希表显示有关收件人电子邮件地址的信息

在下面的部分中,我想回顾一下我们使用 PowerShell 哈希表来获取有关特定 Exchange 收件人电子邮件地址的信息的场景的几个示例。

仅显示主电子邮件地址

PowerShell 命令获取邮箱包含一个专用参数,使我们能够显示有关定义为主电子邮件地址的特定电子邮件地址的信息。

换句话说,我们不需要实现任何复杂的 PowerShell 命令语法,例如使用哈希表来显示主电子邮件地址。

为了能够仅查看主电子邮件地址,我们可以使用以下 PowerShell 语法:

Get-Mailbox Billy | Select Alias,PrimarySmtpAddress

虽然我们不需要使用特殊的命令配置,但我想提供一个哈希表语法的示例,我们使用它来显示定义为主电子邮件地址的电子邮件。

在本例中,我们使用“cmatch”逻辑运算符定义一个条件,即仅当电子邮件地址的前缀包含字符串“SMTP:”时“获取”有关电子邮件地址的信息。使用大写字母。

PowerShell 命令示例

Get-Mailbox | Select-Object DisplayName,@{Name="Primary Email Address";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "SMTP:*"}}}

仅显示 SIP 地址

在当前场景中,我们只想查看有关收件人地址的信息,该地址被描述为“SIP 地址”(Skype 商业用户使用的地址)。

SIP 地址以前缀 sip: 开头

为了能够仅“获取”有关 SIP 地址的信息,我们定义以下哈希表表达式:

PowerShell 命令示例:

Get-Mailbox | Select-Object DisplayName,@{Name="SIP Email Address";Expression={$_.EmailAddresses |Where-Object {$_ -LIKE "sip:*"}}}

仅显示 x500 电子邮件地址

在当前场景中,我们只想查看有关电子邮件地址的信息,其描述为“x500 电子邮件地址”。

X500 电子邮件地址以前缀 x500: 开头

为了能够仅“获取”有关 x500 地址的信息,我们定义了以下哈希表表达式。

PowerShell 命令示例:

Get-Mailbox | Select-Object DisplayName,@{Name="x500 Email Address";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "x500:*"}}}

您可以在文章中找到有关哈希表和自定义表达式主题的更多详细信息 - 使用 PowerShell 显示有关电子邮件地址的信息|使用哈希表和自定义表达式自定义输出 |办公室 365 |第 7 部分#13

搜索有关电子邮件地址的信息

在下一节中,我们将演示如何使用 PowerShell Where 语句创建自定义搜索查询,该查询将查找:

  • 特定域名后缀。
  • 特定的电子邮件地址。

在我们需要“寻址”每个不同类型的 Exchange Online 收件人、查找特定电子邮件地址的情况下,我们需要知道什么是“神奇”的 PowerShell cmdlet,使我们能够执行此操作任务。

事实上,不存在这样的“神奇的 PowerShell 命令”,但相反,我们可以使用三种不同的 PowerShell cmdlet 的组合,这将使我们能够满足“解决”每个现有的要求Exchange Online 收件人。

在我们需要执行搜索以“查找”可用 Exchange Online 收件人类型、查找具有特定域名后缀的电子邮件地址的情况下,我们需要使用以下三个 PowerShell 命令的组合:

  • 获取收件人
  • 获取邮箱-SoftDeletedMailbox
  • 获取统一组

您可以在文章 - 使用 PowerShell 搜索具有特定域名后缀的电子邮件地址 | 中找到有关我们执行特定电子邮件地址或 Office 365 UPN 搜索方式的更多详细信息。办公室 365 |第 10 部分#13

使用 PowerShell 脚本执行搜索 - 带有特定域名后缀的电子邮件地址

任务描述

  • 我们需要执行搜索来找到所有具有特定域名后缀的电子邮件地址的 Exchange Online 收件人。
  • 我们希望将 PowerShell“结果”保存在 CSV 文件中。

PowerShell脚本的特点和逻辑

1. 我们寻找的域名后缀。
PowerShell 脚本将“询问”我们要寻找的特定域名后缀。该信息将存储在名为 $DomainSuffix 的变量中。

2. 导出文件的位置
在我们的具体演示中,我们要求 PowerShell 使用以下路径为我们创建一个新文件夹:C:\INFO\E-mail address\Exchange Online\E-mail address with Domain suffix - $域名后缀

3.导出的文件
如上所述,为了能够“查看”所有现有 Exchange Online 收件人,我们需要使用三个不同的 PowerShell cmdlet:

Get-Recipient、Get-Mailbox -SoftDeletedMailbox 和 Get-UnifiedGroup。每个命令的输出将存储在单独的 CSV 文件中。

$DomainSuffix = Read-Host "Type the domain name suffix that you look for"
# Creating folder structure and file names for the exported CSV files
$A20 = "C:\INFO\E-mail address\Exchange Online\E-mail address with Domain suffix - $Domainsuffix"

if (!(Test-Path -path $A20))
{New-Item $A20 -type directory}

# Exchange Online infrastructure
# Define the variable for the different type of Exchange Online recipients

$AllRecipients = Get-Recipient -ResultSize unlimited| Where {$_.EmailAddresses -like "*@$DomainSuffix"}
$SoftDeleted = Get-Mailbox -SoftDeletedMailbox | Where {$_.EmailAddresses -like "*@$DomainSuffix"}
$UnifiedGroups = Get-UnifiedGroup | Where {$_.EmailAddresses -like "*@$DomainSuffix"}
if ($SoftDeleted -eq $null)
{
write-host "There are no Soft Deleted Exchange Online mailboxes that have an E-mail address with the domain name suffix - $DomainSuffix"
}
else
{
$SoftDeleted | Select DisplayName,EmailAddresses,RecipientType,RecipientTypeDetails | Export-CSV $A20\"Exchange Online Soft Deleted mailboxes that their E-mail address include the domain name suffix $DomainSuffix.CSV" -NoTypeInformation -Encoding utf8
}
if ($UnifiedGroups -eq $null)
{
write-host "There are no Exchange Online unified groups that have an E-mail address with the domain name suffix - $DomainSuffix"
}
Else
{
$UnifiedGroups | Select DisplayName,EmailAddresses,RecipientType,RecipientTypeDetails | Export-CSV $A20\"Exchange Online unified groups that their E-mail address include the domain name suffix $DomainSuffix.CSV" -NoTypeInformation -Encoding utf8
}
if ($AllRecipients -eq $null)
{
write-host "There are no Exchange Online Recipients that have an E-mail address with the domain name suffix - $DomainSuffix"
}
Else
{
$AllRecipients | Select DisplayName,EmailAddresses,RecipientType,RecipientTypeDetails | Export-CSV $A20\"Exchange Online recipients that their E-mail address include the domain name suffix $DomainSuffix.CSV" -NoTypeInformation -Encoding utf8
}

使用 PowerShell 搜索“隐藏”电子邮件地址

搜索特定电子邮件地址 |搜索范围=Exchange Online

搜索将寻址所有现有的 Exchange Online 收件人并搜索特定的电子邮件地址。

$Alias = Read-Host "Type the name of the E-mail address that you are looking for "

# Exchange Online infrastructure

$SoftDeleted = Get-Mailbox -SoftDeletedMailbox | Where {$_.EmailAddresses -like "*$Alias"}
$UnifiedGroups = Get-UnifiedGroup | Where {$_.EmailAddresses -like "*$Alias"}
$AllRecipients = Get-Recipient -ResultSize unlimited| Where {$_.EmailAddresses -like "*$Alias"}
if ($SoftDeleted -eq $null)
{
write-host "The E-mail address $Alias, is not a Soft Deleted Exchange Online mailbox"
}
Else
{
write-host --------------------------------------------------------
write-host "The E-mail address $Alias, belong to Unified Group"
write-host Recipient display name is- $AllRecipients.DisplayName
write-host Recipient E-mail addresses are - $AllRecipients.EmailAddresses
write-host Recipient Type is - $AllRecipients.RecipientType
write-host -------------------------------------------------------
}
if ($UnifiedGroups -eq $null)
{
write-host "The E-mail address $Alias, is not a Unified Group"
}
Else
{
belong to Soft Deleted Exchange Online mailbox
}
if ($AllRecipients -eq $null)
{
write-host "The E-mail address $Alias, is not Exchange Online recipient "
}
Else
{
write-host --------------------------------------------------------
write-host "The E-mail address $Alias, belong to Exchange Online Recipient"
write-host Recipient display name is- $AllRecipients.DisplayName
write-host Recipient E-mail addresses are - $AllRecipients.EmailAddresses
write-host Recipient Type is - $AllRecipients.RecipientType
write-host -------------------------------------------------------
}

您可以在文章中找到有关搜索特定电子邮件地址主题的更多详细信息 - 使用 PowerShell 搜索“隐藏”电子邮件地址 |办公室 365 |第 11 部分#13

使用 PowerShell 删除(删除)电子邮件地址

为了能够删除(删除)Exchange 收件人的现有电子邮件,我们需要使用 PowerShell 方法 -@{remove。

当我们使用 PowerShell 参数@{remove时,我们“告诉”PowerShell 我们要删除(删除)的确切电子邮件地址是什么。

要使用PowerShell参数@{remove删除特定电子邮件,我们需要使用以下PowerShell命令语法。

PowerShell 命令语法

Set-Mailbox <identity> -EmailAddresses @{remove="<E-mail address>"}

PowerShell 命令示例

Set-Mailbox Christina -EmailAddresses @{remove="Christina-Alias02@o365info.com"}

快速提示

我们可用于删除电子邮件地址的另一个语法选项是通过使用“减号”(-) 字符而不是术语“删除”来实现的。

我们需要使用引号将减号字符引起来。例如:

Set-Mailbox Christina -EmailAddresses @{"-"="Christina-Alias01@o365info.com" }

删除所有具有特定域名的电子邮件地址 |批量模式

在本节中,我想回顾一个场景,其中我们需要删除(删除)具有某些特定字符(例如 - 域名后缀)的电子邮件地址。

在该操作中,我们同时处理许多“对象”(Exchange Online 收件人)并执行特定更新,例如删除电子邮件地址,称为“批量”。

在我们继续使用确切的 PowerShell 语法之前,对我来说“警告您”非常重要,因为当使用“批量”选项时,尤其是与删除电子邮件地址相关的任务时,我们应该仔细计划我们的步骤,测试PowerShell批量命令的结果,使用“Whatif”等选项。

您可以在文章 - 使用 PowerShell 添加电子邮件地址 - 批量模式 | 中阅读有关“Whatif”选项的更多信息。办公室 365 |第 4 部分#13

场景描述

我们公司拥有两个公共域名:o365info.com 和 o365pilot.com
由于法律问题,我们需要删除该域名 - o365pilot.com 并删除了每个后缀包含域名的电子邮件地址 - o365pilot.com

我们组织电子邮件地址基础设施的特点是:

  • 每个组织收件人都有一个主电子邮件地址,该地址使用基于域名 o365info.com 的电子邮件地址。
  • 每个组织收件人都有一个额外的别名电子邮件地址,该地址具有“其他”公司域名,例如 -o365pilot.com

我们需要“编写”一个 PowerShell 批量命令来执行以下任务:

  1. 对现有 Exchange Online 收件人运行循环进程。
  2. 搜索并查找带有特定域名后缀的电子邮件。
  3. 删除该电子邮件地址。

让我们使用以下场景:

我们要删除的域的名称是通过变量$RemoveDomain配置的。

有关所有现有 Exchange Online 邮箱的信息将保存在名为 $AllMailboxes 的变量中。

变量 $AllMailboxes 内容是通过使用 PowerShell 查询创建的,该查询查找电子邮件地址包含域名 o365pilot.com 的所有收件人。

然后,我们运行 PowerShell ForEach 语句,该语句将循环遍历 Exchange Online 邮箱数组,并对数组中出现的每个 Exchange Online 邮箱运行以下任务:

  • 验证 Exchange Online 邮箱是否有带有域名后缀的电子邮件地址 - o365pilot.com。
  • 如果答案为“是”,请删除包含域名的每个电子邮件地址 - o365pilot.com。
  • “跳转”到列表中的下一个邮箱。
$RemoveDomain = Read-Host "Type the domain name suffix that you look for"
$AllMailboxes = $AllMailboxes = Get-mailbox | Where {$_.emailaddresses -like "smtp:*@$RemoveDomain"}
ForEach ($Mailbox in $AllMailboxes)
{
write-host -ForegroundColor green "Removing the Alias That include the domain name $RemoveDomain :" $Mailbox.EmailAddresses "for" $Mailbox.DisplayName
Set-Mailbox $Mailbox.DisplayName -EmailAddresses @{Remove=$Mailbox.EmailAddresses} -WhatIf
}

您可以在文章 - 使用 PowerShell 删除电子邮件地址 | 中找到有关删除电子邮件地址主题的更多详细信息。办公室 365 |第 12 部分#13

当前文章系列的下一篇文章

使用 PowerShell 添加电子邮件地址 |办公室 365 |第 3 部分#13

相关文章