网站搜索

使用 PowerShell 将联系人批量导入到 Exchange Online (Office 365) |第 1 部分#2


在基于 Exchange 的环境中,术语“外部联系人”或简称“联系人”描述了一个 Exchange 收件人对象,其电子邮件地址是外部电子邮件地址(非组织电子邮件地址)。

例如——供应商、业务合作伙伴、客户等。

默认情况下,“外部联系人”与“标准”组织收件人一起显示为 GAL(全局地址列表)的一部分,例如具有邮箱、通讯组等的 Exchange 组织收件人。

使用 PowerShell 脚本将联系人批量导入到 Exchange Online (Office 365) |系列文章

  • 使用 PowerShell 将联系人批量导入到 Exchange Online (Office 365) |第 1#2 部分(本文)
  • 使用 PowerShell 脚本将联系人批量导入到 Exchange Online (Office 365) |第 2 部分#2

将邮件联系人传输到 Exchange Online

在我们从非 Exchange 邮件基础架构迁移的场景中,最常见的要求之一是将所有“邮件联系人收件人”转移到新的邮件基础架构(即 Exchange Online)。

将邮件联系人“传输”到 Exchange Online 的选项可以通过以下选项之一实现:

1.手动在 Exchange Online 中创建每个邮件联系人。

如果我们正在讨论大量的邮件联系人,那么我们在 Exchange Online 中手动创建此联系人的“手动”选项并不是理想的选择。这项任务被认为是一项费力的工作,可能会出现人为错误(拼写错误等)等问题。

2.使用第三方导入工具。

如果您使用第三方工具来实现从现有邮件基础结构到 Exchange Online 的邮件迁移,则大多数“邮件迁移应用程序”都包含可帮助您将现有联系人列表导入到 Exchange Online GAL 的模型。

3. Exchange Online - 使用 PowerShell 命令。

Exchange在线环境为我们提供了导入“联系人”对象的内置解决方案。

第一阶段通过将当前邮件基础设施中的信息导出到 CSV 文件来实现。

第二阶段是使用 PowerShell 命令执行,该命令将有关联系人的信息从 CSV 文件导入到我们的 Exchange Online 服务器。

本篇文章和下一篇文章主要介绍我们使用PowerShell实现批量联系人导入任务的“Exchange Online方法”。

我们面临的挑战

1. 目前,Exchange Online 不包含图形界面,使我们能够从 CSV 文件导入所需的联系信息。

唯一可用的选项是使用“PowerShell 命令集”,它将实现“导入联系人任务”。对于新的 PowerShell 用户来说,我们用于这项工作的 PowerShell 命令可以被认为是复杂的,而不是那么简单。”

2. CSV文件中的联系信息应以特定的数据结构格式存储。例如,Exchange Online 规定了一项强制性要求,其中每个联系人都应该有一个电子邮件地址和一个“姓名”(其他标准术语包括 - 显示名称、全名 )。

我们面临的挑战的解决方案

1.在本文中,我们将回顾:

如何使用所需的 PowerShell 命令语法从联系人 CSV 文件导入信息并讨论此 PowerShell 命令的逻辑和结构

在下一篇文章中,我们将回顾如何使用我创建的 PowerShell 脚本,该脚本可以简化使用复杂 PowerShell 命令的任务。

2.在本文中,我们将回顾 CSV 文件所需的数据结构,我们需要为“导入阶段”做好准备。

在下一篇文章中,我们将回顾一些管理和操作联系人 CSV 文件中的数据的技巧。

使用 CSV 文件实现批量联系人导入

“批量导入”选项使我们能够快速有效地将数百甚至数千个邮件联系人的信息从以前的邮件基础设施迁移到 Exchange Online。

我们从“以前的邮件基础设施”导出信息的方式取决于我们使用的适当的邮件基础设施。

关于“导出数据”,我们应该了解的重要一点是,数据应该使用 CSV 格式导出。

术语 CSV 代表 - 逗号分隔值。 CSV 格式,定义了类似于表概念的数据结构。

在下面的屏幕截图中,我们可以看到 CSV 文件的示例

该信息包括“列标题”(A)和“数据行”(B)。

例如 - 以下值是“列标题”:

外部电子邮件地址、姓名、名字、姓氏

显示在“列标题”部分下方的值是填充不同列的值。

例如,以下字符串 - darrenp@fabrikam.com、Darren Parker、Darren、Parker 将是“翻译”如下:

ExternalEmailAddress

darrenp@fabrikam.com

Name

达伦·帕克

FirstName

达伦

LastName

派克

在下面的屏幕截图中,当我们使用 Excel 编辑文件时,我们可以看到相同的 CSV 文件。

很容易注意到,当使用 Excel 编辑 CSV 文件时,信息以更易于理解的格式呈现。

Exchange Online 外部联系人对象和必填数据字段

基于 Exchange 的环境中的“外部联系人对象”可以包含许多属性
例如 - 姓名、电子邮件地址、电话号码、办公地址等等。

我想强调的重要一点是,基于 Exchange Online 的环境中的“外部联系对象”必须具有三个强制数据字段:

  1. *显示名称:
  2. *别名:
  3. *外部电子邮件地址:

在下面的屏幕截图中,我们可以看到这些带有星号字符的必填数据字段,“告诉我们”这些是必填数据字段。

关键是,当我们从我们使用的现有邮件基础设施中导出联系人数据时,我们必须确保导出的数据包含此“数据字段”。

从技术上讲,导出的数据不需要包含“别名”字段,但必须包含以下数据字段:

  • 外部电子邮件地址(在我们的 CSV 文件中,此字段使用列标题
    名称显示 - 外部电子邮件地址)。
  • 显示名称(在我们的 CSV 文件中,此字段使用列标题名称显示 - 名称)。

如果您想知道附加的强制数据字段 - “别名”,答案是,如果导出的数据(CSV 文件)不包含此字段,则 Exchange Online 的导入过程“知道”如何自动生成“别名”字段。

CSV 文件的导入过程将采用存储在 CSV 字段“名称”,并使用该值作为“别名”值。

如果我们想要更准确,导入过程将从姓名字段中取出两个分开的单词(私人姓名和姓氏),删除这两个单词之间存在的空格,并创建一个“新值” - “别名”。

在下面的屏幕截图中,我们可以看到在 CSV 文件中存储的数据与 Exchange Online“外部联系人对象”之间实现的“映射逻辑”示例。

请注意:

  • CSV 文件中显示的字段名称(行标题)与 Exchange Online 外部联系人字段名称不同。
  • CSV 文件不包含“别名”字段。如果我们在“Name”字段中提供值,导入过程将自动生成此字段。

使用 PowerShell 将外部联系人信息导入 Exchange Online 流程逻辑

我们将外部联系信息从 CSV 文件导入 Exchange Online 的过程由两个不同的阶段组成:

阶段 1 - 在此阶段,我们使用 PowerShell 实现的导入过程,在 Exchange Online 中创建所需的外部联系人“对象”。

在此阶段,导入过程仅涉及提到的必填字段以及附加列 - 名为 FirstName< 和 姓氏。

换句话说,PowerShell 导入过程“忽略”CSV 文件中的其余信息。

阶段 2 - 这是我们“填充”第一步“忽略”的缺失数据的阶段。

PowerShell 导入过程将“附加数据”(例如电话号码、办公室地址等)添加到现有的 Exchange Online 外部联系人中。

在下面的屏幕截图中,我们可以看到 CSV 文件的示例,其中包含我们需要导入的联系人信息。

在第一阶段,我们使用“强制数据字段”+名为的列 - FirstName 和LastName。
在第二个导入阶段,数据字段的其余部分(用颜色表示)橙色)将合并到现有的 Exchange 联系人中。

实施任务 - 使用 PowerShell 将外部联系人信息导入 Exchange Online

为了实现“使用PowerShell将外部联系人信息导入Exchange Online”的任务,我们需要完成的任务列表包括以下任务:

  1. 将联系人信息从现有邮件基础架构导出到 CSV 文件。
  2. 验证 CSV 文件是否包含我们用于将信息导入 Exchange Online 所需的数据结构。例如,列标题和必填字段的名称。
  3. 连接到 Exchange Online PowerShell
  4. 运行“第 1 阶段”PowerShell 命令,这将从 CSV 文件导入信息并在 Exchange Online 中创建外部联系人。
  5. 运行“第 2 阶段”PowerShell 命令,这将从 CSV 文件中导入“附加信息”(例如电话号码),并将这些信息分别填充到现有的外部联系人中

1. 连接到 Exchange Online PowerShell

为了能够运行本文中指定的 PowerShell 命令,您需要连接到 Exchange Online PowerShell。

以管理员身份启动 Windows PowerShell 并运行 cmdlet Connect-ExchangeOnline。

Connect-ExchangeOnline

2. 在 Exchange Online 中创建外部联系人对象

我们用于从现有 CSV 文件导入数据的 PowerShell 命令语法是:

Import-Csv <Path> | ForEach {New-MailContact -Name $_.Name -DisplayName $_.Name -ExternalEmailAddress $_.ExternalEmailAddress -FirstName $_.FirstName -LastName $_.LastName}

PowerShell 脚本包括两个独立的部分:

第一部分负责从 CSV 文件导入信息并将该信息保存在桌面 RAM 上的临时存储中 (Import-Csv )。

PowerShell 脚本的第二部分负责:

  • 获取上一步中检索到的信息
  • 开始根据此信息在 Exchange Online 中创建新的外部联系人对象 (New-MailContact)

PowerShell 导入过程正在实现一个“循环”(ForEach),通过读取 CSV 文件的每个“行”,在 Exchange Online 中创建所需的联系人对象,并一遍又一遍地重复该过程,直到到达“最后一行” CSV 文件。

我们应该了解的另一个概念是“映射过程”。
在我们的场景中,我们将 CSV 文件中的信息映射到 Exchange Online 中的“外部联系人”

  • “Red”参数是 Exchange Online 使用的数据字段的名称。
  • “Blue”参数是 CSV 文件中显示的列标题名称。从技术上讲,CSV 文件中列标题的名称只是我们选择的任意名称。除了建议使用不带空格的列标题名称之外,我们没有应该使用的特定命名约定。

在下面的屏幕截图中,我们可以看到 PowerShell 命令的示例,我们在 PowerShell 控制台中运行该命令(连接到 Exchange Online PowerShell 后)。

该命令从 CSV 文件中读取信息(在我们的场景中,文件保存在 c:\temp 文件夹中,文件名为 ExternalContacts_01.csv)。

在下面的屏幕截图中,我们可以看到在 Exchange Online 中成功创建的联系人。

3. 添加外部联系人属性信息

在此阶段,我们“填充”在第一阶段创建的外部联系人对象,其中包含办公室电话、家庭电话、城市等属性信息。

在此阶段,我们使用与 CSV 文件“导入信息”相同的概念,但现在,我们使用 PowerShell 命令 - Set-Contact

联系人已创建,在此阶段,我们需要更新(设置联系人)现有的 Exchange Online 联系人。

PowerShell“知道”他需要与 CSV 文件中存在的每个联系人相关联,因为我们指示他循环运行 (ForEach) 并查找出现在“下”的所有联系人。 ” 列名称 (Set-Contact $_.Name)。

我们使用的命令的 PowerShell 语法是:

$Contacts = Import-CSV <path>
$contacts | ForEach {Set-Contact $_.Name -StreetAddress $_.StreetAddress -City $_.City -StateorProvince $_.StateorProvince -PostalCode $_.PostalCode -Phone $_.Phone -MobilePhone $_.MobilePhone -Pager $_.Pager -HomePhone $_.HomePhone -Company $_.Company -Title $_.Title -OtherTelephone $_.OtherTelephone -Department $_.Department -Fax $_.Fax -Initials $_.Initials -Notes $_.Notes -Office $_.Office }

在下面的屏幕截图中,我们可以看到我们在“第 2 阶段”运行的 PowerShell 命令示例
:

在下面的屏幕截图中,我们可以看到第二阶段也成功完成。添加到第一阶段创建的联系人的联系信息。

您可以下载名为:ExternalContacts_01.csv 的示例 Excel 文件。

在下一篇文章中,我们将研究使用 PowerShell 脚本将联系人批量导入到 Exchange Online (Office 365) |第 2 部分#2。

相关文章