mirror of
https://github.com/MicrosoftDocs/windows-itpro-docs.git
synced 2025-05-13 13:57:22 +00:00
257 lines
9.7 KiB
Markdown
257 lines
9.7 KiB
Markdown
---
|
|
title: Custom XML Examples (Windows 10)
|
|
description: Use custom XML examples to learn how to migrate an unsupported application, migrate files and registry keys, and migrate the My Videos folder.
|
|
ms.reviewer:
|
|
manager: dougeby
|
|
ms.author: aaroncz
|
|
ms.prod: w10
|
|
author: aczechowski
|
|
ms.topic: article
|
|
---
|
|
|
|
# Custom XML Examples
|
|
|
|
## <a href="" id="example"></a>Example 1: Migrating an Unsupported Application
|
|
|
|
The following is a template for the sections that you need to migrate your application. The template isn't functional on its own, but you can use it to write your own .xml file.
|
|
|
|
``` xml
|
|
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/migtestapp">
|
|
<component type="Application">
|
|
<!-- Name of the application -->
|
|
<displayName>Some Application</displayName>
|
|
<!-- Specify whether the environment variables exist in the context of user or system or both -->
|
|
<environment context="System">
|
|
<!-- Create the environment variables -->
|
|
<variable name="myVar1">
|
|
<!-- Simple text value assignment to a variable -->
|
|
<text>value</text>
|
|
</variable>
|
|
<variable name="myAppExePath">
|
|
<!-- Make a call to in-built helper function to get a value from a reg key and assign that value to the variable -->
|
|
<script>MigXMLHelper.GetStringContent("Registry","HKLM\Software\MyApp\Installer [EXEPATH]")</script>
|
|
</variable>
|
|
</environment>
|
|
<role role="Settings">
|
|
<detects>
|
|
<!-- All of these checks must be true for the component to be detected -->
|
|
<detect>
|
|
<!-- Make a call to in-built helper function to check if an object exists or not -->
|
|
<condition>MigXMLHelper.DoesObjectExist("Registry","HKLM\Software\MyApp [win32_version]")</condition>
|
|
</detect>
|
|
<detect>
|
|
<!-- Either of these checks must be true for the component to be detected -->
|
|
<!-- Make a call to in-built helper function to check if a file version matches or not -->
|
|
<condition>MigXMLHelper.DoesFileVersionMatch("%MyAppExePath%","ProductVersion","8.*")</condition>
|
|
<condition>MigXMLHelper.DoesFileVersionMatch("%MyAppExePath%","ProductVersion","9.*")</condition>
|
|
</detect>
|
|
</detects>
|
|
<!-- Describe the rules that will be executed during migration of this component and the context, whether user, system or both -->
|
|
<rules context="User">
|
|
<!-- Delete objects specified in the object set on the destination computer before applying source objects -->
|
|
<destinationCleanup>
|
|
<!-- Describe the pattern for the list of objects to be deleted -->
|
|
<objectSet>
|
|
<pattern type="Registry">HKCU\Software\MyApp\Toolbar\* [*]</pattern>
|
|
<pattern type="Registry">HKCU\Software\MyApp\ListView\* [*]</pattern>
|
|
<pattern type="Registry">HKCU\Software\MyApp [ShowTips]</pattern>
|
|
</objectSet>
|
|
</destinationCleanup>
|
|
<!-- Specify which set of objects should be migrated -->
|
|
<include>
|
|
<!-- Describe the pattern for the list of objects to be included -->
|
|
<objectSet>
|
|
<pattern type="Registry">HKCU\Software\MyApp\Toolbar\* [*]</pattern>
|
|
<pattern type="Registry">HKCU\Software\MyApp\ListView\* [*]</pattern>
|
|
<pattern type="Registry">HKCU\Software\MyApp [ShowTips]</pattern>
|
|
</objectSet>
|
|
</include>
|
|
<!-- Specify which set of objects should not be migrated -->
|
|
<exclude>
|
|
<!-- Describe the pattern for the list of objects to be excluded from migration -->
|
|
<objectSet>
|
|
<pattern type="Registry">HKCU\Software\MyApp [Display]</pattern>
|
|
</objectSet>
|
|
</exclude>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
</migration>
|
|
```
|
|
|
|
## <a href="" id="example2"></a>Example 2: Migrating the My Videos Folder
|
|
|
|
The following sample is a custom .xml file named CustomFile.xml that migrates My Videos for all users, if the folder exists on the source computer.
|
|
|
|
- **Sample condition**: Verifies that My Videos exists on the source computer:
|
|
|
|
`<condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYVIDEO%")</condition>`
|
|
|
|
- **Sample filter**: Filters out the shortcuts in My Videos that don't resolve on the destination computer:
|
|
|
|
`<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>`
|
|
|
|
This has no effect on files that aren't shortcuts. For example, if there's a shortcut in My Videos on the source computer that points to C:\Folder1, that shortcut will be migrated only if C:\Folder1 exists on the destination computer. However, all other files, such as .mp3 files, migrate without any filtering.
|
|
|
|
- **Sample pattern**: Migrates My Videos for all users:
|
|
|
|
`<pattern type="File">%CSIDL_MYVIDEO%* [*]</pattern>`
|
|
|
|
**XML file**
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/CustomFile">
|
|
<component type="Documents" context="User">
|
|
<displayName>My Video</displayName>
|
|
<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>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
</migration>
|
|
```
|
|
|
|
## <a href="" id="example3"></a>Example 3: Migrating Files and Registry Keys
|
|
|
|
The sample patterns describe the behavior in the following example .xml file.
|
|
|
|
- **Sample pattern**: Migrates all instances of the file Usmttestfile.txt from all subdirectories under `%ProgramFiles%\USMTTestFolder`:
|
|
|
|
`<pattern type="File">%ProgramFiles%\USMTTestFolder* [USMTTestFile.txt]</pattern>`
|
|
|
|
- **Sample pattern**: Migrates the whole directory under `%ProgramFiles%\USMTDIRTestFolder`:
|
|
|
|
`<pattern type="File">%ProgramFiles%\USMTDIRTestFolder* []</pattern>`
|
|
|
|
- **Sample pattern**: Migrates all instances of MyKey under `HKCU\Software\USMTTESTKEY`:
|
|
|
|
`<pattern type="Registry">HKCU\Software\USMTTESTKEY* [MyKey]</pattern>`
|
|
|
|
- **Sample pattern**: Migrates the entire registry hive under `HKLM\Software\USMTTESTKEY`:
|
|
|
|
`<pattern type="Registry">HKLM\Software\USMTTESTKEY* []</pattern>`
|
|
|
|
**XML file**
|
|
|
|
``` xml
|
|
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/testfilemig">
|
|
<component type="Application" context="System">
|
|
<displayName>File Migration Test</displayName>
|
|
<role role="Data">
|
|
<rules context="System">
|
|
<include>
|
|
<objectSet>
|
|
<pattern type="File">%ProgramFiles%\USMTTestFolder\* [USMTTestFile.txt]</pattern>
|
|
<pattern type="File">%ProgramFiles%\USMTDIRTestFolder\* [*]</pattern>
|
|
</objectSet>
|
|
</include>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
<component type="System">
|
|
<displayName>Registry Migration Test</displayName>
|
|
<role role="Settings">
|
|
<rules context="UserAndSystem">
|
|
<include>
|
|
<objectSet>
|
|
<pattern type="Registry">HKCU\Software\USMTTESTKEY\* [MyKey]</pattern>
|
|
<pattern type="Registry">HKLM\Software\USMTTESTKEY\* [*]</pattern>
|
|
</objectSet>
|
|
</include>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
</migration>
|
|
```
|
|
|
|
## <a href="" id="example4"></a>Example 4: Migrating Specific Folders from Various Locations
|
|
|
|
|
|
The behavior for this custom .xml file is described within the `<displayName>` tags in the code.
|
|
|
|
``` xml
|
|
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
|
|
|
|
<component type="Documents" context="System">
|
|
<displayName>Component to migrate all Engineering Drafts subfolders without documents in this folder </displayName>
|
|
<role role="Data">
|
|
<rules>
|
|
<include>
|
|
<objectSet>
|
|
<pattern type="File"> C:\EngineeringDrafts\* [*]</pattern>
|
|
</objectSet>
|
|
</include>
|
|
<exclude>
|
|
<objectSet>
|
|
<pattern type="File"> C:\EngineeringDrafts\ [*]</pattern>
|
|
</objectSet>
|
|
</exclude>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
|
|
<component type="Documents" context="System">
|
|
<displayName>Component to migrate all user documents except Sample.doc</displayName>
|
|
<role role="Data">
|
|
<rules>
|
|
<include>
|
|
<objectSet>
|
|
<pattern type="File"> C:\UserDocuments\* [*]</pattern>
|
|
</objectSet>
|
|
</include>
|
|
<exclude>
|
|
<objectSet>
|
|
<pattern type="File"> C:\UserDocuments\ [Sample.doc]</pattern>
|
|
</objectSet>
|
|
</exclude>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
|
|
<component type="Documents" context="System">
|
|
<displayName>Component to migrate all Requests folders on any drive on the computer </displayName>
|
|
<role role="Data">
|
|
<rules>
|
|
<include>
|
|
<objectSet>
|
|
<script>MigXmlHelper.GenerateDrivePatterns ("\Requests\* [*] ", "Fixed")</script>
|
|
<script>MigXmlHelper.GenerateDrivePatterns ("*\Requests\* [*] ", "Fixed")</script>
|
|
</objectSet>
|
|
</include>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
|
|
<component type="Documents" context="System">
|
|
<displayName>Component to migrate all Presentations folder from any location on the C: drive </displayName>
|
|
<role role="Data">
|
|
<rules>
|
|
<include>
|
|
<objectSet>
|
|
<pattern type="File"> C:\*\Presentations\* [*]</pattern>
|
|
<pattern type="File"> C:\Presentations\* [*]</pattern>
|
|
</objectSet>
|
|
</include>
|
|
</rules>
|
|
</role>
|
|
</component>
|
|
</migration>
|
|
```
|
|
|
|
## Related topics
|
|
|
|
[USMT XML Reference](usmt-xml-reference.md)
|
|
|
|
[Customize USMT XML Files](usmt-customize-xml-files.md)
|