XML 元素库

本文介绍可用于创作迁移.xml文件的 XML 元素和帮助程序函数 (USMT) 。 本文假定对 XML 有基本的了解。

除了 XML 元素和帮助程序函数,本文还:

  • 介绍如何指定编码位置和位置模式。
  • 仅供内部 USMT 使用的函数。
  • 可用于帮助程序函数的版本标记。

元素和帮助程序函数

下表介绍了可用于 USMT 的 XML 元素和帮助程序函数。

元素 A-K 元素 L-Z 帮助程序函数
<addObjects>
<属性>
<字节>
<commandLine>
<组件>
<条件>
<条件>
<内容>
<contentModify>
<描述>
<destinationCleanup>
<检测>
<检测>
<检测>
<displayName>
<环境>
<排除>
<excludeAttributes>
<扩展>
<扩展>
<externalProcess>
<图标>
<include>
<includeAttribute>
<图书馆>
<位置>
<locationModify>
<_locDefinition>
<制造商>
<合并>
<迁移>
<namedElements>
<对象>
<objectSet>
<路径>
<路径>
<模式>
<处理>
<插件>
<作用>
<规则>
<脚本>
<文本>
<unconditionalExclude>
<变量>
<版本>
<windowsObjects>
<条件> 函数
<内容> 函数
<contentModify> 函数
<包含> 和 <排除> 筛选器函数
<locationModify> 函数
<merge> 函数
<脚本> 函数
内部 USMT 函数

<addObjects>

<addObjects> 元素模拟源计算机上是否存在一个或多个对象。 子 <对象> 元素提供模拟对象的详细信息。 如果内容是 <脚本> 元素,则调用的结果是对象的数组。

语法:

<addObjects>
</addObjects>

以下示例来自 MigApp.xml 文件:

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
   </object>
</addObjects>

<属性>

attributes<> 元素定义注册表项或文件的属性。

语法:

<attributes>Content</attributes>
设置 是否为必需?
内容 内容取决于指定的对象类型。
  • 对于文件,内容可以是一个字符串,其中包含以逗号分隔的以下任何属性:
    • Archive
    • 只读
    • 系统
    • Hidden
  • 对于注册表项,内容可以是以下类型之一:
    • 字符串
    • ExpandString
    • 二进制文件
    • Dword
    • REG_SZ

以下示例来自 MigApp.xml 文件:

<object>
   <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
   <attributes>DWORD</attributes>
   <bytes>00000000</bytes>
</object> 

<字节>

只能为文件指定 bytes> 元素,因为如果位置对应于注册表项或目录,则忽略字节。<<><>

  • 出现次数: 零个或一个

  • 父元素:<object>

  • 子元素:

语法:

<bytes string="Yes|No" expand="Yes|No">Content</bytes>
设置 是否为必需?
字符串 否,默认值为“否” 确定 内容 应解释为字符串还是字节。
expand 无 (默认值 = 是 当 expand 参数为 Yes 时,首先在源计算机的上下文中展开 bytes> 元素的内容<,然后进行解释。
内容 取决于字符串的值。
  • 当字符串为“是”时:bytes> 元素的内容<被解释为字符串。
  • 当字符串为 No 时:bytes> 元素的内容<被解释为字节。 每两个字符表示字节的十六进制值。 例如, 616263 是 ANSI 字符串的 abc 表示形式。 包含字符串终止符的 UNICODE 字符串 abc 的完整表示形式为: 6100620063000000

以下示例来自 MigApp.xml 文件:

<object>
   <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
   <attributes>DWORD</attributes>
   <bytes>00000000</bytes>
</object> 

<commandLine>

<commandLine> 元素可用于在运行 ScanStateLoadState 工具之前或之后启动或停止服务或应用程序。

语法:

<commandLine>CommandLineString</commandLine>
设置 是否为必需?
CommandLineString 有效的命令行。

<组件>

自定义 .xml 文件中需要组件>元素。< 此元素定义迁移 .xml 文件的最基本构造。 例如,在 MigApp.xml 文件中,Microsoft Office 2016 是包含另一个组件 Microsoft Office Access 2016的组件。 子元素可用于定义组件。

一个组件可以嵌套在另一个组件内;也就是说,在两种情况下,<组件>元素可以是组件>元素中<角色>元素的子<元素:

  1. 当父 <组件> 元素是容器时
  2. 如果子<组件元素与父组件>元素具有相同的角色。><

语法:

<component type="System|Application|Device|Documents" context="User|System|UserAndSystem" defaultSupported="TRUE|FALSE|YES|NO"
hidden="Yes|No">
</component>
设置 是否为必需?
类型 以下项可用于对设置进行分组,并定义组件的类型。
  • 系统: 操作系统设置。 所有 Windows 组件都由此类型定义。
    type=“System”defaultSupported=“FALSE”时,除非命令行中指定的 LoadState.exe.xml 文件中存在等效组件,否则设置不会迁移。 例如,默认 MigSys.xml 文件包含 type=“System”defaultSupported=“FALSE”的组件。 如果在命令行上 ScanState.exe 指定了此文件,则还必须在命令行上 LoadState.exe 指定该文件,以便迁移设置。 必须指定文件, LoadState.exe 因为该工具必须检测等效的组件。 也就是说,组件必须具有相同 .xml文件的迁移 urlid 和相同的显示名称。 否则, LoadState 工具不会从存储区迁移这些设置。 此设置非常有用,因为存储可用于与源计算机相同或不同版本的 Windows 的目标计算机。
  • 应用: 应用程序的设置。
  • 装置: 设备的设置。
  • 文件: 指定文件。
上下文
默认值 = UserAndSystem
定义此参数的范围;也就是说,是在特定用户的上下文中处理此组件,还是跨整个操作系统处理此组件,还是同时处理这两者。
最大可能的范围由 <组件> 元素设置。 例如,如果 <组件> 元素的上下文为 User ,而 <rules> 元素的上下文为 UserAndSystem,则 <rules> 元素的作用就如同其上下文为 User<如果 rules> 元素的上下文为 System,则其作用就像 rules> 元素不存在一样<
  • 用户:评估每个用户的组件。
  • 系统:仅为系统评估组件一次。
  • UserAndSystem:评估整个操作系统和每个用户的组件。
defaultSupported
(默认值 = TRUE)
可以是 TRUEFALSEYESNO。 如果此参数为 FALSE (或 NO) ,则不会迁移该组件,除非目标计算机上存在等效组件。
type=“System”defaultSupported=“FALSE”时,除非命令行中指定的 LoadState.exe.xml 文件中存在等效组件,否则不会迁移设置。 例如,默认 MigSys.xml 文件包含 type=“System”defaultSupported=“FALSE”的组件。 如果在命令行上 ScanState.exe 指定了此文件,则还必须在命令行上 LoadState.exe 指定该文件,以便迁移设置。 必须在两个命令行中指定该文件,因为 LoadState 工具必须检测等效的组件。 也就是说,组件必须具有相同 .xml 文件的迁移 urlid 和相同的显示名称,否则 LoadState 工具不会从存储区迁移这些设置。 此设置非常有用,因为存储可用于与源计算机相同或不同版本的 Windows 的目标计算机。
隐藏 此参数仅供内部 USMT 使用。

有关示例,请参阅任何默认迁移 .xml 文件。

<条件>

<>尽管仍支持 detect>、objectSet 和 addObjects 元素下的< condition 元素,但 Microsoft 建议不要再使用 <condition> 元素,因为在 USMT 的将来版本中,它可能已弃用。<><> <如果条件>元素已弃用,则需要重写使用<条件>元素的任何脚本。 相反,如果需要在 objectSet> 和 addObjects 元素中使用<某个条件,Microsoft 建议使用功能更强大的 <condition> 元素。>< conditions<> 元素允许编写复杂的布尔语句。

condition<> 元素具有布尔结果。 此元素可用于指定计算父元素的条件。 如果任何现有条件返回 FALSE,则不会计算父元素。

  • 出现次数: 无限制。

  • 父元素:<conditions><detect><objectSet><addObjects>

  • 子元素:

  • 帮助程序函数:以下<条件>函数可用于此元素:DoesOSMatch、、IsNative64Bit()IsOSLaterThan、、DoesFileVersionMatchDoesObjectExistIsFileVersionBelowDoesStringContentEqualIsFileVersionAboveIsOSEarlierThanIsSystemContextDoesStringContentContain、、IsSameObjectIsSameContent和 。IsSameStringContent

语法:

<condition negation="Yes|No">ScriptName</condition>
设置 是否为必需?
否定
默认值 = 否
“是” 将反转条件的 True/False 值。
ScriptName 在此迁移部分中定义的脚本。

例如,在以下代码示例中, <条件> 元素 ABAND 运算符联接在一起,因为它们位于单独的 <条件> 部分:

<detection>
   <conditions>
      <condition>A</condition>
   </conditions>
   <conditions operation="AND">
      <condition>B</condition>
   </conditions>
</detection>

但是,在以下代码示例中 <,条件> 元素 ABOR 运算符联接在一起,因为它们位于同一 <条件> 部分中。

<detection>
   <conditions>
      <condition>A</condition>
      <condition>B</condition>
   </conditions>
</detection>

<条件> 函数

条件<>函数返回布尔值。 这些元素可用于 <addObjects> 条件。

操作系统版本函数

  • DoesOSMatch

    所有匹配项不区分大小写。

    语法: DoesOSMatch("OSType","OSVersion")

    设置 是否为必需?
    OSType 此设置的唯一有效值为 NT。 但是,必须设置此设置才能 <使条件> 函数正常工作。
    OSVersion 主要版本、次要版本、内部版本号和更正的服务磁盘版本(按句点分隔)。 例如,5.0.2600.Service Pack 1。 还可以使用模式(如 5.0.*)指定版本的部分规范。

    例如:

    <condition>MigXmlHelper.DoesOSMatch("NT","\*")</condition>
    
  • IsNative64Bit

    如果迁移进程作为本机 64 位进程运行, 则 IsNative64Bit 函数返回 TRUE ;也就是说,在没有 Windows 的 64 位系统上运行的进程 (WOW) 。 否则,它将返回 FALSE

  • IsOSLaterThan

    所有比较不区分大小写。

    语法: IsOSLaterThan("OSType","OSVersion")

    设置 是否为必需?
    OSType 可以是 9xNT。 如果 OSType 与当前操作系统的类型不匹配,则返回 FALSE。 例如,如果当前操作系统基于 Windows NT,而 OSType“9x”,则结果为 FALSE
    OSVersion 主版本、次要版本、内部版本号和更正的服务磁盘版本(按句点分隔)。 例如,5.0.2600.Service Pack 1。 还可以指定版本的部分规范,但不允许使用模式,例如 5.0

    如果当前操作系统晚于或等于 OSVersion,IsOSLaterThan 函数将返回 TRUE。

    例如:

    <condition negation="Yes">MigXmlHelper.IsOSLaterThan("NT","6.0")</condition>
    
  • IsOSEarlierThan

    所有比较不区分大小写。

    语法: IsOSEarlierThan("OSType","OSVersion")

    设置 是否为必需?
    OSType 可以是 9xNT。 如果 OSType 与当前操作系统的类型不匹配,则返回 FALSE。 例如,如果当前操作系统基于Windows NT,而 OSType“9x”,则结果为 FALSE
    OSVersion 主版本、次要版本、内部版本号和更正的服务磁盘版本(按句点分隔)。 例如,5.0.2600.Service Pack 1。 还可以指定版本的部分规范,但不允许使用模式,例如 5.0

    如果当前操作系统早于 OSVersion,IsOSEarlierThan 函数返回 TRUE。

对象内容函数

  • DoesObjectExist

    如果存在任何与位置模式匹配的对象,则 DoesObjectExist 函数返回 TRUE 。 否则,它将返回 FALSE。 在尝试枚举之前,将扩展位置模式。

    语法: DoesObjectExist("ObjectType","EncodedLocationPattern")

    设置 是否为必需?
    ObjectType 定义对象类型。 可以是“文件”或“注册表”。
    EncodedLocationPattern 位置模式。 允许使用环境变量。

    有关此元素的示例,请参阅 MigApp.xml 文件。

  • DoesFileVersionMatch

    模式检查不区分大小写。

    语法: DoesFileVersionMatch("EncodedFileLocation","VersionTag","VersionValue")

    设置 是否为必需?
    EncodedFileLocation 所检查文件 的位置模式 。 允许使用环境变量。
    VersionTag 检查 的版本标记 值。
    VersionValue 字符串模式。 例如,“Microsoft*”。

    例如:

    <condition>MigXmlHelper.DoesFileVersionMatch("%MSNMessengerInstPath%\\msnmsgr.exe","ProductVersion","6.\*")</condition>   <condition>MigXmlHelper.DoesFileVersionMatch("%MSNMessengerInstPath%\\msnmsgr.exe","ProductVersion","7.\*")</condition>
    
  • IsFileVersionAbove

    如果文件的版本高于 VersionValue,IsFileVersionAbove 函数返回 TRUE。

    语法: IsFileVersionAbove("EncodedFileLocation","VersionTag","VersionValue")

    设置 是否为必需?
    EncodedFileLocation 所检查文件 的位置模式 。 允许使用环境变量。
    VersionTag 检查 的版本标记 值。
    VersionValue 要比较的值。 无法指定模式。
  • IsFileVersionBelow

    语法: IsFileVersionBelow("EncodedFileLocation","VersionTag","VersionValue")

    设置 是否为必需?
    EncodedFileLocation 所检查文件 的位置模式 。 允许使用环境变量。
    VersionTag 检查 的版本标记 值。
    VersionValue 要比较的值。 无法指定模式。
  • IsSystemContext

    如果当前上下文为“System”IsSystemContext 函数将返回 TRUE。 否则,它将返回 FALSE

    语法: IsSystemContext()

  • DoesStringContentEqual

    如果给定对象的字符串表示形式与 相同StringContent则 DoesStringContentEqual 函数返回 TRUE

    语法: DoesStringContentEqual("ObjectType","EncodedLocation","StringContent")

    设置 是否为必需?
    ObjectType 定义 对象的类型。 可以是“文件”或“注册表”。
    EncodedLocationPattern 所检查对象的 编码位置 。 可以指定环境变量。
    StringContent 针对检查的字符串。

    例如:

    <condition negation="Yes">MigXmlHelper.DoesStringContentEqual("File","%USERNAME%","")</condition>
    
  • DoesStringContentContain

    如果对象的字符串表示形式中至少有一个 StrToFind 出现,则 DoesStringContentContain 函数返回 TRUE

    语法: DoesStringContentContain("ObjectType","EncodedLocation","StrToFind")

    设置 是否为必需?
    ObjectType 定义 对象的类型。 可以是“文件”或“注册表”。
    EncodedLocationPattern 所检查对象的 编码位置 。 可以指定环境变量。
    StrToFind 在给定对象的内容内搜索的字符串。
  • IsSameObject

    如果给定的编码位置解析为同一个物理对象, IsSameObject 函数将返回 TRUE 。 否则,它将返回 FALSE

    语法: IsSameObject("ObjectType","EncodedLocation1","EncodedLocation2")

    设置 是否为必需?
    ObjectType 定义 对象的类型。 可以是“文件”或“注册表”。
    EncodedLocation1 第一个对象的 编码位置 。 可以指定环境变量。
    EncodedLocation2 第二个对象的 编码位置 。 可以指定环境变量。

    例如:

    <objectSet>
       <condition negation="Yes">MigXmlHelper.IsSameObject("File","%CSIDL_FAVORITES%","%CSIDL_COMMON_FAVORITES%")</condition>
       <pattern type="File">%CSIDL_FAVORITES%\* [*]</pattern>
    </objectSet>
    
  • IsSameContent

    如果给定对象具有相同的内容, IsSameContent 函数将返回 TRUE 。 否则,它将返回 FALSE。 内容按字节比较。

    语法: IsSameContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")

    设置 是否为必需?
    ObjectType1 定义第一个对象的类型。 可以是“文件”或“注册表”。
    EncodedLocation1 第一个对象的 编码位置 。 可以指定环境变量。
    ObjectType2 定义第二个对象的类型。 可以是“文件”或“注册表”。
    EncodedLocation2 第二个对象的 编码位置 。 可以指定环境变量。
  • IsSameStringContent

    如果给定对象具有相同的内容, IsSameStringContent 函数将返回 TRUE 。 否则,它将返回 FALSE。 内容被解释为字符串。

    语法: IsSameStringContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")

    设置 是否为必需?
    ObjectType1 定义第一个对象的类型。 可以是“文件”或“注册表”。
    EncodedLocation1 第一个对象的 编码位置 。 可以指定环境变量。
    ObjectType2 定义第二个对象的类型。 可以是“文件”或“注册表”。
    EncodedLocation2 第二个对象的 编码位置 。 可以指定环境变量。

<条件>

conditions<> 元素返回一个布尔结果,该结果用于指定计算父元素的条件。 USMT 计算子元素,然后根据操作参数使用 运算符 ANDOR 联接其结果。

语法:

<conditions operation="AND|OR">
</conditions>
设置 是否为必需?
操作 否,默认值 = AND 定义对从子元素获取的结果执行的布尔运算。

以下示例来自 MigApp.xml 文件:

<environment name="GlobalEnv">
   <conditions>
      <condition negation="Yes">MigXmlHelper.IsNative64Bit()</condition>
   </conditions>
   <variable name="HklmWowSoftware">
   <text>HKLM\Software</text>
   </variable>
</environment>

<内容>

content<> 元素可用于指定对象模式列表,以便从源计算机获取对象集。 计算内容>元素中的每个<<objectSet>。 对于每个生成的对象模式列表,将枚举与它匹配的对象,并按筛选器参数筛选其内容。 生成的字符串数组是内容>元素的<输出。 筛选器脚本返回位置数组。 父 <objectSet> 元素可以包含多个子 <内容> 元素。

  • 出现次数: 无限制

  • 父元素:<objectSet>

  • 子元素:<objectSet>

  • 帮助程序函数:以下内容<>函数可用于此元素:ExtractSingleFileExtractMultipleFilesExtractDirectory

语法:

<content filter="ScriptInvocation">
</content>
设置 是否为必需?
filter 一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2")
对于包含>规则中的<对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。

<内容> 函数

以下函数从对象的内容生成模式。 对于父 <ObjectSet> 元素枚举的每个对象,都会调用这些函数。

  • ExtractSingleFile

    如果注册表值为 MULTI-SZ,则仅处理第一个段。 返回的模式是系统上必须存在的文件的编码位置。 如果注册表值中的规范正确,但文件不存在,则此函数返回 NULL

    语法: ExtractSingleFile(Separators,PathHints)

    设置 是否为必需?
    分隔符 可能遵循此注册表值名称中的文件规范的分隔符列表。 例如,如果内容为 “C:\Windows\Notepad.exe,-2”,则分隔符为逗号。 可以指定 NULL
    PathHints 用冒号分隔的额外路径列表, (;) ,函数在其中查找与当前内容匹配的文件。 例如,如果内容为“Notepad.exe”且路径为 %Path% 环境变量,则函数在 中%windir%查找 Notepad.exe 并返回“c:\Windows [Notepad.exe]”。 可以指定 NULL

    例如:

    <content filter="MigXmlHelper.ExtractSingleFile(',','%system%')">
    

    and

    <content filter="MigXmlHelper.ExtractSingleFile(NULL,'%CSIDL_COMMON_FONTS%')">
    
  • ExtractMultipleFiles

    ExtractMultipleFiles 函数返回多个模式,对于在给定注册表值的内容中找到的每个文件,一个模式。 如果注册表值为 MULTI-SZ,则默认情况下 ,MULTI-SZ 分隔符被视为分隔符。 因此,对于 MULTI-SZ<分隔符> 参数必须为 NULL

    返回的模式是源计算机上必须存在的文件的编码位置。 如果注册表值中的规范正确,但文件不存在,则结果列表中不会包含该文件。

    语法: ExtractMultipleFiles(Separators,PathHints)

    设置 是否为必需?
    分隔符 可能遵循此注册表值名称中的文件规范的分隔符列表。 例如,如果内容为 “C:\Windows\Notepad.exe,-2”,则分隔符为逗号。 处理 MULTI-SZ 注册表值时,此参数必须为 NULL。
    PathHints 用冒号分隔的额外路径列表, (;) ,函数在其中查找与当前内容匹配的文件。 例如,如果内容为“Notepad.exe”且路径为 %Path% 环境变量,则函数在 中%windir%查找 Notepad.exe 并返回“c:\Windows [Notepad.exe]”。 可以指定 NULL
  • ExtractDirectory

    ExtractDirectory 函数返回一个模式,该模式是源计算机上必须存在的目录的编码位置。 如果注册表值中的规范正确,但目录不存在,则此函数返回 NULL。 如果它正在处理注册表值(即 MULTI-SZ),则仅处理第一个段。

    语法: ExtractDirectory(Separators,LevelsToTrim,PatternSuffix)

    设置 是否为必需?
    分隔符 可能遵循此注册表值名称中的文件规范的分隔符列表。 例如,如果内容为 “C:\Windows\Notepad.exe,-2”,则分隔符为逗号。 处理 MULTI-SZ 注册表值时必须指定 NULL
    LevelsToTrim 要从目录规范末尾删除的级别数。 当某个注册表值指向已知位置的根目录内时,使用此函数提取根目录。
    PatternSuffix 要添加到目录规范的模式。 例如,* [*]

    例如:

    <objectSet>
       <content filter='MigXmlHelper.ExtractDirectory (NULL, "1")'>
            <objectSet>
                 <pattern type="Registry">%HklmWowSoftware%\Classes\Software\RealNetworks\Preferences\DT_Common []</pattern>
            </objectSet>
       </content>
    </objectSet>
    

<contentModify>

contentModify<> 元素在对象写入目标计算机之前修改对象的内容。 对于每个 <contentModify> 元素,可以有多个 <objectSet> 元素。 此元素返回正在处理的对象的新内容。

  • 出现次数: 无限

  • 父元素:<rules>

  • 必需的子元素:<objectSet>

  • 帮助程序函数:以下 <contentModify> 函数 可用于此元素: ConvertToDWORDConvertToStringConvertToBinaryKeepExistingOffsetValueSetValueByTableMergeMultiSzContentMergeDelimitedContent

语法:

<contentModify script="ScriptInvocation">
</contentModify>
设置 是否为必需?
脚本 一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2").

对于包含规则中的对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。

<contentModify> 函数

以下函数在迁移对象时更改对象的内容。 对于父 <ObjectSet> 元素枚举的每个对象,都会调用这些函数。

  • ConvertToDWORD

    ConvertToDWORD 函数将父 <ObjectSet> 元素枚举的注册表值的内容转换为 DWORD。 例如, ConvertToDWORD 将字符串 "1" 转换为 DWORD 0x00000001。 如果转换失败,则应用 DefaultValueOnError 的值。

    语法: ConvertToDWORD(DefaultValueOnError)

    设置 是否为必需?
    DefaultValueOnError 如果转换失败,则写入值名称的值。 可以指定 NULL0如果转换失败,则写入 NULL。
  • ConvertToString

    ConvertToString 函数将与父 <ObjectSet> 元素匹配的注册表值的内容转换为字符串。 例如,它将 DWORD 0x00000001 转换为字符串“1”。 如果转换失败,则应用 DefaultValueOnError 的值。

    语法: ConvertToString(DefaultValueOnError)

    设置 是否为必需?
    DefaultValueOnError 如果转换失败,则写入值名称的值。 可以指定 NULL0如果转换失败,则写入 NULL。

    例如:

    <contentModify script="MigXmlHelper.ConvertToString('1')">
       <objectSet>
            <pattern type="Registry">HKCU\Control Panel\Desktop [ScreenSaveUsePassword]</pattern>
       </objectSet>
    </contentModify>
    
  • ConvertToBinary

    ConvertToBinary 函数将与父 <ObjectSet> 元素匹配的注册表值的内容转换为二进制类型。

    语法: ConvertToBinary ()

  • OffsetValue

    OffsetValue 函数从迁移对象的值中添加或减去 Value,然后将结果写回到目标计算机上的注册表值。 例如,如果迁移的对象是值为 的 14DWORD,而 Value“-2”,则注册表值将 12 位于目标计算机上。

    语法: OffsetValue(Value)

    设置 是否为必需?
    数值的字符串表示形式。 它可以是正数,也可以是负数。 例如,OffsetValue(2)
  • SetValueByTable

    SetValueByTable 函数将源计算机中的值与源表匹配。 如果存在该值,则会应用目标表中的等效值。 如果该值不存在,或者目标表没有等效值,则应用 DefaultValueOnError

    语法: SetValueByTable(SourceTable,DestinationTable,DefaultValueOnError)

    设置 是否为必需?
    SourceTable 用逗号分隔的值列表,这些值可用于源注册表值。
    DestinationTable 用逗号分隔的已翻译值的列表。
    DefaultValueOnError 应用于目标计算机(如果任一)的值
    1. 源计算机的值与 SourceTable 不匹配
    2. DestinationTable 没有等效值。

    如果 DefaultValueOnErrorNULL,则该值不会在目标计算机上更改。
  • KeepExisting

    当目标计算机上存在冲突时,可以使用 KeepExisting 函数。 此函数使 (不会覆盖) 目标计算机上的 对象的指定属性。

    语法: KeepExisting("OptionString","OptionString","OptionString",…)

    设置 是否为必需?
    OptionString OptionString 可以是 SecurityTimeFieldsFileAttribLetter。 可以指定每种类型的 OptionString 之 一。 不要指定具有相同值的多个 OptionString 。 如果指定了多个具有相同值的 OptionString ,则保留该类型的最右侧选项。 例如,不要指定 (“FileAttrib:H”、“FileAttrib:R”) ,因为只计算只读。 请改为指定 (“FileAttrib:HR”) ,并且隐藏属性和只读属性都保留在目标计算机上。
    • 安全性:保留目标对象的安全描述符(如果存在)。
    • TimeFields:保留目标对象的时间戳。 此参数仅适用于文件。
    • FileAttrib:<字母>:保留指定文件属性集的目标对象的属性值 (ONOFF)。 此参数仅适用于文件。 以下项不区分大小写,但 USMT 将忽略任何无效、重复的值,或者 FileAttrib:后面是否有空格。 可以指定以下属性的任意组合:
      • A = 存档
      • C = 压缩
      • E = Encrypted
      • H = 隐藏
      • I = 未为内容编制索引
      • O = 脱机
      • R = Read-Only
      • S = 系统
      • T = 临时
  • MergeMultiSzContent

    MergeMultiSzContent 函数将父 <ObjectSet> 元素枚举的注册表值的 MULTI-SZ 内容与目标计算机上已存在的等效注册表值的内容合并。 Instruction ,然后 String 删除或将内容添加到生成的 MULTI-SZ。 删除重复的元素。

    语法: MergeMultiSzContent (Instruction,String,Instruction,String,…)

    设置 是否为必需?
    教学 可以是以下值之一:
    • 添加。 将相应的 String 添加到生成的 MULTI-SZ(如果不存在)。
    • 删除。 从生成的 MULTI-SZ 中删除相应的 String。
    字符串 要添加或删除的字符串。
  • MergeDelimitedContent

    MergeDelimitedContent 函数将父 <ObjectSet> 元素枚举的注册表值的内容与目标计算机上已存在的等效注册表值的内容合并。 内容被视为由 Delimiters 参数中的一个字符分隔的元素列表。 删除重复的元素。

    语法: MergeDelimitedContent(Delimiters,Instruction,String,…)

    设置 是否为必需?
    分隔符 一个字符,用于分隔正在处理的对象的内容。 内容被视为由 分隔符分隔的元素列表。
    例如, "." 根据句点分隔字符串。
    教学 可以是以下值之一:
    • 添加:将 字符串 添加到生成的 MULTI-SZ(如果不存在)。
    • 删除:从生成的 MULTI-SZ 中删除 String
    字符串 要添加或删除的字符串。

<描述>

description<> 元素定义组件的说明,但不会影响迁移。

  • 出现次数: 零个或一个

  • 父元素:<component>

  • 子元素:

语法:

<description>ComponentDescription</description>
设置 是否为必需?
ComponentDescription 组件的说明。

以下代码示例演示 description> 元素如何<定义“我的自定义组件”说明:

<description>My custom component<description>

<destinationCleanup>

在从源计算机应用对象之前,destinationCleanup> 元素从目标计算机中删除对象(如文件和注册表项)。< 仅当 LoadState 工具在目标计算机上运行时,才会计算此元素。 也就是说, ScanState 工具会忽略此元素。

重要提示

使用此选项时应格外小心,因为它会从目标计算机中删除对象。

对于每个 <destinationCleanup> 元素,可以 <有多个 objectSet> 元素。 如果源计算机上缺少注册表项,但仍需要迁移组件,则此元素的常见用途是。 在这种情况下,可以在迁移源注册表项之前删除组件的所有注册表项。 删除组件的所有注册表项可确保如果源计算机上缺少密钥,目标计算机上也会丢失该密钥。

  • 出现次数: 无限

  • 父元素:<rules>

  • 子元素:<objectSet> (目标计算机删除所有子元素。)

语法:

<destinationCleanup filter=ScriptInvocation>
</destinationCleanup>
设置 是否为必需?
filter 一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2")

对于包含规则中的对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。

例如:

<destinationCleanup>
   <objectSet>
      <pattern type="Registry">HKCU\Software\Lotus\123\99.0\DDE Preferences\* [*]</pattern>
      <pattern type="Registry">HKCU\Software\Lotus\123\99.0\Find Preferences\* [*]</pattern>
   </objectSet>
</destinationCleanup>

<检测>

<尽管 detect> 元素仍受支持,但 Microsoft 建议不要再使用 <detect> 元素,因为将来的 USMT 版本中可能会弃用检测元素。 <如果 detect> 元素已弃用,则需要重写使用 <detect> 元素的任何脚本。 相反,Microsoft 建议使用 <检测> 元素。 检测<>元素允许更清晰地表述复杂的布尔语句

detect<> 元素可用于确定系统上是否存在组件。 如果 detect 元素中的所有<><detect> 元素解析为 TRUE,则 <detect> 元素将解析为 TRUE。 如果任何子 <检测> 元素解析为 FALSE,则其父 <检测> 元素解析为 FALSE。 如果没有 <detect> 元素部分,则 USMT 假定组件存在。

对于每个 <detect> 元素,可以有多个子 <条件><objectSet> 元素,这些元素在逻辑上由 OR 运算符联接。 如果至少有一个 <条件><objectSet> 元素的计算结果为 TRUE,则 <detect> 元素的计算结果为 TRUE

语法:

<detect name="ID" context="User|System|UserAndSystem">
</detect>
设置 是否为必需?
name 是,当 detect> 是 namedElements 的子级时<<>
否,当 detect> 是要检测的子级时<<>
指定 ID 后,不会处理任何子元素。 相反,将处理在 namedElements> 元素中<声明具有相同名称的任何其他<检测>元素。
上下文
(默认值 = UserAndSystem)
定义此参数的范围,即是在特定用户的上下文中、跨整个操作系统处理此组件,还是同时处理这两者。
最大可能的范围由组件元素设置。 例如,如果组件<>元素的上下文为 User,而 <rules> 元素的上下文为 UserAndSystem,则 <rules> 元素将如同具有 User 上下文一样运行。 <如果 rules> 元素具有 System 的上下文,则其行为就像 <rules> 元素不存在一样。
  • 用户:评估每个用户的变量。
  • 系统:仅为系统评估一次变量。
  • UserAndSystem:评估整个操作系统和每个用户的变量。

有关示例,请参阅检测<>示例。

<检测>

<尽管 detects> 元素仍受支持,但 Microsoft 建议不要再使用 <detects> 元素,因为它可能在 USMT 的将来版本中弃用。 <如果 detects> 元素已弃用,则需要重写使用 <detects> 元素的任何脚本。 相反,如果父元素是 <role><namedElements,Microsoft> 建议使用<检测>元素;如果父元素是<规则>,则使用 <conditions> 元素。 检测<>元素允许更清晰地表述复杂的布尔语句,而< conditions> 元素允许表述复杂的布尔语句。

detects<> 元素是一个或多个 <detect> 元素的容器。 如果 内的所有子<检测>元素<都>检测元素解析为 TRUE,则<检测>解析为 TRUE。 如果任何子 <检测> 元素解析为 FALSE,则 <检测> 解析为 FALSE。 若要防止 <detects> 元素写入组件内,请在 namedElements> 元素下<创建 <detects> 元素,然后引用它。 <如果没有 detects> 元素部分,则 USMT 假定组件存在。 每个 <detects> 元素的结果由 OR 运算符联接在一起,形成用于检测父元素的规则。

语法:

<detects name="ID" context="User|System|UserAndSystem">
</detects>
设置 是否为必需?
name 是,当 detects> 是 namedElements 的>子级<时<
否,当 detects> 是角色>或规则的子<级时<<>
指定 ID 时,不会处理子 <检测> 元素。 相反,将处理在 namedElements> 元素中<声明具有相同名称的任何其他<>元素。
上下文
(默认值 = UserAndSystem)
定义此参数的范围:是在特定用户的上下文中处理此组件,还是跨整个操作系统处理,还是同时处理这两者。
最大可能的范围由 <组件元素>设置。 例如,如果 <组件> 元素的上下文为 User ,而 <rules> 元素的上下文为 UserAndSystem,则 <rules> 元素的作用就如同其上下文为 User<如果 rules> 元素具有 System 的上下文,则其行为就像 <rules> 元素不存在一样。
  • 用户:评估每个用户的变量。
  • 系统:仅为系统评估一次变量。
  • UserAndSystem:评估整个操作系统和每个用户的变量。

对于<检测>规则>元素内的<元素,将忽略上下文参数。

以下示例来自 MigApp.xml 文件。

<detects>
   <detect>
      <condition>MigXmlHelper.DoesFileVersionMatch("%Lotus123InstPath%\123w.exe","ProductVersion","9.*")</condition>
   </detect>
   <detect>
      <condition>MigXmlHelper.DoesFileVersionMatch("%SmartSuiteInstPath%\smartctr.exe","ProductVersion","99.*")</condition>
   </detect>
</detects>

<检测>

检测<>元素是一个条件>元素的<容器。 子条件>元素的结果<(位于 condition> 元素下方)<决定了此元素的结果。 例如,如果检测>元素中的所有<<条件>元素解析为 TRUE,则<检测>元素解析为 TRUE。 如果任何子 <条件> 元素解析为 FALSE,则 <检测> 元素将解析为 FALSE

此外,角色>元素中<每个<检测>节的结果由 OR 运算符联接在一起,形成父元素的检测规则。 也就是说,如果其中 <一个检测> 部分解析为 TRUE,则 <处理角色> 元素。 否则, <不会处理角色> 元素。

使用 namedElements> 元素下的<检测>元素不能在组件内写入。< 然后在角色>元素下包括匹配<<的检测>部分,以控制是否迁移组件。 如果组件没有 <检测> 节,则 USMT 假定该组件存在。

语法:

<detection name="ID" context="User|System|UserAndSystem">
</detection>
设置 是否为必需?
name
  • 是,在 namedElements> 下<声明检测>时<
  • 可选,在角色>下<声明时
如果已声明,则忽略检测>元素的内容<,并计算与 namedElements> 元素中声明的相同名称的<检测>元素的内容<
上下文 否,默认值 = UserAndSystem 定义此参数的范围:是在特定用户的上下文中处理此组件,还是跨整个操作系统处理,还是同时处理这两者。
  • 用户:评估每个用户的组件。
  • 系统:仅为系统评估组件一次。
  • UserAndSystem:评估整个操作系统和每个用户的组件。

例如:

<detection name="AdobePhotoshopCS">
   <conditions>
      <condition>MigXmlHelper.DoesObjectExist("Registry","HKCU\Software\Adobe\Photoshop\8.0")</condition>
      <condition>MigXmlHelper.DoesFileVersionMatch("%PhotoshopSuite8Path%\Photoshop.exe","FileVersion","8.*")</condition>
   </conditions>
</detection>

and

<role role="Settings">
   <detection>
      <conditions>
         <condition>MigXmlHelper.DoesFileVersionMatch("%QuickTime5Exe%","ProductVersion","QuickTime 5.*")</condition>
         <condition>MigXmlHelper.DoesFileVersionMatch("%QuickTime5Exe%","ProductVersion","QuickTime 6.*")</condition>
      </conditions>
   </detection>

<displayName>

<displayName> 元素是每个<组件>元素中的必填字段。

  • 出现次数: 每个组件一次

  • 父元素:<component>

  • 子元素:

语法:

<displayName _locID="ID">ComponentName</displayName>
设置 是否为必需?
locID 此参数供内部 USMT 使用。 请勿使用此参数。
ComponentName 组件的名称。

例如:

<displayName>Command Prompt settings</displayName>

<环境>

environment<> 元素是变量>元素的<容器,可在其中定义变量以在 .xml 文件中使用。 以这种方式定义的所有环境变量都是私有的。 也就是说,它们仅适用于其子组件和定义它们的组件。 有关两个示例方案,请参阅 示例

语法:

<environment name="ID" context="User|System|UserAndSystem">
</environment>
设置 是否为必需?
name 是,当环境>是 namedElements 的子级时<<>
否,当环境>是角色或组件的子级时<><<>
声明为角色>或组件元素的<子元素时,如果声明了 ID,则 USMT 将忽略环境>元素的内容<,并且处理在 namedElements> 元素中声明具有相同名称的环境<>元素的内容<<>
上下文
(默认值 = UserAndSystem)
定义此参数的范围:是在特定用户的上下文中处理此组件,还是跨整个操作系统处理,还是同时处理这两者。
最大可能的范围由 <组件> 元素设置。 例如,如果 <组件> 元素的上下文为 User ,而 <rules> 元素的上下文为 UserAndSystem,则 <rules> 元素的作用就如同其上下文为 User<如果 rules> 元素具有 System 的上下文,则其行为就像<规则>不存在一样。
  • 用户:评估每个用户的变量。
  • 系统:仅为系统评估一次变量。
  • UserAndSystem:评估整个操作系统和每个用户的变量。

示例

示例方案 1

在此方案中,根据目标计算机的配置,在运行时生成对象的位置。 例如,如果应用程序在安装应用程序的目录中写入数据,并且用户可以在计算机上的任意位置安装该应用程序。 如果应用程序写入注册表值 hklm\software\companyname\install [path\] ,然后使用应用程序安装的位置更新此值,则正确迁移所需数据的唯一方法是定义环境变量。 例如:

<environment>
   <variable name="INSTALLPATH">
      <script>MigXmlHelper.GetStringContent("Registry","\software\companyname\install [path]")</script>
   </variable>
</environment>

然后,可以使用包含规则,如下所示。 <任何脚本>函数都可用于执行类似的任务。

<include>
   <objectSet>
      <pattern type="File">%INSTALLPATH%\ [*.xyz]</pattern>
   </objectSet>
</include>

其次,可以筛选注册表值以包含所需的数据。 以下示例提取注册表 Hklm\software\companyname\application\ [Path\]值中分隔符“”,) 之前的第一个字符串 (。

<environment>
   <variable name="APPPATH">
        <objectSet>
           <content filter='MigXmlHelper.ExtractDirectory (",", "1")'>
             <objectSet>
                <pattern type="Registry">Hklm\software\companyname\application\ [Path]</pattern>
              </objectSet>
            </content>
        </objectSet>
    </variable>
</environment>

示例方案 2

在此方案中,需要从 %SYSTEMDRIVE%\data\userdata\dir1\dir2\迁移名为 File1.txtFile2.txt等的五个文件。 若要迁移这些文件,以下 <包含> 规则必须位于 .xml 文件中:

<include>
   <objectSet>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File1.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File2.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File3.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File4.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File5.txt]</pattern>
   </objectSet>
</include>

无需键入路径五次,而是为位置创建一个变量,如下所示:

<environment>
   <variable name="DATAPATH">
      <text>%SYSTEMDRIVE%\data\userdata\dir1\dir2 </text>
      </variable>
</environment>

然后,在包含>规则中<指定变量,如下所示:

<include>
   <objectSet>
      <pattern type="File">%DATAPATH% [File1.txt]</pattern>
      <pattern type="File">%DATAPATH% [File2.txt]</pattern>
      <pattern type="File">%DATAPATH% [File3.txt]</pattern>
      <pattern type="File">%DATAPATH% [File4.txt]</pattern>
      <pattern type="File">%DATAPATH% [File5.txt]</pattern>
   </objectSet>
</include>

<排除>

exclude<> 元素确定未迁移的对象,除非有更具体的 <include> 元素来迁移对象。 如果同一对象 <有 include><exclude> 元素,则包含对象。 对于每个 <exclude> 元素,可以有多个子 <objectSet> 元素。

  • 出现次数: 无限

  • 父元素:<rules>

  • 子元素:<objectSet>

  • 帮助程序函数:以下<排除>筛选器函数可用于此元素:CompareStringContent、、IgnoreIrrelevantLinksAnswerNoNeverRestoreSameRegContent

语法:

<exclude filter="ScriptInvocation">
</exclude>
设置 是否为必需?
filter
(默认值 = 无)
一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2")

对于包含规则中的对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。

例如,在 MigUser.xml 文件中:

<exclude>
   <objectSet>
      <pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
      <pattern type="File">%CSIDL_MYPICTURES%\* [*]</pattern>
      <pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
   </objectSet>
</exclude>

<excludeAttributes>

excludeAttributes<> 元素可用于确定未迁移与对象关联的参数。 如果 includeAttributes 和 excludeAttributes> 元素之间存在<冲突,则最具体的模式将确定未迁移的模式。>< 如果对象没有 <includeAttributes><excludeAttributes> 元素,则迁移其所有参数。

语法:

<excludeAttributes attributes="Security|TimeFields|Security,TimeFields">
</excludeAttributes>
设置 是否为必需?
属性 指定要排除的属性。 可以指定以下任一项或两者。 如果同时指定两者,则需要用引号分隔它们。 例如, "Security","TimeFields"
  • 安全性可以是所有者、组、DACL 或 SACL 之一。
  • TimeFields 可以是 CreationTime、LastAccessTime 和 LastWrittenTime 之一

示例:

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/miguser">
<!-- This component migrates the files in the Video folder -->
   <component type="System" context="System">
      <displayName>System Data</displayName>
         <role role="Data">
            <rules>
<!-- Include all of the text files, which are immediately in the drive where the operating system is installed -->
               <include>
                  <objectSet>
                     <pattern type="File">%SYSTEMDRIVE%\ [*.txt]</pattern>
                  </objectSet>
               </include>
<!-- Exclude the time stamps from the text file starting with the letter a -->
               <excludeAttributes attributes="TimeFields">
                  <objectSet>
                     <pattern type="File">%SYSTEMDRIVE%\ [a*.txt]</pattern>
                  </objectSet>
               </excludeAttributes>
<!-- include the time stamps from the text file aa.txt -->
               <includeAttributes attributes="TimeFields">
                  <objectSet>
                     <pattern type="File">%SYSTEMDRIVE%\ [aa.txt]</pattern>
                  </objectSet>
               </includeAttributes>
<!-- Logoff the user after LoadState successfully completed. -->
               <externalProcess when="post-apply">
                  <commandLine>
                     logoff
                  </commandLine>
               </externalProcess>
         </rules>
   </role>
<!-- Migrate 
   all doc files from the system
   all power point files
   all visio design files 
   all my c++ program files -->
   <extensions>
      <extension>DOC</extension>
      <extension>PPT</extension>
      <extension>VXD</extension>
      <extension>PST</extension>
      <extension>CPP</extension>
   </extensions>
</component>
</migration>

<扩展>

extensions <> 元素是一个或多个<扩展>元素的容器。

语法:

<extensions>
</extensions>

<扩展>

扩展<>元素可用于指定特定扩展的文档。

  • 出现次数: 无限制

  • 父元素:<extensions>

  • 子元素:

语法:

<extension>FilenameExtension</extension>
设置 是否为必需?
FilenameExtension 文件扩展名。

例如,若要从源计算机迁移所有 *.doc 文件,请在 组件>元素下<指定以下代码:

<extensions> 
        <extension>doc</extension> 
<extensions> 

与在 rules> 元素下<指定以下代码相同:

<include> 
        <objectSet> 
                <script>MigXmlHelper.GenerateDrivePatterns ("* [*.doc]", "Fixed")</script> 
        </objectSet> 
</include>

有关如何使用<扩展>元素的另一个示例,请参阅 excludeAttributes> 的示例<

<externalProcess>

externalProcess <> 元素可用于在迁移过程中运行命令行。 例如,运行命令可能需要在 LoadState 进程完成后运行。

语法:

<externalProcess when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">
</externalProcess>
设置 是否为必需?
指示何时应运行命令行。 此值可以是以下值之一:
  • 在扫描过程开始前进行预扫描。
  • 扫描 过程成功完成后扫描成功。
  • 扫描过程完成后的扫描后,无论是否成功。
  • 在应用 过程开始之前预先应用。
  • 应用过程成功完成后,apply-success
  • 应用过程完成后的 post-apply,无论是否成功。

有关如何使用 <externalProcess> 元素的示例,请参阅 excludeAttributes> 的示例<

<图标>

此元素是内部 USMT 元素。 请勿使用此元素。

<include>

<include> 元素确定要迁移的内容,除非有更具体的<排除>规则。 可以将脚本指定为更具体,以扩展需要收集的内容的定义。 对于每个 <include> 元素,可以有多个 <objectSet> 元素。

  • 出现次数: 无限

  • 父元素:<rules>

  • 必需的子元素:<objectSet>

  • 帮助程序函数: 以下 <包括> 筛选器函数 可用于此元素: CompareStringContentIgnoreIrrelevantLinksAnswerNoNeverRestore

语法:

<include filter="ScriptInvocation">
</include>
设置 是否为必需?
filter 否。
如果未指定此参数,则会处理子 <objectSet> 元素内的所有模式。
一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2")
对于包含>规则中的<对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。

以下示例来自 MigUser.xml 文件:

<component type="Documents" context="User">
   <displayName _locID="miguser.myvideo">My Video</displayName>
      <paths>
         <path type="File">%CSIDL_MYVIDEO%</path>
      </paths>
      <role role="Data">
         <detects>           
            <detect>
               <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYVIDEO%")</condition>
            </detect>
         </detects>
         <rules>
               <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
                  <objectSet>
                     <pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
                  </objectSet>
               </include>
               <merge script="MigXmlHelper.DestinationPriority()">
                  <objectSet>
                     <pattern type="File">%CSIDL_MYVIDEO% [desktop.ini]</pattern>
                  </objectSet>
            </merge>
         </rules>
      </role>
    </component>

<包含> 和 <排除> 筛选器函数

以下函数返回布尔值。 它们可用于根据满足特定条件迁移某些对象。

  • AnswerNo

    此筛选器始终返回 FALSE

    语法: AnswerNo ()

  • CompareStringContent

    语法: CompareStringContent("StringContent","CompareType")

    设置 是否为必需?
    StringContent 要对其检查的字符串。
    CompareType 字符串。 使用以下值之一:
    • 相等 (不区分大小写) 。 如果迁移引擎处理的当前对象的字符串表示形式与 相同StringContent,则函数返回 TRUE
    • NULL或任何其他值。 如果迁移引擎处理的当前对象的字符串表示形式与 StringContent不匹配,则函数返回 TRUE
  • IgnoreIrrelevantLinks

    此筛选器筛选出指向目标计算机上无效对象的 .lnk 文件。 筛选在目标计算机上进行,因此在 ScanState 期间,所有.lnk文件都保存到存储中。 然后在 LoadState 工具运行时筛选掉它们。

    语法: IgnoreIrrelevantLinks ()

    例如:

    <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
              <pattern type="File">%CSIDL_COMMON_VIDEO%\* [*]</pattern>
         </objectSet>
    </include>
    
  • NeverRestore

    此函数可用于从源计算机收集指定的对象,但随后不能将对象迁移到目标计算机。 使用 ScanState 工具运行时,此函数的计算结果为 TRUE。 使用 LoadState 工具运行时,此函数的计算结果为 FALSE。 此函数可用于在目标计算机上检查对象的值,但无意将对象迁移到目标。

    语法: NeverRestore()

    在以下示例中,HKCU\控制面板\International [Locale] 包含在应用商店中,但它不会迁移到目标计算机:

    <include filter="MigXmlHelper.NeverRestore()">
       <objectSet>
          <pattern type="Registry">HKCU\Control Panel\International [Locale]</pattern>
       </objectSet>
    </include>
    

<includeAttributes>

<includeAttributes> 元素可用于确定是否与对象本身一起迁移与对象关联的某些参数。 如果 includeAttributes 和 excludeAttributes> 元素之间存在<冲突,则最具体的模式将确定要迁移的参数。>< 如果对象没有 <includeAttributes><excludeAttributes> 元素,则迁移其所有参数。

语法:

<includeAttributes attributes="Security|TimeFields|Security,TimeFields">
</includeAttributes>
设置 是否为必需?
属性 指定要随已迁移对象一起包含的属性。 可以指定以下任一项或两者。 如果同时指定两者,则需要用引号分隔它们。 例如, "Security","TimeFields"
  • 安全性可以是以下值之一:
    • 所有者:对象的所有者 (SID) 。
    • :对象 (SID) 的主要组。
    • DACL (任意访问控制列表) :由对象的所有者控制并指定特定用户或组可以对该对象的访问的访问控制列表。
    • SACL (系统访问控制列表) :一个 ACL,用于控制尝试访问安全对象的审核消息的生成。 获取或设置对象的 SACL 的功能由通常仅由系统管理员持有的特权控制。
  • TimeFields 可以是以下值之一:
    • CreationTime:指定创建文件或目录的时间。
    • LastAccessTime:指定上次从中读取文件、写入文件的时间或可执行文件的运行时间。
    • LastWrittenTime:指定上次写入、截断或覆盖文件的时间。

有关如何使用 <includeAttributes> 元素的示例,请参阅 excludeAttributes> 的示例<

<图书馆>

此元素是内部 USMT 元素。 请勿使用此元素。

<位置>

location<> 元素定义对象>元素的位置<

语法:

<location type="typeID">ObjectLocation</location>
设置 是否为必需?
类型 typeID 可以是 Registry 或 File。
ObjectLocation 对象的位置。

以下示例来自 MigApp.xml 文件:

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
   </object>
</addObjects>

<locationModify>

locationModify<> 元素可用于在对象迁移到目标计算机之前更改对象的位置和名称。 只有在目标计算机上运行 LoadState 工具时,才会处理 locationModify> 元素。< 换句话说, ScanState 工具会忽略此元素。 <locationModify> 元素在目标计算机上创建相应的文件夹(如果尚不存在)。

出现次数: 无限

语法:

<locationModify script="ScriptInvocation">
</locationModify>
设置 是否为必需?
脚本 一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2")

对于包含规则中的对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。

以下示例来自 MigApp.xml 文件:

<locationModify script="MigXmlHelper.RelativeMove('%CSIDL_APPDATA%\Microsoft\Office','%CSIDL_APPDATA%')">
   <objectSet>
      <pattern type="File">%CSIDL_APPDATA%\Microsoft\Office\ [Access10.pip]</pattern>
   </objectSet>
</locationModify>

<locationModify> 函数

以下函数在使用 <locationModify> 元素时,在迁移对象时更改这些对象的位置。 对于父 <objectSet> 元素枚举的每个对象,都会调用这些函数。 <locationModify> 元素在目标计算机上创建相应的文件夹(如果尚不存在)。

  • ExactMove

    ExactMove 函数将父 <objectSet> 元素匹配的所有对象移动到给定的 ObjectEncodedLocation 中。 此函数可用于将单个文件移动到目标计算机上的其他位置。 如果目标位置是节点,则所有匹配的源对象将写入节点,而不使用任何子目录。 如果目标位置是叶,则迁移引擎会将所有匹配的源对象迁移到同一位置。 如果发生冲突,则应用常规冲突算法。

    语法: ExactMove(ObjectEncodedLocation)

    设置 是否为必需?
    ObjectEncodedLocation 所有源对象的目标 位置

    例如:

    <locationModify script="MigXmlHelper.ExactMove('HKCU\Keyboard Layout\Toggle [HotKey]')">
       <objectSet>
            <pattern type="Registry">HKCU\Keyboard Layout\Toggle []</pattern>
       </objectSet>
    </locationModify>
    
  • 移动

    Move 函数将对象移动到目标计算机上的其他位置。 此外,此函数创建在源对象名称中超过最长 CSIDL 的子目录。

    语法: Move(DestinationRoot)

    设置 是否为必需?
    DestinationRoot 移动源对象的位置。 如果需要,此函数会创建源对象名称中超过最长 CSIDL 的任何子目录。
  • RelativeMove

    RelativeMove 函数可用于收集和移动数据。 可以在源根和目标根中使用环境变量,但它们在源和目标计算机上可能有不同的定义。

    语法: RelativeMove(SourceRoot,DestinationRoot)

    设置 是否为必需?
    SourceRoot 对象从中移动的位置。 不会移动由父 <objectSet> 元素枚举且不在此位置的任何源对象。
    DestinationRoot 源对象在目标计算机上移动到的位置。 如果需要,此函数将创建 位于 SourceRoot 之上的任何子目录。

例如:

<include>
   <objectSet>
      <pattern type="File">%CSIDL_COMMON_FAVORITES%\* [*]</pattern>
   <objectSet>
</include>
<locationModify script="MigXmlHelper.RelativeMove('%CSIDL_COMMON_FAVORITES%','%CSIDL_COMMON_FAVORITES%')">
     <objectSet>
          <pattern type="File">%CSIDL_COMMON_FAVORITES%\* [*]</pattern>
     </objectSet>
</locationModify>

<_locDefinition>

此元素是内部 USMT 元素。 请勿使用此元素。

<制造商>

manufacturer<> 元素定义组件的制造商,但不会影响迁移。

  • 出现次数: 零个或一个

  • 父元素:<component>

  • 子元素:

语法:

<manufacturer>Name</manufacturer>
设置 是否为必需?
名称 组件的制造商名称。

<合并>

merge<> 元素确定发生冲突时发生的情况。 冲突是目标计算机上已存在已迁移的对象时。 如果未指定此元素,注册表的默认行为是源对象覆盖目标对象。 文件的默认行为是将源文件重命名为 OriginalFileName(1).OriginalExtension。 此元素仅指定发生冲突时应执行的操作。 它不包括 对象。 因此,对于要迁移的对象, <必须指定包含> 规则和 <merge> 元素。 处理对象并检测到冲突时,USMT 会选择最具体的合并规则。 然后应用规则来解决冲突。 例如,如果合并<>规则C:\* [*]设置为 <sourcePriority>,而<合并>规则C:\subfolder\* [*]设置为 <destinationPriority>,则 USMT 将使用 <destinationPriority> 规则,因为它更具体。

有关此元素的示例,请参阅 冲突和优先级

  • 出现次数: 无限

  • 父元素:<rules>

  • 必需的子元素:<objectSet>

  • 帮助程序函数:以下<合并>函数可用于此元素:SourcePriority、、DestinationPriorityFindFilePlaceByPatternLeafPatternNewestVersionHigherValue()LowerValue()

语法:

<merge script="ScriptInvocation">
</merge>
设置 是否为必需?
脚本 一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2")

对于包含>规则中的<对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。

以下示例来自 MigUser.xml 文件:

<rules>
   <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
      <objectSet>
         <pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
      </objectSet>
   </include>
   <merge script="MigXmlHelper.DestinationPriority()">
      <objectSet>
         <pattern type="File">%CSIDL_MYVIDEO% [desktop.ini]</pattern>
      </objectSet>
   </merge>
</rules>

<merge> 函数

这些函数控制冲突的解决方式。

  • DestinationPriority

    指定保留目标计算机上的 对象,而不从源计算机迁移对象。

    例如:

    <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\16.0\PhotoDraw\ [MyPictures]</pattern>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\16.0\PhotoDraw\Settings\ [PicturesPath]</pattern>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\16.0\PhotoDraw\Settings\ [AdditionalPlugInPath]</pattern>
         </objectSet>
    </merge>
    
  • FindFilePlaceByPattern

    发生冲突时,FindFilePlaceByPattern 函数使用递增计数器保存文件。 它是一个字符串,包含每个构造之一: <F><E><N> (按任意顺序排列)。

    语法: FindFilePlaceByPattern(FilePattern)

    设置 是否为必需?
    FilePattern
    • <F> 替换为原始文件名。
    • <N> 将替换为递增计数器,直到与目标计算机上的对象没有冲突。
    • <E> 替换为原始文件名扩展名。

    例如, <F> (<N>).<E> 在目标计算机上将源文件 MyDocument.doc 更改为 MyDocument (1).doc
  • NewestVersion

    NewestVersion 函数根据文件的版本解决目标计算机上的冲突。

    语法: NewestVersion(VersionTag)

    设置 是否为必需?
    VersionTag 选中的版本字段。 此字段可以是 FileVersionProductVersionVersionTag 版本最高的文件根据文件的版本确定要解决的冲突。 例如,如果 Myfile.txt 包含 FileVersion 1,并且目标计算机上的同一文件包含 FileVersion 2,则目标上的文件将保留。
  • HigherValue ()

    此函数可用于合并注册表值。 注册表值被计算为数值,值较高的值将确定合并哪些注册表值。

  • LowerValue ()

    此函数可用于合并注册表值。 注册表值被计算为数值,值较低的值将确定合并哪些注册表值。

  • SourcePriority

    指定从源计算机迁移对象,并删除目标计算机上的 对象。

    例如:

    <merge script="MigXmlHelper.SourcePriority()">
     <objectSet>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\14.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\15.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
     </objectSet>
    </merge>
    

<迁移>

<迁移>元素是迁移 .xml 文件的单个根元素,是必需的。 每个 .xml 文件必须具有唯一的迁移 urlid。 在命令行上指定的每个文件的 urlid 必须是唯一的。 urlid 必须是唯一的,因为 USMT 使用 urlid 来定义文件中的组件。

语法:

<migration urlid="*UrlID/*Name">
</migration>
设置 是否为必需?
urlid UrlID 是唯一标识此 .xml 文件的字符串标识符。 此参数必须是 XML 命名空间规范定义的无冒号名称。 每个迁移 .xml 文件必须具有唯一的 urlid。 如果两 个迁移.xml 文件具有相同的 urlid,则不会处理命令行中指定的第二个 .xml 文件。 有关 XML 命名空间的详细信息,请参阅 使用 XML 命名空间
名称 虽然不是必需的,但最好使用 .xml 文件的名称。

以下示例来自 MigApp.xml 文件:

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/migapp">
</migration>

MigXMLHelper.FileProperties

此筛选器帮助程序函数可用于根据文件大小和日期属性筛选文件迁移。

Helper 函数 MigXMLHelper.FileProperties (属性、运算符、valueToCompare)
属性 filesize, dateCreated, dateModified, dateAccessed
运算符 range, neq, lte, lt, eq, gte, gt
valueToCompare 正在比较的值。 例如:
日期:“2023/05/15-2020/05/17”,“2023/05/15”
大小:末尾带有 B、KB、MB 或 GB 的数字。 “5GB”、“1KB-1MB”
<component context="System"  type="Application">
<displayName>File_size</displayName>
<role role="Data">

   <rules>
        <include filter='MigXmlHelper.FileProperties("dateAccessed","range","2023/05/15-2020/05/17")'>
         <objectSet>
         <pattern type="File">%SYSTEMDRIVE%\DOCS\* [*]</pattern>
         </objectSet>
      </include>
   </rules>
</role>
</component>

<namedElements>

namedElements<> 元素可用于定义命名元素。 这些元素可以在整个 .xml 文件中的任何组件中使用。 有关如何使用此元素的示例,请参阅 MigApp.xml 文件。

语法:

<namedElements>
</namedElements>

有关此元素的示例,请参阅 MigApp.xml 文件。

<对象>

对象<>元素表示文件或注册表项。

语法:

<object>
</object>

以下示例来自 MigApp.xml 文件:

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
      </object>
</addObjects>

<objectSet>

<objectSet> 元素包含对象模式的列表;例如,文件路径、注册表位置等。 首先计算任何子 <条件> 元素。 如果所有子<条件>元素都返回 FALSE则< objectSet> 元素的计算结果为空集。 对于每个父元素,只能 <有多个 objectSet> 元素。

语法:

<objectSet>
</objectSet>

以下示例来自 MigUser.xml 文件:

<component type="Documents" context="User">
   <displayName _locID="miguser.mymusic">My Music</displayName>
      <paths>
         <path type="File">%CSIDL_MYMUSIC%</path>
      </paths>
   <role role="Data">
      <detects>           
      <detect>
         <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%")</condition>
      </detect>
   </detects>           
   <rules>
      <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
            <pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
         </objectSet>
      </include>
      <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
            <pattern type="File">%CSIDL_MYMUSIC%\ [desktop.ini]</pattern>
         </objectSet>
      </merge>
   </rules>
   </role>
</component>

<路径>

此元素是内部 USMT 元素。 请勿使用此元素。

<路径>

此元素是内部 USMT 元素。 请勿使用此元素。

<模式>

此元素可用于指定多个对象。 可以将多个 <模式> 元素用于每个 <objectSet> 元素,并且它们组合在一起。 如果指定文件,Microsoft 建议改为将 与 脚本>一起使用<GenerateDrivePatternsGenerateDrivePatterns模式>规则基本相同<,没有驱动器号规范。 例如,以下两行代码类似:

<pattern type="File">C:\Folder\* [Sample.doc]</pattern>
<script>MigXmlHelper.GenerateDrivePatterns("\Folder\* [Sample.doc]","Fixed"</script>
  • 出现次数: 无限

  • 父元素:<objectSet>

  • 子元素: 无,但 Path [object] 必须有效。

语法:

<pattern type="typeID">Path [object]</pattern>
设置 是否为必需?
类型 typeID 可以是 Registry、File 或 Ini。 如果 typeId 为 Ini,则不允许 在 Path对象 之间留有空格。 例如,当 type=“Ini”时,以下格式是正确的:
<pattern type=“Ini”>%WinAmp5InstPath%\Winamp.ini|WinAmp[keeponscreen]</pattern>
路径 [object] 有效的注册表或文件路径模式,后跟至少一个空格,后跟包含要迁移的 对象的括号 []。
  • 路径 可以包含星号 () * 通配符,也可以是 识别的环境变量。 问号不能用作通配符。 HKCUHKLM 分别可用于引用 HKEY_CURRENT_USERHKEY_LOCAL_MACHINE
  • 对象 可以包含星号 () * 通配符。 但是,问号不能用作通配符。 例如:
    C:\Folder\ [*] 枚举 中的所有 C:\Folder 文件,但不枚举 的 C:\Folder子文件夹。
    C:\Folder* [*] 枚举 的所有文件和子文件夹 C:\Folder
    C:\Folder\ [*.mp3] 枚举 .mp3 中的所有 C:\Folder文件。
    C:\Folder\ [Sample.doc]Sample.doc 枚举位于 C:\Folder 中的文件。
    注意
    如果迁移文件名中具有方括号字符 ([ 或 ]) 的文件,则必须将胡萝卜 (^) 字符直接插入到方括号之前才能有效。 例如,如果有一个名为“file].txt”的文件, <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> 则必须指定 而不是 <pattern type="File">c:\documents\mydocs [file].txt]</pattern>

例如:

  • 若要迁移单个注册表项,请执行以下操作:

    <pattern type="Registry">HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent]</pattern>
    
  • 若要从 C:驱动器迁移 C:\EngineeringDrafts 文件夹和任何子文件夹,请执行以下操作:

    <pattern type="File">C:\EngineeringDrafts\* [*]</pattern>
    
  • 若要仅 C:\EngineeringDrafts 从 C: 驱动器迁移文件夹(不包括任何子文件夹):

    重新路由文件和设置

  • C:\EngineeringDrafts迁移Sample.doc文件:

    <pattern type="File"> C:\EngineeringDrafts\ [Sample.doc]</pattern>
    
  • 若要从 C 上存在的位置迁移 Sample.doc 文件,请使用以下方式使用模式。 如果 C: 驱动器上存在具有相同名称的多个文件,则会迁移所有这些文件。

    <pattern type="File"> C:\* [Sample.doc] </pattern>
    
  • 有关如何使用此元素的更多示例,请参阅 排除文件和设置重新路由文件和设置包括文件和设置以及 自定义 XML 示例

<处理>

此元素可用于在迁移过程中的特定点运行脚本。 不需要从指定的脚本返回值。 如果有返回值,则忽略它们。

  • 出现次数: 无限制

  • 父元素:<rules>

  • 必需的子元素:<script>

语法:

<processing when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">
</processing>
设置 是否为必需?
指示何时应运行脚本。 此值可以是以下值之一:
  • 预扫描 是指在扫描过程开始之前。
  • scan-success 表示扫描过程成功完成后。
  • 后扫描 是指扫描过程完成后,无论是否成功。
  • 预应用 是指在应用过程开始之前。
  • apply-success 表示在应用过程成功完成后。
  • post-apply 是指应用过程完成后,无论是否成功。

<插件>

此元素是内部 USMT 元素。 请勿使用此元素。

<作用>

自定义 .xml 文件中需要 role> 元素。< <指定角色>元素后,可以创建具体组件。 组件由在 <组件> 级别指定的参数以及此处指定的角色定义。

语法:

<role role="Container|Binaries|Settings|Data">
</role>
设置 是否为必需?
作用 定义组件的角色。 角色可以是以下角色之一:
  • 容器
  • 二 进 制 文件
  • 设置
  • Data
可以指定以下项之一:
  1. 一个组件>中最多三个<角色>元素 - 一个“二进制文件”角色元素、一个“设置”角色元素和一个“Data”角色元素。< 这些参数不会更改迁移行为 - 它们的唯一用途是帮助对正在迁移的设置进行分类。 这些 <角色> 元素可以嵌套,但每个嵌套元素必须属于同一角色参数。
  2. 组件元素中的一个<“容器”角色元素。>>< 在这种情况下,无法指定任何子 <规则> 元素,只能指定其他 <组件> 元素。 每个子<组件元素的类型必须与父组件>元素的类型相同。>< 例如:
<component context=“UserAndSystem” type=“Application”>
<displayName _locID=“migapp.msoffice2016”>Microsoft Office 2016</displayName>
<environment name=“GlobalEnv” />
<role role=“Container”>
<detection name=“AnyOffice2016Version” />
<detection name=“Word2016” />
<!--
Office 2016 通用设置
-->
<component context="UserAndSystem" type="Application">

以下示例来自 MigUser.xml 文件。 有关更多示例, MigApp.xml 请参阅 文件:

<component type="System" context="User">
   <displayName _locID="miguser.startmenu">Start Menu</displayName>
   <paths>
      <path type="File">%CSIDL_STARTMENU%</path>
   </paths>
   <role role="Settings">
      <detects>           
         <detect>
            <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_STARTMENU%")</condition>
         </detect>
      </detects>           
   <rules>
      <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
            <pattern type="File">%CSIDL_STARTMENU%\* [*]</pattern>
         </objectSet>
      </include>
      <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
            <pattern type="File">%CSIDL_STARTMENU% [desktop.ini]</pattern>
            <pattern type="File">%CSIDL_STARTMENU%\* [*]</pattern>
         </objectSet>
      </merge>
   </rules>
   </role>
</component>

<rules>

自定义 .xml 文件中需要 rules> 元素。< 如果选择了父 <组件> 元素,则此元素包含迁移期间运行的规则,除非子 <条件> 元素(如果存在)的计算结果为 FALSE。 对于每个 <rules> 元素,可以有多个子 <规则> 元素。

语法:

<rules name="ID" context="User|System|UserAndSystem">
</rules>
设置 是否为必需?
name 是,当规则>是 namedElements 的子级时<<>
否,当规则>是任何其他元素的子元素时<
指定 ID 后,不会处理任何子元素。 相反,将处理在 namedElements> 中<声明具有相同名称的任何其他<规则>元素。
上下文
(默认值 = UserAndSystem)
定义此参数的范围 - 是在特定用户的上下文中处理此组件,还是跨整个操作系统处理,还是同时处理这两者。
最大可能的范围由组件元素设置。 例如,如果 <组件> 元素的上下文为 User ,而 <rules> 元素的上下文为 UserAndSystem,则 <rules> 元素的作用就如同其上下文为 User。 如果 <规则> 具有 System 上下文,则其行为就像 <规则> 不存在一样。
  • 用户:评估每个用户的变量。
  • 系统:仅为系统评估一次变量。
  • UserAndSystem:评估整个操作系统和每个用户的变量。

以下示例来自 MigUser.xml 文件:

<component type="Documents" context="User">
   <displayName _locID="miguser.mymusic">My Music</displayName>
      <paths>
         <path type="File">%CSIDL_MYMUSIC%</path>
      </paths>
   <role role="Data">
      <detects>           
      <detect>
         <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%")</condition>
      </detect>
   </detects>           
   <rules>
      <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
            <pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
         </objectSet>
      </include>
      <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
            <pattern type="File">%CSIDL_MYMUSIC%\ [desktop.ini]</pattern>
         </objectSet>
      </merge>
   </rules>
   </role>
</component>

<脚本>

脚本>所需的<返回值取决于父元素。

出现次数:一次用于<变量>objectSet> 和处理不受限制<><

父元素:<objectSet><variable><processing>

子元素:

语法和帮助程序函数:

  • 常规语法: <script>ScriptWithArguments</script>

  • 当脚本>在变量中时<,可以使用 GetStringContent<>

    语法: <script>MigXmlHelper.GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")</script>

    示例:<script>MigXMLHelper.GetStringContent("Registry","HKLM\Software\MyApp\Installer [EXEPATH]")</script>

  • 当脚本>位于 objectSet 中时,可以使用 GenerateUserPatterns。<<>

    语法: <script>MigXmlHelper.GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")</script>

    示例:<script>MigXmlHelper.GenerateUserPatterns ("File","%USERPROFILE%\* [*.doc]", "FALSE")</script>

  • 当脚本位于 objectSet 中时<,可以使用 GenerateDrivePatterns。><>

    语法: <script>MigXmlHelper.GenerateDrivePatterns("PatternSegment","DriveType")</script>

    示例:<script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script>

  • 简单执行脚本可用于处理>元素中的<脚本>元素:AskForLogoff、ConvertToShortFileName、KillExplorer、RemoveEmptyDirectories、RestartExplorer、RegisterFonts、StartService、StopService、SyncSCM。<

    语法: <script>MigXmlHelper.ExecutingScript</script>

    示例:<script>MigXmlHelper.KillExplorer()</script>

设置 是否为必需?
ScriptWithArguments 一个脚本,后跟任意数量的字符串参数,这些参数用逗号分隔并用括号括起来。 例如,MyScripts.AScript ("Arg1","Arg2")
对于包含>规则中的<对象集枚举的每个对象,将调用脚本。 筛选器脚本返回布尔值。 如果返回值为 TRUE,则迁移 对象。 如果为 FALSE,则不会迁移它。
脚本>所需的<返回值取决于父元素。
  • 变量>中使用<时,返回值必须是字符串。
  • objectSet> 中使用<时,返回值必须是字符串的二维数组。
  • location> 中使用<时,返回值必须是与 location 的 <type 属性一致的有效位置>。 例如,如果 <location type=“File”>,则子脚本元素(如果指定)必须是有效的文件位置。
    注意
    如果迁移文件名中具有括号字符 ([ 或 ]) 的文件,请将胡萝卜 (^) 字符直接插入括号前,使其有效。 例如,如果有一个名为“file].txt”的文件,请指定 <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> 而不是 <pattern type="File">c:\documents\mydocs [file].txt]</pattern>

示例:

若要从源计算机上的任意驱动器迁移 Sample.doc 文件,请使用 <如下所示的脚本> 。 如果存在具有相同名称的多个文件,则会迁移所有此类文件。

<script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script> 

有关如何使用此元素的更多示例,请参阅 排除文件和设置重新路由文件和设置以及 自定义 XML 示例

<脚本> 函数

以下函数可与 script> 元素一起使用<

字符串和模式生成函数

这些函数返回字符串或模式。

  • GetStringContent

    GetStringContent 可与变量>元素中的<脚本>元素一起使用<。 如果可能,此函数返回给定对象的字符串表示形式。 否则,它将返回 NULL。 对于文件对象,此函数始终返回 NULL

    语法: GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")

    设置 是否为必需?
    ObjectType 对象的类型。 可以是 .ini文件) 的注册表或 Ini (。
    EncodedLocationPattern
    • 如果对象的类型为 Registry,则 EncodedLocationPattern 必须是有效的注册表路径。 例如,HKLM\SOFTWARE\MyKey[]
    • 如果对象的类型为 Ini,则 EncodedLocationPattern 必须采用以下格式:
      IniFilePath |SectionName[SettingName]
    ExpandContent 无 (default=TRUE) 可以为 TRUEFALSE。 如果 为 FALSE,则在返回之前不会扩展给定位置。

    例如:

    <variable name="MSNMessengerInstPath">
    <script>MigXmlHelper.GetStringContent("Registry","%HklmWowSoftware%\Microsoft\MSNMessenger [InstallationDirectory]")</script>
    </variable>
    
  • GenerateDrivePatterns

    函数 GenerateDrivePatterns 循环访问所有可用的驱动器,并选择与请求的驱动器类型匹配的驱动器类型。 然后,它将所选驱动器与 PatternSegment 的结尾部分连接起来,形成完整的编码文件模式。 例如,如果 PatternSegmentPath [file.txt]DriveTypeFixed,则函数将生成 ;如果有 C:以外的固定驱动器,则函数将生成 C:\Path [file.txt]其他模式。 不能使用此函数指定环境变量。 GenerateDrivePatterns可以与 objectSet<>/>中的<包含排除>的脚本元素一起使用。<<>

    语法: GenerateDrivePatterns("PatternSegment","DriveType")

    设置 是否为必需?
    PatternSegment 编码模式的后缀。 该值与驱动器规范(如“c:”)连接,以形成完整的 编码文件模式。 例如,“* [*.doc]”。 PatternSegment 不能是环境变量。
    DriveType 要为其生成模式的驱动器类型。 可以指定以下项之一:
    • 已修复
    • CDROM
    • 移动
    • 远程

    有关此元素的示例, MigUser.xml 请参阅 文件中的最后一个组件。

  • GenerateUserPatterns

    函数 GenerateUserPatterns 循环访问要迁移的所有用户,如果 <ProcessCurrentUser>FALSE,则不包括当前处理的用户,并在每个用户的上下文中展开指定的模式。 例如,如果用户 A、B 和 C 通过调用 GenerateUserPattens('File','%userprofile% [*.doc]','TRUE')在 中C:\Users具有配置文件,则帮助程序函数将生成以下三种模式:

    • “C:\Users\A\* [*.doc]”

    • “C:\Users\B\* [*.doc]”

    • “C:\Users\C\* [*.doc]”

    语法: GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")

    设置 是否为必需?
    ObjectType 定义对象类型。 可以是“文件”或“注册表”。
    EncodedLocationPattern 位置模式。 允许使用环境变量。
    ProcessCurrentUser 可以为 TRUEFALSE。 指示是否应为当前用户生成模式。

示例:

如果在 GenerateUserPattens('File','%userprofile% [*.doc]','FALSE') USMT 处理用户 A 时调用 ,则此函数仅为用户 B 和 C 生成模式。此帮助程序函数可用于生成复杂规则。 例如,若要从源计算机迁移所有 .doc 文件,但如果用户 X 未迁移,则不要从用户 X 的配置文件迁移任何 .doc 文件。

以下示例是此方案的示例代码。 第一个 <rules> 元素迁移源计算机上的所有 .doc 文件,但 中的 C:\Users文件除外。 第二个<规则>元素从C:\Users迁移除其他用户配置文件中的文件之外.doc的所有.doc文件。 由于第二 <个 rules> 元素在每个迁移的用户上下文中进行处理,因此最终结果是所需的行为。 最终结果是预期的结果。

<rules context="System">
  <include>
    <objectSet>
      <script>MigXmlHelper.GenerateDrivePatterns ("* [*.doc]", "Fixed")</script>
    </objectSet>
  </include>
  <exclude>
    <objectSet>
      <pattern type="File">%ProfilesFolder%\* [*.doc]</pattern>
    </objectSet>
  </exclude>
</rules>
<rules context="User">
  <include>
    <objectSet>
      <pattern type="File">%ProfilesFolder%\* [*.doc]</pattern>
    </objectSet>
  </include>
  <exclude>
    <objectSet>
      <script>MigXmlHelper.GenerateUserPatterns ("File","%userprofile%\* [*.doc]", "FALSE")</script>
    </objectSet>
  </exclude>
</rules>

MigXmlHelper.GenerateDocPatterns

帮助 MigXmlHelper.GenerateDocPatterns 程序函数调用文档查找器以扫描系统中可迁移的所有文件。 可以在 系统用户 上下文中调用它来集中扫描。

设置 是否为必需?
ScanProgramFiles 无 (默认值 = FALSE) 可以为 TRUEFALSEScanProgramFiles 参数确定文档查找器是否扫描 Program Files 目录以收集已知应用程序的已注册文件扩展名。 例如,当设置为 TRUE 时,它会发现并迁移 Photoshop 目录下的 .jpg 文件(如果 .jpg 是注册到 Photoshop 的文件扩展名)。
IncludePatterns 无 (默认值 = TRUE) 可以为 TRUEFALSETRUE 生成 include 模式,并且可以在 include> 元素下<添加。 FALSE 生成排除模式,并且可以在 exclude> 元素下<添加。
SystemDrive 无 (默认值 = FALSE) 可以为 TRUEFALSE。 如果 为 TRUE,则将所有模式限制为系统驱动器。
 <!-- This component migrates data in user context -->
  <component type="Documents" context="User">
    <displayName>MigDocUser</displayName>
    <role role="Data">
      <rules>
        <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
          <objectSet>
            <script>MigXmlHelper.GenerateDocPatterns ("false")</script>
          </objectSet>
        </include>
        <exclude>
          <objectSet>
           <script>MigXmlHelper.GenerateDocPatterns ("false", "false", "false")</script>
          </objectSet>
        </exclude>
      </rules>
    </role>
  </component>

简单执行脚本

以下脚本没有返回值。 以下错误可用于<处理元素中的脚本><元素>

  • AskForLogoff () 。 提示用户在迁移结束时注销。 例如:

    <processing when="apply-success">
      <script>MigXmlHelper.AskForLogoff()</script>
    </processing>
    
  • ConvertToShortFileName (RegistryEncodedLocation) 。 如果 RegistryEncodedLocation 是现有文件的完整路径,则此函数会将该文件转换为其短文件名,然后更新注册表值。

  • KillExplorer () 。 停止当前用户上下文的 Explorer.exe。 停止 Explorer.exe 允许访问在运行 Explorer.exe 时保持打开的某些密钥和文件。 例如:

    <processing when="pre-apply">
      <script>MigXmlHelper.KillExplorer()</script>
    </processing>
    
  • RegisterFonts (FileEncodedLocation) 。 注册给定字体或给定目录中的所有字体。 例如:

 <processing when="apply-success">
   <script>MigXmlHelper.RegisterFonts("%CSIDL_COMMON_FONTS%")</script>
 </processing>
  • RemoveEmptyDirectories (DirectoryEncodedPattern) 。 删除目标计算机上与 DirectoryEncodedPattern 匹配的任何空目录。

  • RestartExplorer () 。 在迁移结束时重启 Explorer.exe。 例如:

    <processing when="post-apply">
      <script>MigXmlHelper.RestartExplorer()</script>
    </processing>
    
  • StartService (ServiceName、OptionalParam1、OptionalParam2,...) 。 启动由 ServiceName 标识的服务 。ServiceName 是 中的 HKLM\System\CurrentControlSet\Services 子项,用于保存给定服务的数据。 可选参数(如果有)将传递给 StartService API。 有关详细信息,请参阅 winsvc.h (StartServiceA 函数) 一文。

  • StopService (ServiceName) 。 停止由 ServiceName 标识的服务。ServiceName 是 中的 HKLM\System\CurrentControlSet\Services 子项,用于保存给定服务的数据。

  • SyncSCM (ServiceShortName) 。 迁移引擎更改值后,从注册表 (HKLM\System\CurrentControlSet\Services\ServiceShortName [Start]) 中读取“开始”类型值,然后将服务控制管理器 (SCM) 与新值同步。

<文本>

<text> 元素可用于为其中一个迁移 .xml 文件内的任何环境变量设置值。

语法:

<text>NormalText</text>
设置
NormalText 此文本被解释为普通文本。

例如:

<variable name="QuickTime5or6DataSys">
  <text>%CSIDL_COMMON_APPDATA%\QuickTime</text> 
</variable>

<unconditionalExclude>

<unconditionalExclude> 元素从迁移中排除指定的文件和注册表值,而不管任何迁移 .xml 文件或Config.xml文件中是否有其他包含规则。 此处声明的对象不会迁移,因为此元素优先于所有其他规则。 例如,即使存在包含文件的显式 <包含> 规则 .mp3 ,但如果使用此选项排除这些文件,则不会迁移这些文件。

使用此元素可排除源计算机中的所有 .mp3 文件。 或者,如果使用其他方法进行备份 C:\UserData ,则可以从迁移中排除整个文件夹。 请谨慎使用此元素。 如果应用程序需要排除的文件,则应用程序可能无法在目标计算机上正常运行。

语法:

<unconditionalExclude></unconditionalExclude>

以下 .xml 文件从迁移中排除所有 .mp3 文件。 有关如何使用此元素的其他示例,请参阅 排除文件和设置

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/excludefiles">
  <component context="System" type="Documents">
        <displayName>Test</displayName>
        <role role="Data">
            <rules>
             <unconditionalExclude>
                        <objectSet>
    <script>MigXmlHelper.GenerateDrivePatterns ("* [*.mp3]", "Fixed")</script>
                        </objectSet> 
             </unconditionalExclude>
            </rules>
        </role>
    </component>
</migration>

<变量>

变量元素在环境>元素中<是必需的。<> 对于每个 <变量> 元素,必须有一个 <objectSet><script><text> 元素。 变量>元素的内容<将文本值分配给环境变量。 此元素具有以下三个选项:

  1. <如果变量>元素包含<文本>元素,则变量元素的值是文本>元素的值<

  2. <如果变量>元素包含<脚本>元素,并且脚本的调用生成非空字符串,则变量>元素的值<是脚本调用的结果。

  3. <如果变量>元素包含 <objectSet> 元素,并且 objectSet> 元素的<计算生成了至少一个对象模式,则匹配生成的对象模式的第一个对象的值是变量元素的值。

语法:

<variable name="ID" remap=TRUE|FALSE>
</variable>
设置 是否为必需?
name ID 是用于引用环境变量的名称的字符串值。 Microsoft 建议 ID 以组件名称开头,以避免命名空间冲突。 例如,如果组件的名称为 MyComponent,并且需要一个变量作为组件的安装路径, MyComponent.InstallPath则可指定。
remap 否,默认值 = FALSE 指定是否将此环境变量评估为重新映射环境变量。 位于此环境变量值下面的路径中的对象会自动移动到环境变量在目标计算机上指向的位置。

以下示例来自 MigApp.xml 文件:

<environment>
   <variable name="HklmWowSoftware">
      <text>HKLM\Software</text>
   </variable>
   <variable name="WinZip8or9or10Exe">
      <script>MigXmlHelper.GetStringContent("Registry","%HklmWowSoftware%\Microsoft\Windows\CurrentVersion\App Paths\winzip32.exe []")</script>
   </variable>
</environment>

<version>

version<> 元素定义组件的版本,但不会影响迁移。

  • 出现次数: 零个或一个

  • 父元素:<component>

  • 子元素:

语法:

<version>ComponentVersion</version>
设置 是否为必需?
ComponentVersion 组件的版本,可以包含模式。

例如:

<version>4.*</version>

<windowsObjects>

<windowsObjects> 元素仅供 USMT 内部使用。 请勿使用此元素。

附录

指定位置

  • 指定编码位置。 在所有帮助程序函数中使用的编码位置是对象名称的明确字符串表示形式。 编码的位置由节点部分组成,后跟方括号中的叶(可选)。 此格式明确区分节点和叶。

    例如,指定文件 C:\Windows\Notepad.exe ,如下所示: c:\Windows[Notepad.exe]。 同样,指定目录 C:\Windows\System32 ,如下所示: c:\Windows\System32。 (请注意,没有 [] 构造。)

    表示注册表类似。 注册表项的默认值表示为空 [] 构造。 例如,注册表项的 HKLM\SOFTWARE\MyKey 默认值为 HKLM\SOFTWARE\MyKey[]

  • 指定位置模式。 指定位置模式类似于指定实际位置。 节点和叶部分都接受模式,但例外。 但是,节点中的模式不会扩展到叶。

    例如,模式 c:\Windows\* 与 Windows 目录和所有子目录匹配,但与这些目录中的任何文件都不匹配。 若要匹配文件, c:\Windows\*[*] 必须指定 。

内部 USMT 函数

以下函数仅供内部 USMT 使用。 请勿在 .xml 文件中使用它们。

  • AntiAlias

  • ConvertScreenSaver

  • ConvertShowIEOnDesktop

  • ConvertToOfficeLangID

  • MigrateActiveDesktop

  • MigrateAppearanceUPM

  • MigrateDisplayCS

  • MigrateDisplaySS

  • MigrateIEAutoSearch

  • MigrateMouseUPM

  • MigrateSoundSysTray

  • MigrateTaskBarSS

  • SetPstPathInMapiStruc

有效版本标记

以下版本标记可用于各种帮助程序函数:

  • “CompanyName”

  • “FileDescription”

  • “FileVersion”

  • “InternalName”

  • “LegalCopyright”

  • “OriginalFilename”

  • “ProductName”

  • “ProductVersion”

以下版本标记包含可比较的值:

  • “FileVersion”

  • “ProductVersion”