65.9K
CodeProject 正在变化。 阅读更多。
Home

将 SharePoint 2013 本地或在线分类术语存储区迁移至本地或在线

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2016年5月16日

CPOL

10分钟阅读

viewsIcon

24942

downloadIcon

248

将 SharePoint 2013 或 SharePoint Online 术语存储区及其子对象(带属性)从一个环境复制到另一个环境

引言

当我们将 SharePoint 列表和库从一个环境迁移到另一个环境时,如果列表使用全局或网站集词汇表存储中的托管元数据列,那么如果词汇表存储未同时迁移或手动创建,它们往往会丢失标记信息。此实施的目标是在迁移后保留全局和本地词汇表标记信息。

为了实现这一点,从概念上讲,我们应该创建词汇表存储及其子对象和属性,并保持单个对象的相同 GUID。此实施自动化了 SharePoint 词汇表存储对象(组、词汇表集、词汇表等)到另一个 SharePoint 环境(本地或在线)的迁移。

 

先决条件 

  1. 此解决方案要求在执行机器上安装 PowerShell 3.0 或更高版本。点击链接获取更多信息和安装指南:https://www.microsoft.com/en-us/download/details.aspx?id=34595

 

  1. SharePoint 客户端组件 SDK。请验证您已安装 SharePoint 客户端程序集。访问链接安装 SharePoint 客户端 SDK:https://www.microsoft.com/en-us/download/details.aspx?id=35585

 

  1. 权限要求:
    • 对于导出操作,指定用户帐户必须具有网站对词汇表存储的读取访问权限。
    • 对于导入操作,指定用户必须具有网站访问权限,并且必须在“词汇表存储管理员”组中。

 

  1. 服务器连接要求:脚本可以从任何系统远程执行。但是,源环境和目标环境应该可以从运行脚本的网络访问。

 

设计概述

  • 此实施中使用的基本工具是 PowerShell 脚本。提供了一组脚本和配置文件,可用于自动化实施。一个主脚本在执行时将读取配置并根据配置和参数执行其他脚本。

 

  • 所有可重用对象和常见操作(例如加载依赖模块等)都与主用户脚本分离。这些依赖脚本在调用任何用户脚本之前由主脚本调用。许多功能是通过必须成功执行的依赖脚本加载的。如果任何依赖脚本未能执行,则整个执行将停止。

 

  • 此实施利用 SharePoint CSOM 功能与词汇表存储和其他 SharePoint 对象进行交互。

 

 

以下是文件结构及其用法的简要介绍

  1. 基本目录

根目录将包含文件和文件夹

  1. Common:Common”目录包含加载可重用对象的常用脚本。当前版本的实施包含以下文件

          

  1. Load-Assemblies.ps1:读取配置文件并加载执行所需的程序集。
  2. Register-Functions.ps1:将可重用函数和对象添加到当前的 PowerShell 执行会话,并使其可供其他脚本调用。

 

  1. Taxonomy:Taxonomy”文件夹是包含所有脚本、配置文件、日志和与分类操作相关的导出文件的目录。

 

  1. Configuration.xml:Configuration.xml”文件是主配置文件。它由主脚本“Execute-Scripts.ps1”用于加载配置信息。它将包含依赖和用户脚本信息。

 

  1. Execute-Scripts.ps1:Execute-Scripts.ps1”是主脚本,它读取配置文件“Configuration.xml”并执行其他脚本。

 

 

  1. 用户脚本目录:“Taxonomy”

Taxonomy”目录将包含所有脚本、配置文件、日志和与分类操作相关的导出目录。此目录的内容如下所示。

 

  1. Exports”目录将包含执行脚本后导出的文件列表(taxonomy.xmltaxonomy-<timestamp>-<GUID>.xml),其中包含术语信息。
  1. Logs”目录将包含由脚本生成的日志文件列表(<script name>-<timestamp>.log)(记录成功和失败消息)。任何执行时错误、警告和消息都将记录在“Logs”目录中的文件“<script name>-<timestamp>.log”中。
  1. configuration.xml”文件将包含脚本执行所需的配置信息(管理员应根据执行这些脚本的环境对此文件进行更改,请参阅后面详细介绍文件部分的章节)。
  1. Export-TermStore.ps1”脚本将从“configuration.xml”文件中读取配置,并读取词汇表存储并将所有信息导出到“Exports”目录中的文件“taxonomy.xml”。

如果“Exports”目录中已存在名为“taxonomy.xml”的文件,它将被重命名为“taxonomy-<timestamp>-<GUID>.xml”,其中“timestamp”是脚本执行开始的日期时间,“GUID”是新生成的 GUID。

  1. Import-TermStore.ps1”脚本将从“configuration.xml”文件和“Exports”目录中的“taxonomy.xml”中读取配置。它将在目标环境中创建词汇表存储对象。

 

 

实现细节

本节描述了实施中使用的各种文件。

 

  1. 主配置文件:Configuration.xml

此配置文件由“Execute-Script.ps1”脚本使用,并包含以下信息。

  1. 元素configuration/dependency:包含要执行的依赖脚本和要加载的程序集的信息。
  2. 元素configuration/executables:包含哪些脚本用于导出或导入的信息。

 

 

  1. 主脚本:Execute-Scripts.ps1

这是开始导出或导入操作的主脚本。它接受名为“collection”的参数。接受的值可以是“source”或“target”。调用脚本的语法如下。

PS C:\> Execute-Scripts.ps1 –Operation <”export” or “import”>

e.g. Execute-Scripts.ps1 –Operation export

Execute-Scripts.ps1 –Operation import

 

同一个脚本可以用于导出和导入。“Operation”参数提供的值(值可以是“export”或“import”)将选择运行导出或导入操作。

 

  1. 用户脚本目录:Taxonomy

根目录中的“Taxonomy”目录将包含词汇表存储相关脚本工作所需的所有文件。它还将包含“Exports”和“Logs”目录,以存储导出的结果和脚本生成的日志。

 

 

  1. 配置文件:Taxonomy/configuration.xml

这是词汇表存储导出或导入操作相关脚本使用的配置文件。

 

  1. 元素:configuration/context:用于检索分类会话的 Web 上下文信息。
  2. 元素:configuration/credentials:用于导出和导入的凭据。
  3. 元素:configuration/sitemappings:有关源和目标网站集映射的信息。当网站集词汇表存储迁移到不同的网站集时,此数据将使用。

 

 

  1. 脚本:Taxonomy/Export-TermStore.ps1

此脚本读取词汇表存储并将词汇表存储信息导出到“Exports”目录中的“taxonomy.xml”文件。执行脚本的语法如下。

 

PS C:\> Export-TermStore.ps1

注意:如果“Exports”或“Logs”目录尚不可用,它们将由脚本创建。

 

 

  1. 脚本:Taxonomy/Import-TermStore.ps1

此脚本读取“Exports”目录中的“taxonomy.xml”文件,并在目标环境中创建词汇表存储对象。执行脚本的语法如下。

 

PS C:\> Import-TermStore.ps1

 

 

  1. 文件:Taxonomy/Exports/taxonomy.xml

这是“Export-TermStore.ps1”脚本生成的输出文件。它包含词汇表存储、词汇表组、词汇表集、词汇表等不同词汇表对象的层次结构 xml 表示。下面是 taxonomy.xml 文件外观的屏幕截图。

 

 

执行指南

本节描述如何设置配置文件并开始执行的步骤。

  1. 将您的 PowerShell 工作位置设置为脚本所在的位置。

例如:如果您将脚本保存到“D:\Scripts”位置,请通过执行以下命令设置位置

Set-Location -Path D:\Scripts

 

这应相应地更改 PowerShell 控制台中的位置。请参阅下面的屏幕截图。

 

  1. 编辑分类配置文件“.\Taxonomy\configuration.xml

 

  1. 指定用于执行的“weburl”和“environment”。“weburl”可以是特定环境中任何现有网站集的 URL,从中导出词汇表存储。根据情况将“environment”指定为“on-premise”或“online”。

 

  1. 指定用于连接 SharePoint 站点的凭据。“username”可以是电子邮件 ID 的形式,也可以是“domain\userid”格式。

还要确保

  • 指定用于导出的用户名对词汇表存储具有读取访问权限。
  • 指定用于导入的用户名对目标词汇表存储具有读写访问权限。

 

  1. 指定网站集映射。当源环境中特定网站集的词汇表组迁移到目标环境中另一个特定网站集时,将使用此映射信息。

          

 

  1. 在源端执行:使用以下命令运行导出操作 -

PS D:\Scripts> .\Execute-Scripts.ps1 -Operation export

在导出操作运行时,您应该会看到 PowerShell 控制台输出如下图所示。

     

     

执行完成后,输出文件“taxonomy.xml”将在“Taxonomy/Exports”目录中创建。如果已存在同名文件,它将被重命名,并附加日期时间戳和 GUID。请参阅下面的屏幕截图。

         

 

 

 

  1. 在目标端执行

如果源环境和目标环境不在同一网络中,并且运行脚本的系统无法访问目标环境,请将整个脚本目录(包括导出的“taxonomy.xml”文件)复制到目标环境。然后从目标环境本身执行。

注意:在开始在目标端执行之前,请确保您已对配置文件进行了必要的更改,如前所述。还要确保此时“Exports”目录已存在,并且其中包含“taxonomy.xml”文件。导入脚本读取由导出操作生成的“taxonomy.xml”。

 

使用以下命令运行导入操作 -

PS D:\Scripts> .\Execute-Scripts.ps1 -Operation import

         

在导入操作运行时,控制台将显示如下消息。

          

 

# 对象创建顺序

导入操作将以层次结构方式添加对象。请参阅下面的图表。括号中的数字表示对象创建的顺序。

       

 

 

  1. 日志记录

 

所有执行时消息和错误都记录在“Taxonomy/Logs”目录中的日志文件中。详细错误消息不会显示在 PowerShell 控制台中。要查看任何警告或错误的详细信息,可以参考日志文件。

 

日志文件以脚本名称和时间戳创建。时间戳是脚本执行开始的日期时间。

 

       

每个日志项都包含以下格式的信息。另请参阅下面的屏幕截图。

Timestamp:日志的日期和时间

Type:日志类型(通用、警告、错误、导出等)

Location:生成日志的函数名称

Message:有关日志的消息

Detail:有关日志的详细信息

 

 

 

限制

此脚本根据当前实施存在某些限制

  1. 如果缺少用户,对象创建失败

如果任何对象(词汇表组、词汇表集、词汇表等)具有用户字段,并且目标环境中缺少该用户,则对象创建将失败。

 

例如:词汇表集可能包含“owner”用户字段。如果目标环境中不存在相同的用户,则该特定词汇表集的导入将失败。

 

  1. 现有对象不会被覆盖

如果目标中已存在同名的对象(词汇表组、词汇表集、词汇表等),则不会被覆盖。因此,任何添加到现有对象或更新的关联属性都不会被导入。要导入所有属性,必须首先从目标中删除该对象。

 

  1. 词汇表组的“组管理员”和“贡献者”属性未导入。

 

源代码

https://codeproject.org.cn/KB/Articles/1099878/MigrateTermStore.zip 

 

© . All rights reserved.