Compartir a través de


Biblioteca de elementos XML

Introducción

En este tema se explican los elementos XML y las funciones auxiliares que te permiten crear archivos .xml de migración para usarlos con la herramienta de migración de estado de usuario (USMT). Se da por sentado que comprendes los conceptos básicos de XML .

En este tema

Además de los elementos XML y las funciones auxiliares, en este tema se describe cómo especificar ubicaciones codificadas y patrones de ubicaciones, funciones que son solo para uso interno de USMT y las etiquetas de versión que puedes usar con las funciones auxiliares.

  • Elementos y funciones auxiliares

  • Apéndice

    • Especificación de ubicaciones

    • Funciones internas de USMT

    • Etiquetas de versión válidas

Elementos y funciones auxiliares

En la siguiente tabla, se describen los elementos XML y las funciones auxiliares que puedes usar con USMT.

Elementos de la A a la K Elementos de la L a la Z Funciones auxiliares

<addObjects>

<attributes>

<bytes>

<commandLine>

<component>

<condition>

<conditions>

<content>

<contentModify>

<description>

<destinationCleanup>

<detect>

<detects>

<detection>

<displayName>

<environment>

<exclude>

<excludeAttributes>

<extensions>

<extension>

<externalProcess>

<icon>

<include>

<includeAttributes>

<library>

<location>

<locationModify>

<_locDefinition>

<manufacturer>

<merge>

<migration>

<namedElements>

<object>

<objectSet>

<path>

<paths>

<pattern>

<processing>

<plugin>

<role>

<rules>

<script>

<text>

<unconditionalExclude>

<variable>

<version>

<windowsObjects>

Funciones <condition>

Funciones <content>

Funciones <contentModify>

Funciones de filtro <include> y <exclude>

Funciones <locationModify>

Funciones <merge>

Funciones <script>

Funciones internas de USMT

<addObjects>

El elemento <addObjects> emula la existencia de uno o varios objetos en el equipo de origen. Los elementos secundarios <object> proporcionan los detalles de los objetos emulados. Si el contenido es un elemento <script>, el resultado de la invocación será una matriz de objetos.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios necesarios: <object>. Además, debes especificar <location> y <attributes> como elementos secundarios de este elemento <object>.

  • Elementos secundarios opcionales: <conditions>, <condition>, <script>

Sintaxis:

<addObjects>

</addObjects>

El siguiente ejemplo pertenece al archivo MigApp.xml:

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

<attributes>

El elemento <attributes> define los atributos de una clave del Registro o un archivo.

  • Número de repeticiones: una por cada <object>

  • Elementos principales: <object>

  • Elementos secundarios: ninguno

Sintaxis:

<attributes>Contenido</attributes>

Parámetro ¿Obligatorio? Valor

Contenido

El contenido depende del tipo de objeto especificado.

  • En archivos, el contenido puede ser una cadena que contenga alguno de los siguientes atributos separados por comas:

    • Archive

    • Read-only

    • System

    • Hidden

  • En claves del Registro, el contenido puede ser uno de los siguientes tipos:

    • Ninguna

    • Cadena

    • ExpandString

    • Binary

    • Dword

    • REG_SZ

El siguiente ejemplo pertenece al archivo MigApp.xml:

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

<bytes>

Debes especificar el elemento <bytes> solamente para archivos, ya que, si el elemento <location> corresponde a una clave del Registro o a un directorio, <bytes> se omitirá.

  • Número de repeticiones: cero o una

  • Elementos principales: <object>

  • Elementos secundarios: ninguno

Sintaxis:

<bytes string="Yes|No" expand="Yes|No">Contenido</bytes>

Parámetro ¿Obligatorio? Valor

cadena

No, el valor predeterminado es “No”

Determina si Contenido debe interpretarse como una cadena o como bytes.

expand

No, el valor predeterminado es “Yes”

Cuando el parámetro “expand” es “Yes”, el contenido del elemento <bytes> se expande primero en el contexto del equipo de origen y se interpreta después.

Contenido

Depende del valor de la cadena.

  • Cuando la cadena es “Yes:”, el contenido del elemento <bytes> se interpreta como una cadena.

  • Cuando la cadena es “No:”, el contenido del elemento <bytes> se interpreta como bytes. Cada par de caracteres representa el valor hexadecimal de un byte. Por ejemplo, “616263” es la representación de la cadena ANSI “abc”. Una representación completa de la cadena UNICODE “abc” que incluya el terminador de cadena sería: “6100620063000000”.

El siguiente ejemplo pertenece al archivo MigApp.xml:

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

<commandLine>

Tal vez quieras usar el elemento <commandLine> para iniciar o detener un servicio o una aplicación antes o después de ejecutar las herramientas ScanState y LoadState.

  • Número de repeticiones: ilimitado

  • Elementos principales: <externalProcess>

  • Elementos secundarios: ninguno

Sintaxis:

<commandLine>CadenaDeLíneaDeComandos</commandLine>

Parámetro ¿Obligatorio? Valor

CadenaDeLíneaDeComandos

Una línea de comandos válida.

<component>

El elemento <component> es necesario en un archivo .xml personalizado. Este elemento define la construcción más básica de un archivo .xml de migración. Por ejemplo, en el archivo MigApp.xml, “Microsoft(R) Office 2003” es un componente que contiene otro componente, “Microsoft Office Access(R) 2003”. Puedes usar estos elementos secundarios para definir el componente.

Un componente puede estar anidado dentro de otro; es decir, el elemento <component> puede ser un elemento secundario del elemento <role> dentro del elemento <component>. Esto puede suceder en dos casos: 1) cuando el elemento principal <component> es un contenedor o 2) cuando el elemento secundario <component> tiene el mismo rol que el elemento principal <component>.

  • Número de repeticiones: ilimitado

  • Elementos principales: <migration>, <role>

  • Elementos secundarios necesarios: <role>, <displayName>

  • Elementos secundarios opcionales: <manufacturer>, <version>, <description>, <paths>, <icon>, <environment>, <extensions>

Sintaxis:

<component type="System|Application|Device|Documents" context="User|System|UserAndSystem" defaultSupported="TRUE|FALSE|YES|NO"

hidden="Yes|No">

</component>

Parámetro ¿Obligatorio? Valor

type

Puedes usar lo siguiente para agrupar valores y definir el tipo que corresponde al componente.

  • System: configuración del sistema operativo. Todos los componentes de Windows(R) se definen según este tipo.

    Cuando “type” es igual a “System” y “defaultSupported” es igual a “FALSE”, la configuración no se migrará, salvo que haya un componente equivalente en los archivos .xml especificado en la línea de comandos LoadState. Por ejemplo, el archivo MigSys.xml predeterminado contiene componentes donde “type” es igual a “System” y “defaultSupported”, a “FALSE”. Si especificas este archivo en la línea de comandos ScanState, también debes especificar el archivo en la línea de comandos LoadState para que se migre la configuración. Esto sucede porque la herramienta LoadState debe encontrar un componente equivalente. Es decir, el componente debe tener el mismo atributo urlid de migración que el archivo .xml y un nombre para mostrar idéntico. De lo contrario, la herramienta LoadState no migrará esa configuración desde el almacén. Esto es útil cuando el equipo de origen ejecuta Windows XP y se migra tanto a Windows Vista® como a Windows XP, porque puedes usar el mismo almacén para los dos equipos de destino.

  • Application: configuración para una aplicación.

  • Device: configuración para un dispositivo.

  • Documents: especifica archivos.

context

No

El valor predeterminado es “UserAndSystem”

Define el ámbito de este parámetro, es decir, si este componente se debe procesar en el contexto del usuario específico, en todo el sistema operativo, o en ambos.

El ámbito más amplio posible se establece con el elemento <component>. Por ejemplo, si un elemento <component> tiene un contexto de “User” y un elemento <rules> tiene un contexto de “UserAndSystem”, el elemento <rules> se comportará como si tuviera el contexto de “User”. Si un elemento <rules> tiene un contexto de “System”, se comportará como si el elemento <rules> no existiera.

  • User: evalúa el componente por cada usuario.

  • System: evalúa el componente solo una vez en el sistema.

  • UserAndSystem: evalúa el componente de todo el sistema operativo y de cada usuario.

defaultSupported

No

El valor predeterminado es “TRUE”

Puede ser alguno de los siguientes: “TRUE”, “FALSE”, “YES” o “NO”. Si este parámetro es “FALSE” (o “NO”), el componente no se migrará, salvo que exista un componente equivalente en el equipo de destino.

Cuando “type” es igual a “System” y “defaultSupported” es igual a “FALSE”, la configuración no se migrará, salvo que haya un componente equivalente en los archivos .xml que están especificados en la línea de comandos LoadState. Por ejemplo, el archivo MigSys.xml predeterminado contiene componentes donde “type” es igual a “System” y “defaultSupported”, a “FALSE”. Si especificas este archivo en la línea de comandos ScanState, también debes especificar el archivo en la línea de comandos LoadState para que se migre la configuración. Esto sucede porque la herramienta LoadState debe encontrar un componente equivalente. Es decir, el componente debe tener el mismo atributo urlid de migración que el archivo .xml y un nombre para mostrar idéntico. Si esto no sucede, la herramienta LoadState no migrará esa configuración desde el almacén. Esto es útil cuando el equipo de origen ejecuta Windows XP y se migra tanto a Windows Vista como a Windows XP, porque puedes usar el mismo almacén para los dos equipos de destino.

hidden

 

Este parámetro es solo para uso interno de USMT.

Para obtener un ejemplo, consulta alguno de los archivos .xml de migración predeterminados.

<condition>

Aunque se admite el elemento <condition> que pertenece a los elementos <detect>, <objectSet> y <addObjects>, te recomendamos que no lo uses. Es posible que este elemento quede desusado en versiones futuras de USMT, y debas reescribir tus scripts. Te recomendamos que, en caso de que necesites usar una condición dentro de los elementos <objectSet> y <addObjects>, uses un elemento <conditions> más eficaz, que te permita formular instrucciones booleanas complejas.

El elemento <condition> tiene un resultado booleano. Puedes usar este elemento para especificar las condiciones en las que se evaluará el elemento principal. Si alguna de las condiciones actuales devuelve “FALSE”, no se evaluará el elemento principal.

  • Número de repeticiones: ilimitado

  • Elementos principales: <conditions>, <detect>, <objectSet> y <addObjects>

  • Elementos secundarios: ninguno

  • Funciones auxiliares: puedes usar las siguientes funciones Funciones <condition> con este elemento: DoesOSMatch, IsNative64Bit(), IsOSLaterThan, IsOSEarlierThan, DoesObjectExist, DoesFileVersionMatch, IsFileVersionAbove, IsFileVersionBelow, IsSystemContext, DoesStringContentEqual, DoesStringContentContain, IsSameObject, IsSameContent e IsSameStringContent.

Sintaxis:

<condition negation="Yes|No">NombreDeScript</condition>

Parámetro ¿Obligatorio? Valor

negation

No

El valor predeterminado es “No”

“Yes” revierte el valor verdadero o falso de la condición.

NombreDeScript

Un script que se definió en esta sección de la migración.

Por ejemplo:

En la muestra de código a continuación, los elementos <condition>, A y B se unen con el operador “AND” porque están en secciones <conditions> diferentes. Por ejemplo:

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

De todos modos, en la muestra de código a continuación, los elementos <condition>, A y B se unen con el operador “OR” porque están la misma sección <conditions>.

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

Funciones <condition>

La función <condition> devuelve un valor booleano. Puedes usar estos elementos con condiciones <addObjects>.

  • Funciones de la versión del sistema operativo

  • Funciones de contenido de objetos

Funciones de la versión del sistema operativo

  • DoesOSMatch

    Ninguna coincidencia distingue mayúsculas de minúsculas.

    Sintaxis: DoesOSMatch("TipoDeSO","VersiónDeSO")

    Parámetro ¿Obligatorio? Valor

    TipoDeSO

    El único valor válido para esta configuración es NT. De todos modos, ten en cuenta que debes establecer esta configuración para que las funciones <condition> operen correctamente.

    VersiónDeSO

    La versión principal, la versión secundaria, el número de compilación y la versión corregida del disquete de servicio separados por puntos. Por ejemplo, 5.0.2600.Service Pack 1. También puedes hacer una especificación parcial de la versión con un patrón. Por ejemplo, 5.0.*.

    Por ejemplo:

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

  • IsNative64Bit

    La función IsNative64Bit devuelve “TRUE” si el proceso de migración se ejecuta como un proceso nativo de 64 bits; es decir, un proceso que se ejecuta en un sistema de 64 bits sin Windows en Windows (WOW). De lo contrario, devuelve “FALSE”.

  • IsOSLaterThan

    Ninguna comparación distingue mayúsculas de minúsculas.

    Sintaxis: IsOSLaterThan("TipoDeSO","VersiónDeSO")

    Parámetro ¿Obligatorio? Valor

    TipoDeSO

    Puede ser 9x o NT. Si TipoDeSO no coincide con el tipo de sistema operativo actual, devuelve “FALSE”. Por ejemplo, si el sistema operativo actual está basado en Windows NT y TipoDeSO es “9x”, el resultado será “FALSE”.

    VersiónDeSO

    La versión principal, la versión secundaria, el número de compilación y la versión corregida del disquete de servicio separados por puntos. Por ejemplo, 5.0.2600.Service Pack 1. También puedes hacer una especificación parcial de la versión, pero no se permite usar un patrón. Por ejemplo, 5.0.

    La función IsOSLaterThan devuelve “TRUE” si el sistema operativo actual es posterior o igual a VersiónDeSO.

    Por ejemplo:

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

  • IsOSEarlierThan

    Ninguna comparación distingue mayúsculas de minúsculas.

    Sintaxis: IsOSEarlierThan("TipoDeSO","VersiónDeSO")

    Parámetro ¿Obligatorio? Valor

    TipoDeSO

    Puede ser 9x o NT. Si TipoDeSO no coincide con el tipo de sistema operativo actual, devuelve “FALSE”. Por ejemplo, si el sistema operativo actual está basado en Windows NT y TipoDeSO es “9x”, el resultado será “FALSE”.

    VersiónDeSO

    La versión principal, la versión secundaria, el número de compilación y la versión corregida del disquete de servicio separados por puntos. Por ejemplo, 5.0.2600.Service Pack 1. También puedes hacer una especificación parcial de la versión, pero no se permite usar un patrón. Por ejemplo, 5.0.

    La función IsOSEarlierThan devuelve “TRUE” si el sistema operativo actual es anterior a VersiónDeSO.

Funciones de contenido de objetos

  • DoesObjectExist

    La función DoesObjectExist devuelve “TRUE” si existe algún objeto que coincida con el patrón de la ubicación. De lo contrario, devuelve “FALSE”. El patrón de la ubicación se expande antes de tratar de realizar la enumeración.

    Sintaxis: DoesObjectExist("TipoDeObjeto","PatrónDeUbicaciónCodificado")

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto

    Define el tipo de objeto. Puede ser “File” o “Registry”.

    PatrónDeUbicaciónCodificado

    El Especificación de ubicaciones. Se permiten variables de entorno.

    Para obtener un ejemplo de este elemento, consulta el archivo MigApp.xml.

  • DoesFileVersionMatch

    La comprobación del patrón no distingue mayúsculas de minúsculas.

    Sintaxis: DoesFileVersionMatch("UbicaciónCodificadaDeArchivo","EtiquetaDeVersión","ValorDeVersión")

    Parámetro ¿Obligatorio? Valor

    UbicaciónCodificadaDeArchivo

    El Especificación de ubicaciones del archivo que se comprobará. Se permiten variables de entorno.

    EtiquetaDeVersión

    El valor de Etiquetas de versión válidas que se comprobará.

    ValorDeVersión

    Un patrón de cadena. Por ejemplo, “Microsoft*”.

    Por ejemplo:

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

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

  • IsFileVersionAbove

    La función IsFileVersionAbove devuelve “TRUE” si la versión del archivo es superior a ValorDeVersión.

    Sintaxis: IsFileVersionAbove(“UbicaciónCodificadaDeArchivo”,“EtiquetaDeVersión”,“ValorDeVersión”)

    Parámetro ¿Obligatorio? Valor

    UbicaciónCodificadaDeArchivo

    El Especificación de ubicaciones del archivo que se comprobará. Se permiten variables de entorno.

    EtiquetaDeVersión

    El valor de Etiquetas de versión válidas que se comprobará.

    ValorDeVersión

    El valor con el que se realizará la comparación. No se permite especificar un patrón.

  • IsFileVersionBelow

    Sintaxis: IsFileVersionBelow(“UbicaciónCodificadaDeArchivo”,“EtiquetaDeVersión”,“ValorDeVersión”)

    Parámetro ¿Obligatorio? Valor

    UbicaciónCodificadaDeArchivo

    El Especificación de ubicaciones del archivo que se comprobará. Se permiten variables de entorno.

    EtiquetaDeVersión

    El valor de Etiquetas de versión válidas que se comprobará.

    ValorDeVersión

    El valor con el que se realizará la comparación. No se permite especificar un patrón.

  • IsSystemContext

    La función IsSystemContext devuelve “TRUE” si el contexto actual es “System”. De lo contrario, devuelve “FALSE”.

    Sintaxis: IsSystemContext()

  • DoesStringContentEqual

    La función DoesStringContentEqual devuelve “TRUE” si la representación de cadena del objeto dado es idéntica a StringContent.

    Sintaxis: DoesStringContentEqual(“TipoDeObjeto”,“PatrónDeUbicaciónCodificado”,“ContenidoDeCadena”)

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto

    Define el tipo de objeto. Puede ser “File” o “Registry”.

    PatrónDeUbicaciónCodificado

    La Especificación de ubicaciones del objeto que se examinará. Se permite especificar variables de entorno.

    ContenidoDeCadena

    La cadena con la que se va a comprobar.

    Por ejemplo:

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

    La función DoesStringContentContain devuelve “TRUE” si hay al menos una repetición de CadenaBuscada en la representación de cadena del objeto.

    Sintaxis: DoesStringContentContain(“TipoDeObjeto”,“UbicaciónCodificada”,“CadenaBuscada”)

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto

    Define el tipo de objeto. Puede ser “File” o “Registry”.

    PatrónDeUbicaciónCodificado

    La Especificación de ubicaciones del objeto que se examinará. Se permite especificar variables de entorno.

    CadenaBuscada

    Una cadena que se buscará en el contenido de un objeto dado.

  • IsSameObject

    La función IsSameObject devuelve “TRUE” si las ubicaciones codificadas dadas dan como resultado el mismo objeto físico. De lo contrario, devuelve “FALSE”.

    Sintaxis: IsSameObject(“TipoDeObjeto”,“UbicaciónCodificada1”,“UbicaciónCodificada2”)

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto

    Define el tipo de objeto. Puede ser “File” o “Registry”.

    UbicaciónCodificada1

    La Especificación de ubicaciones del primer objeto. Se permite especificar variables de entorno.

    UbicaciónCodificada2

    La Especificación de ubicaciones del segundo objeto. Se permite especificar variables de entorno.

    Por ejemplo:

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

    La función IsSameContent devuelve “TRUE” si los objetos dados tienen el mismo contenido. De lo contrario, devuelve “FALSE”. El contenido se comparará byte por byte.

    Sintaxis: IsSameContent(“TipoDeObjeto1”,“UbicaciónCodificada1”,“TipoDeObjeto2”,“UbicaciónCodificada2”)

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto1

    Define el tipo del primer objeto. Puede ser “File” o “Registry”.

    UbicaciónCodificada1

    La Especificación de ubicaciones del primer objeto. Se permite especificar variables de entorno.

    TipoDeObjeto2

    Define el tipo del segundo objeto. Puede ser “File” o “Registry”.

    UbicaciónCodificada2

    La Especificación de ubicaciones del segundo objeto. Se permite especificar variables de entorno.

  • IsSameStringContent

    La función IsSameStringContent devuelve “TRUE” si los objetos dados tienen el mismo contenido. De lo contrario, devuelve “FALSE”. El contenido se interpretará como una cadena.

    Sintaxis: IsSameStringContent(“TipoDeObjeto1”,“UbicaciónCodificada1”,“TipoDeObjeto2”,“UbicaciónCodificada2”)

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto1

    Define el tipo del primer objeto. Puede ser “File” o “Registry”.

    UbicaciónCodificada1

    La Especificación de ubicaciones del primer objeto. Se permite especificar variables de entorno.

    TipoDeObjeto2

    Define el tipo del segundo objeto. Puede ser “File” o “Registry”.

    UbicaciónCodificada2

    La Especificación de ubicaciones del segundo objeto. Se permite especificar variables de entorno.

<conditions>

El elemento <conditions> devuelve un resultado booleano que se usa para especificar las condiciones con las que se evalúa el elemento principal. USMT evalúa los elementos secundarios y después une los resultados mediante los operadores “AND” u “OR” según el parámetro operation.

  • Número de repeticiones: ilimitado dentro de otro elemento <conditions>. Limitado a una repetición en <detection>, <rules>, <addObjects> y <objectSet>

  • Elementos principales: <conditions>, <detection>, <environment>, <rules>, <addObjects> y <objectSet>

  • Elementos secundarios: <conditions> y <condition>

Sintaxis:

<conditions operation="AND|OR">

</conditions>

Parámetro ¿Obligatorio? Valor

operation

No, el valor predeterminado es “AND”

Define la operación booleana que se realiza en los resultados obtenidos a partir de los elementos secundarios.

El siguiente ejemplo pertenece al archivo MigApp.xml:

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

<content>

Puedes usar el elemento <content> para especificar una lista de patrones de objeto y obtener un conjunto de objetos del equipo de origen. Se evalúa cada <objectSet> dentro de un elemento <content>. Por cada lista de patrón de objetos resultante, se enumeran los objetos coincidentes y el parámetro de filtrado filtra su contenido. La matriz de cadena resultante es el resultado del elemento <content>. El script de filtrado devuelve una matriz de ubicaciones. El elemento principal <objectSet> puede contener varios elementos secundarios <content>.

  • Número de repeticiones: ilimitado

  • Elementos principales: <objectSet>

  • Elementos secundarios: <objectSet>

  • Funciones auxiliares: puedes usar las siguientes funciones Funciones <content> con este elemento: ExtractSingleFile, ExtractMultipleFiles y ExtractDirectory.

Sintaxis:

<content filter=“InvocaciónDeScript”>

</content>

Parámetro ¿Obligatorio? Valor

filter

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla <include>. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

Funciones <content>

Las siguientes funciones generan patrones fuera del contenido de un objeto. Se llama a estas funciones por cada objeto que enumera el elemento principal <ObjectSet>.

  • ExtractSingleFile

    Si el valor del Registro es un valor MULTI-SZ, solo se procesa el primer segmento. El patrón devuelto es la ubicación codificada de un archivo que debe existir en el sistema. Si la especificación es correcta en el valor del Registro, pero no existe el archivo, esta función devuelve “NULL”.

    Sintaxis: ExtractSingleFile(Separadores,SugerenciasDeRutaDeAcceso)

    Parámetro ¿Obligatorio? Valor

    Separadores

    Una lista de los posibles separadores que pueden cumplir con la especificación del archivo en este nombre de valor del Registro. Por ejemplo, si el contenido es “C:\Windows\Notepad.exe,-2”, el separador es una coma. Puedes especificar “NULL”.

    SugerenciasDeRutaDeAcceso

    Una lista de rutas de acceso adicionales, separadas por signos de punto y coma (;), en las que la función busca un archivo que coincida con el contenido actual. Por ejemplo, si el contenido es “Notepad.exe” y la ruta de acceso es una variable de entorno %Path%, la función encuentra Notepad.exe en %windir% y devuelve "c:\Windows [Notepad.exe]". Puedes especificar “NULL”.

    Por ejemplo:

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

    y

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

    La función ExtractMultipleFiles devuelve varios patrones, uno por cada archivo encontrado en el contenido de cada valor del Registro dado. Si el valor del Registro es un valor MULTI-SZ, se considera que el separador MULTI-SZ es el separador predeterminado. Por lo tanto, para los valores MULTI-SZ, el argumento <Separators> debe ser “NULL”.

    El patrón devuelto son las ubicaciones codificadas de archivos que deben existir en el equipo de origen. Si la especificación es correcta en el valor del Registro, pero no existe el archivo, no se incluirá en la lista resultante.

    Sintaxis: ExtractMultipleFiles(Separadores,SugerenciasDeRutaDeAcceso)

    Parámetro ¿Obligatorio? Valor

    Separadores

    Una lista de los posibles separadores que pueden cumplir con la especificación del archivo en este nombre de valor del Registro. Por ejemplo, si el contenido es “C:\Windows\Notepad.exe,-2”, el separador es una coma. Este parámetro debe ser “NULL” al procesar los valores del Registro MULTI-SZ.

    SugerenciasDeRutaDeAcceso

    Una lista de rutas de acceso adicionales, separadas por signos de punto y coma (;), en las que la función busca un archivo que coincida con el contenido actual. Por ejemplo, si el contenido es “Notepad.exe” y la ruta de acceso es una variable de entorno %Path%, la función encuentra Notepad.exe en %windir% y devuelve "c:\Windows [Notepad.exe]". Puedes especificar “NULL”.

  • ExtractDirectory

    La función ExtractDirectory devuelve un patrón que es la ubicación codificada de un directorio que debe existir en el equipo de origen. Si la especificación es correcta en el valor del Registro, pero no existe el directorio, esta función devuelve “NULL”. Si procesa un valor del Registro que es un valor MULTI-SZ, solo se procesa el primer segmento.

    Sintaxis: ExtractDirectory(Separadores,NivelesParaRecortar,SufijoDePatrón)

    Parámetro ¿Obligatorio? Valor

    Separadores

    No

    Una lista de los posibles separadores que pueden cumplir con la especificación del archivo en este nombre de valor del Registro. Por ejemplo, si el contenido es “C:\Windows\Notepad.exe,-2”, el separador es una coma. Debes especificar “NULL” al procesar los valores MULTI-SZ del Registro.

    NivelesParaRecortar

    La cantidad de niveles para eliminar del final de la especificación del directorio. Usa esta función para extraer un directorio raíz cuando exista un valor del Registro que indique ese directorio raíz en una ubicación conocida.

    SufijoDePatrón

    El patrón para agregar a la especificación del directorio. Por ejemplo, * [*].

    Por ejemplo:

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

<contentModify>

El elemento <contentModify> modifica el contenido de un objeto antes de que se escriba en el equipo de destino. Por cada elemento <contentModify> puede haber varios elementos <objectSet>. Este elemento devuelve el contenido nuevo del objeto que se procesa.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios necesarios: <objectSet>

  • Funciones auxiliares: puedes usar las siguientes funciones Funciones <contentModify> con este elemento: ConvertToDWORD, ConvertToString, ConvertToBinary, KeepExisting, OffsetValue, SetValueByTable, MergeMultiSzContent y MergeDelimitedContent.

Sintaxis:

<contentModify script=“InvocaciónDeScript”>

</contentModify>

Parámetro ¿Obligatorio? Valor

script

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, , MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla de inclusión. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

Funciones <contentModify>

Las siguientes funciones modifican el contenido de los objetos a medida que se migran. Se llama a estas funciones por cada objeto que enumera el elemento principal <ObjectSet>.

  • ConvertToDWORD

    La función ConvertToDWORD convierte el contenido de los valores del Registro que enumera el elemento principal <ObjectSet> a un DWORD. Por ejemplo, ConvertToDWORD convertirá la cadena “1” al 0x00000001 de DWORD. Si se produce un error de conversión, se aplicará el valor de ValorPredeterminadoAnteError.

    Sintaxis: ConvertToDWORD(ValorPredeterminadoAnteError)

    Parámetro ¿Obligatorio? Valor

    ValorPredeterminadoAnteError

    No

    El valor que se escribirá en el nombre del valor si se produce un error en la conversión. Puedes especificar “NULL”. En ese caso, se escribirá “0” si hay un error en la conversión.

  • ConvertToString

    La función ConvertToString convierte el contenido de los valores del Registro que coinciden con el elemento principal <ObjectSet> a una cadena. Por ejemplo, convertirá el valor 0x00000001 de DWORD al string “1”. Si se produce un error de conversión, se aplicará el valor de ValorPredeterminadoAnteError.

    Sintaxis: ConvertToString(ValorPredeterminadoAnteError)

    Parámetro ¿Obligatorio? Valor

    ValorPredeterminadoAnteError

    No

    El valor que se escribirá en el nombre del valor si se produce un error en la conversión. Puedes especificar “NULL”. En ese caso, se escribirá “0” si hay un error en la conversión.

    Por ejemplo:

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

    La función ConvertToBinary convierte el contenido de los valores del Registro que coinciden con el elemento principal <ObjectSet> a un tipo binario.

    Sintaxis: ConvertToBinary ()

  • OffsetValue

    La función OffsetValue suma o resta Valor del valor del objeto migrado y después vuelve a escribir el resultado en el valor del Registro del equipo de destino. Por ejemplo, si el objeto migrado es un DWORD con un valor de 14 y el Valor es “-2”, el valor del Registro será 12 en el equipo de destino.

    Sintaxis: OffsetValue(Valor)

    Parámetro ¿Obligatorio? Valor

    Valor

    La representación de cadena de un valor numérico. Puede ser positivo o negativo. Por ejemplo, OffsetValue(2).

  • SetValueByTable

    La función SetValueByTable iguala el valor del equipo de origen con la tabla de origen. Si existe el valor, se aplicará el valor equivalente de la tabla de destino. Si no existe el valor o si no hay un valor equivalente en la tabla de destino, se aplicará el valor ValorPredeterminadoAnteError.

    Sintaxis: SetValueByTable(TablaDeOrigen,TablaDeDestino,ValorPredeterminadoAnteError)

    Parámetro ¿Obligatorio? Valor

    TablaDeOrigen

    Una lista de valores, separados por comas, que son posibles para los valores de origen del Registro.

    TablaDeDestino

    No

    Una lista de valores traducidos separados por comas.

    ValorPredeterminadoAnteError

    No

    El valor que se aplicará en el equipo de destino en alguno de los siguientes casos: 1) el valor del equipo de origen no coincide con TablaDeOrigen o 2) TablaDeDestino no tiene valor equivalente.

    Si ValorPredeterminadoAnteError es “NULL”, no se modificará el valor en el equipo de destino.

  • KeepExisting

    Puedes usar la función KeepExisting cuando haya conflictos en el equipo de destino. Esta función mantiene (no sobrescribe) los atributos especificados del objeto que se encuentra en el equipo de destino.

    Sintaxis: KeepExisting(“CadenaDeOpción”,“CadenaDeOpción”,“CadenaDeOpción”,…)

    Parámetro ¿Obligatorio? Valor

    CadenaDeOpción

    CadenaDeOpción puede ser Security, TimeFields o FileAttrib:Letra. Puedes especificar uno de cada tipo de CadenasDeOpción. No especifiques varias CadenaDeOpción con el mismo valor. Si lo haces, se mantendrá la opción más a la derecha de ese tipo. Por ejemplo, no especifiques (“FileAttrib:H”, “FileAttrib:R”), porque solo se evaluarán los atributos “Read-only”. En su lugar, especifica (“FileAttrib:HR”) y se mantendrán en el equipo de destino tanto los atributos “Hidden” como los “Read-only”.

    • Security. Mantiene el descriptor de seguridad del objeto de destino, si existe.

    • TimeFields. Mantiene las marcas de tiempo del objeto de destino. Este parámetro es solo para archivos.

    • FileAttrib:Letra. Mantiene el valor de atributo del objeto de destino, ya sea “On” u “OFF”, en el conjunto de atributos de archivo especificado. Este parámetro es solo para archivos. Los siguientes valores no distinguen mayúsculas de minúsculas, pero USMT omitirá los valores no válidos o repetidos, o si existe un espacio después de “FileAttrib:”. Puedes especificar cualquier combinación de los siguientes atributos:

      • A = Archivo

      • C = Comprimido

      • E = Cifrado

      • H = Oculto

      • I = No indizado por contenido

      • O = Sin conexión

      • R = Solo lectura

      • S = Sistema

      • T = Temporal

  • MergeMultiSzContent

    La función MergeMultiSzContent combina el contenido MULTI-SZ de los valores del Registro enumerados por el elemento principal <ObjectSet> con el contenido de los valores del Registro equivalentes que ya existen en el equipo de destino. Instruction y String quitan o agregan contenido al MULTI-SZ resultante. Se eliminarán los elementos duplicados.

    Sintaxis: MergeMultiSzContent (Instrucción,Cadena,Instrucción,Cadena,…)

    Parámetro ¿Obligatorio? Valor

    Instrucción

    Puede ser uno de los siguientes valores:

    • Add. Agrega la cadena correspondiente al MULTI-SZ resultante si aún no se encuentra allí.

    • Remove. Quita la cadena correspondiente del MULTI-SZ resultante.

    Cadena

    La cadena que se agregará o se quitará.

  • MergeDelimitedContent

    La función MergeDelimitedContent combina el contenido MULTI-SZ de los valores del Registro enumerados por el elemento principal <ObjectSet> con el contenido de los valores del Registro equivalentes que ya existen en el equipo de destino. El contenido se considera una lista de elementos separados por uno de los caracteres del parámetro “Delimitadores”. Se eliminarán los elementos duplicados.

    Sintaxis: MergeDelimitedContent(Delimitadores,Instrucción,Cadena,…)

    Parámetro ¿Obligatorio? Valor

    Delimitadores

    Un carácter único que se usará para separar el contenido del objeto que se procesa. El contenido se considerará una lista de elementos separada por el valor Delimitadores.

    Por ejemplo, “.” separará la cadena en función del punto.

    Instrucción

    Puede ser una de las siguientes:

    • Add. Agrega Cadena al MULTI-SZ resultante si aún no se encuentra allí.

    • Remove. Quita Cadena del MULTI-SZ resultante.

    Cadena

    La cadena que se agregará o se quitará.

<description>

El elemento <description> define una descripción del componente pero no afecta a la migración.

  • Número de repeticiones: cero o una

  • Elementos principales: <component>

  • Elementos secundarios: ninguno

Sintaxis:

<description>DescripciónDelComponente</description>

Parámetro ¿Obligatorio? Valor

DescripciónDelComponente

La descripción del componente.

En la siguiente muestra de código, se muestra cómo el elemento <description> define la descripción “My custom component”:

<description>My custom component<description>

<destinationCleanup>

El elemento <destinationCleanup> elimina objetos, como archivos y claves del Registro, del equipo de destino, antes de aplicar los objetos del equipo de origen. El elemento se evalúa solo cuando la herramienta LoadState se ejecuta en el equipo de destino. Es decir, la herramienta ScanState omite este elemento.

Importante

Usa esta opción con mucho cuidado, ya que eliminará objetos del equipo de destino.

Por cada elemento <destinationCleanup> puede haber varios elementos <objectSet>. Este elemento suele usarse cuando falta una clave del Registro en el equipo de origen y quieres asegurarte de que se migró un componente. En este caso, puedes eliminar todas las claves del Registro del componente antes de migrar las claves del Registro de origen. De este modo, podrás asegurarte de que si falta una clave en el equipo de origen, también faltará en el equipo de destino.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios: <objectSet> (Ten en cuenta que el equipo de destino eliminará todos los elementos secundarios).

Sintaxis:

<destinationCleanup filter=InvocaciónDeScript>

</destinationCleanup>

Parámetro ¿Obligatorio? Valor

filter

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, , MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla de inclusión. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

Por ejemplo:

<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>

Si bien todavía se admite el elemento <detect>, no recomendamos usarlo, ya que es posible que este elemento quede desusado en versiones futuras de USMT. En ese caso, tendrás que reescribir tus scripts. Como alternativa, te recomendamos que uses el elemento <detection>.

Puedes usar el elemento <detect> para determinar si el componente está presente en el sistema. Si todos los elementos secundarios <detect> dentro de un elemento <detect> dan como resultado “TRUE”, el elemento <detect> da como resultado “TRUE”. Si algún elemento secundario <detect> da como resultado “FALSE”, el elemento principal <detect> da como resultado “FALSE”. Si no existe la sección de elementos <detect>, USMT supone que el componente está presente.

Por cada elemento <detect> puede haber varios elementos secundarios <condition> u <objectSet>, que se unirán de modo lógico con el operador “OR”. Si al menos un elemento <condition> u <objectSet> da como resultado “TRUE”, el elemento <detect> da como resultado “TRUE”.

  • Número de repeticiones: ilimitado

  • Elementos principales: <detects>, <namedElements>

  • Elementos secundarios necesarios: <condition>

  • Elementos secundarios opcionales: <objectSet>

Sintaxis:

<detect name=“Id” context="User|System|UserAndSystem">

</detect>

Parámetro ¿Obligatorio? Valor

nombre

Sí, cuando <detect> es secundario de <namedElements>

Sí, cuando <detect> es secundario de <detects>

Cuando se especifica Id, no se procesa ningún elemento secundario. En cambio, se procesan todos los elementos <detect> restantes con el mismo nombre que estén indicados dentro del elemento <namedElements>.

context

No

El valor predeterminado es “UserAndSystem”

Define el ámbito de este parámetro, es decir, si este componente se debe procesar en el contexto del usuario específico, en todo el sistema operativo, o en ambos.

El ámbito más amplio posible se establece con el elemento <component>. Por ejemplo, si un elemento <component> tiene un contexto de “User” y un elemento <rules> tiene un contexto de “UserAndSystem”, el elemento <rules> se comportará como si tuviera el contexto de “User”. Si el elemento <rules> tiene un contexto de “System”, se comportará como si el elemento <rules> no existiera.

  • User: evalúa las variables de cada usuario.

  • System: evalúa las variables solo una vez en el sistema.

  • UserAndSystem: evalúa las variables de todo el sistema operativo y de cada usuario.

Para obtener ejemplos, consulta los ejemplos de <detection>.

<detects>

Si bien todavía se admite el elemento <detects>, no recomendamos usarlo, ya que es posible que este elemento quede desusado en versiones futuras de USMT. Si esto sucede, tendrás que reescribir tus scripts. Como alternativa, si el elemento principal es <role> o <namedElements>, te recomendamos que uses el elemento <detection> y, si el elemento principal es <rules>, te recomendamos que uses el elemento <conditions>. Con <detection>, podrás formular instrucciones booleanas complejas de forma más clara.

El elemento <detects> es un contenedor de uno o varios elementos <detect>. Si todos los elementos secundarios <detect> dentro de un elemento <detects> dan como resultado “TRUE”, <detects> da como resultado “TRUE”. Si todos los elementos secundarios <detect> dan como resultado “FALSE”, <detects> da como resultado “FALSE”. Si no quieres escribir los elementos <detects> en un componente, puedes crear el elemento <detects> en el elemento <namedElements> y después consultarlo. Si no existe la sección de elementos <detects>, USMT supone que el componente está presente. Los resultados de cada elemento <detects> se unen con el operador “OR” para formar la regla usada para detectar el elemento principal.

Sintaxis:

<detects name=“Id” context="User|System|UserAndSystem">

</detects>

  • Número de repeticiones: ilimitado

  • Elementos principales: <role>, <rules>, <namedElements>

  • Elementos secundarios necesarios: <detect>

Parámetro ¿Obligatorio? Valor

nombre

Sí, cuando <detects> es secundario de <namedElements>

Sí, cuando <detects> es secundario de <role> o <rules>

Cuando se especifica Id, no se procesan elementos secundarios <detect>. En cambio, se procesan todos los elementos <detects> restantes con el mismo nombre que estén indicados dentro del elemento <namedElements>.

context

No

El valor predeterminado es “UserAndSystem”

Define el ámbito de este parámetro, es decir, si este componente se debe procesar en el contexto del usuario específico, en todo el sistema operativo, o en ambos.

El ámbito más amplio posible se establece con el elemento <component>. Por ejemplo, si un elemento <component> tiene un contexto de “User” y un elemento <rules> tiene un contexto de “UserAndSystem”, el elemento <rules> se comportará como si tuviera el contexto de “User”. Si el elemento <rules> tiene un contexto de “System”, se comportará como si el elemento <rules> no existiera.

  • User: evalúa las variables de cada usuario.

  • System: evalúa las variables solo una vez en el sistema.

  • UserAndSystem: evalúa las variables de todo el sistema operativo y de cada usuario.

Se omite el parámetro de contexto <detects> en los elementos que se encuentran dentro de elementos <rules>.

El siguiente ejemplo pertenece al archivo 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>

<detection>

El elemento <detection> es un contenedor de un elemento <conditions>. El resultado de los elementos secundarios <condition>, ubicados debajo del elemento <conditions>, determina el resultado de este elemento. Por ejemplo, si todos los elementos secundarios <conditions> dentro de un elemento <detection> dan como resultado “TRUE”, el elemento <detection> da como resultado “TRUE”. Si algún elemento secundario <conditions> da como resultado “FALSE”, el elemento <detection> da como resultado “FALSE”.

Además, los resultados de cada sección <detection> dentro del elemento <role> se unen con el operador “OR” para formar la regla de detección del elemento principal. Es decir, si una de las secciones <detection> da como resultado “TRUE”, se procesará el elemento <role>. De lo contrario, no se procesará el elemento <role>.

Usa el elemento <detection> en el elemento <namedElements> si no quieres escribirlo en un componente. Después, incluye una sección <detection> coincidente del elemento <role> para controlar si se migra el componente. Si no existe la sección <detection> de un componente, USMT supone que el componente está presente.

  • Número de repeticiones: ilimitado

  • Elementos principales: <role>, <namedElements>

  • Elementos secundarios: <conditions>

Sintaxis:

<detection name=“Id” context="User|System|UserAndSystem">

</detection>

Parámetro ¿Obligatorio? Valor

nombre

  • Sí, cuando <detection> está indicado en <namedElements>

  • Opcional, cuando está indicado en <role>

Si está indicado, se omite el contenido del elemento <detection> y se evalúa el contenido del elemento <detection> con el mismo nombre que el indicado en el elemento <namedElements>.

context

No, el valor predeterminado es “UserAndSystem”

Define el ámbito de este parámetro, es decir, si este componente se debe procesar en el contexto del usuario específico, en todo el sistema operativo, o en ambos.

  • User: evalúa el componente por cada usuario.

  • System: evalúa el componente solo una vez en el sistema.

  • UserAndSystem: evalúa el componente de todo el sistema operativo y de cada usuario.

Por ejemplo:

<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>

y

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

<displayName>

El elemento <displayName> es un campo obligatorio dentro de cada elemento <component>.

  • Número de repeticiones: una vez por cada componente

  • Elementos principales: <component>

  • Elementos secundarios: ninguno

Sintaxis:

<displayName _locID=“Id”>NombreDelComponente</displayName>

Parámetro ¿Obligatorio? Valor

locID

No

Este parámetro es para uso interno de USMT. No uses este parámetro.

NombreDelComponente

El nombre del componente.

Por ejemplo:

<displayName>Command Prompt settings</displayName>

<environment>

El elemento <environment> es un contenedor de elementos <variable> en el que puedes definir variables que usarás en el archivo .xml. Todas las variables de entorno definidas de este modo serán privadas. Es decir, solo estarán disponibles para los elementos secundarios correspondientes y para el componente en el que se definieron. Para obtener dos escenarios de ejemplo, consulta Ejemplos.

  • Número de repeticiones: ilimitado

  • Elementos principales: <role>, <component>, <namedElements>

  • Elementos secundarios necesarios: <variable>

  • Elementos secundarios opcionales: <conditions>

Sintaxis:

<environment name="ID" context="User|System|UserAndSystem">

</environment>

Parámetro ¿Obligatorio? Valor

nombre

Sí, cuando <environment> es secundario de <namedElements>

Sí, cuando <environment> es secundario de <role> o <component>

Cuando se indica que es secundario de los elementos <role> o <component>, si se indica Id, USMT omite el contenido del elemento <environment>, y se procesa el contenido del elemento <environment> con el mismo nombre indicado en <namedElements>.

context

No

El valor predeterminado es “UserAndSystem”

Define el ámbito de este parámetro, es decir, si este componente se debe procesar en el contexto del usuario específico, en todo el sistema operativo, o en ambos.

El ámbito más amplio posible se establece con el elemento <component>. Por ejemplo, si un elemento <component> tiene un contexto de “User” y un elemento <rules> tiene un contexto de “UserAndSystem”, el elemento <rules> se comportará como si tuviera el contexto de “User”. Si el elemento <rules> tiene un contexto de “System”, se comportará como si <rules> no existiera.

  • User: evalúa las variables de cada usuario.

  • System: evalúa las variables solo una vez en el sistema.

  • UserAndSystem: evalúa las variables de todo el sistema operativo y de cada usuario.

Escenario de ejemplo 1

En este escenario, quieres generar la ubicación de objetos en tiempo de ejecución en función de la configuración del equipo de destino. Por ejemplo, debes hacer esto si una aplicación escribe datos en el directorio donde está instalada, y los usuarios pueden instalar la aplicación en cualquier ubicación del equipo. Si la aplicación escribe un valor del Registro hklm\software\companyname\install [path] y después actualiza este valor con la ubicación en la que está instalada la aplicación, el único modo de migrar correctamente los datos necesarios es definir una variable de entorno. Por ejemplo:

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

Después, puedes usar una regla include, como se muestra a continuación. Puedes usar alguna de las funciones Funciones <script> para realizar tareas similares.

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

Después, también puedes filtrar valores del Registro que contienen datos que necesitas. En el siguiente ejemplo, se extrae la primera cadena (antes del deparador “,”) en el valor del Registro 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>

Escenario de ejemplo 2

En este escenario, quieres migrar cinco archivos denominados File1.txt, File2.txt, etc., desde %SYSTEMDRIVE%\data\userdata\dir1\dir2\. Para hacerlo, la siguiente regla <include> debe estar incluida en un archivo .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>

En lugar de escribir la ruta de acceso cinco veces, puedes crear una variable para la ubicación, como se muestra a continuación:

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

Después, puedes especificar la variable en una regla <include>, como se muestra a continuación.

<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>

El elemento <exclude> determina qué objetos no se migrarán, salvo que exista un elemento <include> más específico que migre un objeto. Si existe un elemento <include> y un elemento <exclude> para el mismo objeto, este se incluirá. Por cada elemento <exclude> puede haber varios elementos <objectSet> secundarios.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios: <objectSet>

  • Funciones auxiliares: puedes usar las siguientes funciones de filtro Funciones de filtro <include> y <exclude> con este elemento: CompareStringContent, IgnoreIrrelevantLinks, AnswerNo, NeverRestore y SameRegContent.

Sintaxis:

<exclude filter=“InvocaciónDeScript”>

</exclude>

Parámetro ¿Obligatorio? Valor

filter

No

El valor predeterminado es “No”

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, , MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla de inclusión. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

El siguiente ejemplo pertenece al archivo 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>

Puedes usar el elemento <excludeAttributes> para determinar qué parámetros asociados con un objeto no se migrarán. Si existen conflictos entre los elementos <includeAttributes> y <excludeAttributes>, el patrón más específico determina los patrones que no se migrarán. Si un objeto no tiene un elemento <includeAttributes> ni <excludeAttributes>, se migrarán todos sus parámetros.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios: <objectSet>

Sintaxis:

<excludeAttributes attributes="Security|TimeFields|Security,TimeFields">

</excludeAttributes>

Parámetro ¿Obligatorio? Valor

attributes

Especifica los atributos que se excluirán. Puedes especificar alguno de los siguientes, o ambos, separados con comillas. Por ejemplo: "Security","TimeFields":

  • El valor de “Security” puede ser “Owner”, “Group”, “DACL” o “SACL”.

  • El valor de “TimeFields” puede ser “CreationTime”, “LastAccessTime” y “LastWrittenTime”.

Ejemplo:

<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/miguser">
<!-- This component migrates My Video files -->
   <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>

El elemento <extensions> es un contenedor de uno o varios elementos <extension>.

  • Número de repeticiones: cero o una

  • Elementos principales: <component>

  • Elementos secundarios necesarios: <extension>

Sintaxis:

<extensions>

</extensions>

<extension>

Puedes usar el elemento <extension> para especificar documentos de una extensión específica.

  • Número de repeticiones: ilimitado

  • Elementos principales: <extensions>

  • Elementos secundarios: ninguno

Sintaxis:

<extension>ExtensiónDeArchivo</extension>

Parámetro ¿Obligatorio? Valor

ExtensiónDeArchivo

Una extensión de nombre de archivo

Por ejemplo, si quieres migrar todos los archivos *.doc del equipo de origen, especificar el siguiente código en el elemento <component>:

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

supone lo mismo que especificar el siguiente código en el elemento <rules>:

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

Para obtener otro ejemplo de cómo usar el elemento <extension>, consulta el ejemplo de <excludeAttributes>.

<externalProcess>

Puedes usar el elemento <externalProcess> para ejecutar una línea de comandos durante el proceso de migración. Por ejemplo, tal vez quieras ejecutar un comando una vez que finaliza el proceso de LoadState.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios necesarios: <commandLine>

Sintaxis:

<externalProcess when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">

</externalProcess>

Parámetro ¿Obligatorio? Valor

when

Indica cuándo debe ejecutarse una línea de comandos. Este valor puede ser uno de los siguientes:

  • pre-scan, antes de que comience el proceso de detección.

  • scan-success, una vez que finalice correctamente el proceso de detección.

  • post-scan, una vez que finalice el proceso de detección, de modo correcto o incorrecto.

  • pre-apply, antes de que comience el proceso de aplicación.

  • apply-success, una vez que finalice correctamente el proceso de aplicación.

  • post-apply, una vez que finalice el proceso de aplicación, de modo correcto o incorrecto.

Para obtener otro ejemplo de cómo usar el elemento <externalProcess>, consulta el ejemplo de <excludeAttributes>.

<icon>

Este elemento es interno de USMT. No lo uses.

<include>

El elemento <include> determina qué migrar, salvo que exista una regla <exclude> más específica. Puedes especificar que un script sea más específico para extender la definición de lo que quieres recopilar. Por cada elemento <include> puede haber varios elementos <objectSet>.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elemento secundario necesario: <objectSet>

  • Funciones auxiliares: puedes usar las siguientes funciones de filtro Funciones de filtro <include> y <exclude> con este elemento: CompareStringContent, IgnoreIrrelevantLinks, AnswerNo y NeverRestore.

Sintaxis:

<include filter=“InvocaciónDeScript”>

</include>

Parámetro ¿Obligatorio? Valor

filter

No.

Si no se especifica este parámetro, se procesarán todos los patrones dentro del elemento secundario <ObjectSet>.

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, , MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla <include>. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

El siguiente ejemplo pertenece al archivo 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>

Funciones de filtro <include> y <exclude>

Las siguientes funciones devuelven un valor booleano. Puedes usarlas para migrar ciertos objetos en función de cuándo se cumplen ciertas condiciones.

  • AnswerNo

    Este filtro siempre devuelve “FALSE”.

    Sintaxis: AnswerNo ()

  • CompareStringContent

    Sintaxis: CompareStringContent(“ContenidoDeCadena”,“TipoDeComparación”)

    Parámetro ¿Obligatorio? Valor

    ContenidoDeCadena

    La cadena con la que se va a comparar.

    TipoDeComparación

    Una cadena. Usa uno de los siguientes valores:

    • Equal (no distingue mayúsculas de minúsculas). La función devuelve “TRUE” si la representación de cadena del objeto actual que procesa el motor de migración es idéntica a StringContent.

    • NULLo cualquier otro valor. La función devuelve “TRUE” si la representación de cadena del objeto actual que procesa el motor de migración no coincide con StringContent.

  • IgnoreIrrelevantLinks

    Este filtro encuentra los archivos .lnk que indican un objeto que no es válido en el equipo de destino. Ten en cuenta que este filtrado se realiza en el equipo de destino, de modo que todos los archivos .lnk se guardarán en el almacén durante el proceso de ScanState. Después, cuando ejecutes la herramienta LoadState, estos archivos se filtrarán.

    Sintaxis: IgnoreIrrelevantLinks ()

    Por ejemplo:

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

    Puedes usar esta función para recopilar los objetos especificados del equipo de origen pero no migrarlos al equipo de destino. Cuando ejecutas la herramienta ScanState, esta función da como resultado “TRUE”. Cuando ejecutas la herramienta LoadState, esta función da como resultado “FALSE”. Tal vez quieras usar esta función cuando decidas comprobar el valor de un objeto del equipo de destino, pero sin migrarlo a este.

    Sintaxis: NeverRestore()

    En el ejemplo siguiente, HKCU\Control Panel\International [Locale] se incluirá en el almacén, pero no se migrará al equipo de destino:

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

<includeAttributes>

Puedes usar el elemento <includeAttributes> para determinar si determinados parámetros asociados con un objeto se migrarán junto con el objeto. Si existen conflictos entre los elementos <includeAttributes> y <excludeAttributes>, el patrón más específico determina los parámetros que se migrarán. Si un objeto no tiene un elemento <includeAttributes> ni <excludeAttributes>, se migrarán todos sus parámetros.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios: <objectSet>

Sintaxis:

<includeAttributes attributes="Security|TimeFields|Security,TimeFields">

</includeAttributes>

Parámetro ¿Obligatorio? Valor

attributes

Especifica los atributos que se incluirán con el objeto migrado. Puedes especificar alguno de los siguientes, o ambos, separados con comillas. Por ejemplo: "Security","TimeFields":

  • “Security” puede ser uno de los siguientes valores:

    • Owner. El propietario del objeto (SID).

    • Group. El grupo principal del objeto (SID).

    • DACL (lista de control de acceso discrecional). Una lista de control de acceso que controla el propietario de un objeto y que especifica el acceso al objeto que pueden tener los usuarios o grupos específicos.

    • SACL (lista de control de acceso del sistema). Una lista de control de acceso (ACL) que controla la generación de mensajes de auditoría cuando se trata de obtener acceso a un objeto protegible. La capacidad de obtener o establecer la SACL de un objeto se controla mediante un privilegio que suelen tener únicamente los administradores del sistema.

  • “TimeFields” puede ser uno de los siguientes valores:

    • CreationTime. Especifica la hora en la que se creó el archivo o el directorio.

    • LastAccessTime. Especifica la hora de la última vez que el archivo se escribió o se leyó y, en el caso de archivos ejecutables, la última vez que se ejecutó.

    • LastWrittenTime. Especifica la hora de la última vez que el archivo se escribió, se truncó o se sobrescribió.

Para obtener otro ejemplo de cómo usar el elemento <includeAttributes>, consulta el ejemplo de <excludeAttributes>.

<library>

Este elemento es interno de USMT. No lo uses.

<location>

El elemento <location> define la ubicación del elemento <object>.

  • Número de repeticiones: una por cada <object>

  • Elementos principales: <object>

  • Elementos secundarios: <script>

Sintaxis:

<location type=“IdDeTipo”>UbicaciónDelObjeto</location>

Parámetro ¿Obligatorio? Valor

type

IdDeTipo puede ser “File” o “Registry”.

UbicaciónDelObjeto

La ubicación del componente.

El siguiente ejemplo pertenece al archivo MigApp.xml:

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

<locationModify>

Puedes usar el elemento <locationModify> para cambiar la ubicación y el nombre de un objeto antes de que se migre al equipo de destino. El elemento <locationModify> solo se procesa cuando la herramienta LoadState se ejecuta en el equipo de destino. Es decir, la herramienta ScanState omite este elemento. El elemento <locationModify> creará la carpeta adecuada en el equipo de destino si todavía no existe.

Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elemento secundario necesario: <objectSet>

  • Funciones auxiliares: puedes usar las siguientes funciones Funciones <locationModify> con este elemento: ExactMove, RelativeMove y Move.

Sintaxis:

<locationModify script=“InvocaciónDeScript”>

</locationModify>

Parámetro ¿Obligatorio? Valor

script

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, , MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla de inclusión. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

El siguiente ejemplo pertenece al archivo 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>

Funciones <locationModify>

Las siguientes funciones cambian la ubicación de los objetos con el elemento <locationModify> a medida que se migran. Se llama a estas funciones por cada objeto que enumera el elemento principal <ObjectSet>. El elemento <locationModify> creará la carpeta adecuada en el equipo de destino si todavía no existe.

  • ExactMove

    La función ExactMove mueve todos los objetos que coinciden con el elemento principal <ObjectSet> en la UbicaciónCodificadaDeObjeto dada. Puedes usar esta función cuando quieras mover un solo archivo a una ubicación diferente en el equipo de destino. Si la ubicación de destino es un nodo, todos los objetos de origen coincidentes se escribirán en el nodo sin subdirectorios. Si la ubicación de destino es una hoja, el motor de migración migrará todos los objetos de origen coincidentes a la misma ubicación. Si se produce una colisión, se aplicarán los algoritmos de colisión normales.

    Sintaxis: ExactMove(UbicaciónCodificadaDeObjeto)

    Parámetro ¿Obligatorio? Valor

    UbicaciónCodificadaDeObjeto

    La Especificación de ubicaciones de destino de todos los objetos de origen.

    Por ejemplo:

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

    La función Move mueve objetos a una ubicación diferente del equipo de destino. Además, esta función crea los subdirectorios que se encontraban sobre el valor CSIDL más extenso en el nombre del objeto de origen.

    Sintaxis: Move(RaízDeDestino)

    Parámetro ¿Obligatorio? Valor

    RaízDeDestino

    La ubicación a la que se moverán los objetos de origen. Si es necesario, esta función creará los subdirectorios que se encontraban sobre el valor CSIDL más extenso en el nombre del objeto de origen.

  • RelativeMove

    Puedes usar la función RelativeMove para recopilar y mover datos. Ten en cuenta que puedes usar variables de entorno en las raíces de origen y de destino, pero es posible que se definan de otro modo en los equipos de origen y de destino.

    Sintaxis: RelativeMove(RaízDeOrigen,RaízDeDestino)

    Parámetro ¿Obligatorio? Valor

    RaízDeOrigen

    La ubicación desde la que se moverán los objetos de origen. No se moverán los objetos de origen que enumera el elemento principal <ObjectSet> y no se encuentran en esta ubicación.

    RaízDeDestino

    La ubicación a la que se moverán los objetos de origen en el equipo de destino. Si es necesario, esta función creará los subdirectorios que se encontraban sobre RaízDeOrigen.

    Por ejemplo:

    <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>

Este elemento es interno de USMT. No lo uses.

<manufacturer>

El elemento <manufacturer> define el fabricante del componente, pero no afecta la migración.

  • Número de repeticiones: cero o una

  • Elementos principales: <component>

  • Elementos secundarios: ninguno

Sintaxis:

<manufacturer>Nombre</manufacturer>

Parámetro ¿Obligatorio? Valor

Nombre

El nombre del fabricante del componente.

<merge>

El elemento <merge> determina lo que sucederá cuando se produce una colisión. Se genera una colisión cuando un objeto que se migra ya existe en el equipo de destino. Si no especificas este elemento, el comportamiento predeterminado del registro hará que el objeto de origen sobrescriba el objeto de destino. En los archivos, el comportamiento predeterminado hará que se cambie el nombre del archivo de origen a “OriginalFileName(1).OriginalExtension”. Este elemento solo especifica lo que se debe hacer cuando se genera una colisión. No se incluyen los objetos. Por lo tanto, para que se migren los objetos que quieres, debes especificar reglas <include> junto con el elemento <merge>. Cuando se detecte una colisión al procesar un objeto, USMT seleccionará la regla de combinación más específica y la aplicará para resolver el conflicto. Por ejemplo, si tienes una regla <merge> C:\* [*] establecida en <sourcePriority>, y una regla <merge> C:\subfolder\* [*] establecida en <destinationPriority>, USMT usará la regla <destinationPriority> porque es más específica.

Para obtener un ejemplo de este elemento, consulta el tema sobre el funcionamiento de <merge> cuando hay conflictos en el equipo de destino.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elemento secundario necesario: <objectSet>

  • Funciones auxiliares: puedes usar las siguientes funciones Funciones <merge> con este elemento: SourcePriority, DestinationPriority, FindFilePlaceByPattern, LeafPattern, NewestVersion, HigherValue() y LowerValue().

Sintaxis:

<merge script=“InvocaciónDeScript”>

</merge>

Parámetro ¿Obligatorio? Valor

script

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, , MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla <include>. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

El siguiente ejemplo pertenece al archivo 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>

Funciones <merge>

Estas funciones controlan el modo de resolver las colisiones.

  • DestinationPriority

    Especifica que se mantenga el objeto que se encuentra en el equipo de destino y que no se migre el objeto del equipo de origen.

    Por ejemplo:

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

    La función FindFilePlaceByPattern guarda los archivos con un contador incremental cuando se produce una colisión. Es una cadena que contiene una instrucción de cada uno de los siguientes tipos: <F>, <E> y <N>, en cualquier orden.

    Sintaxis: FindFilePlaceByPattern(PatrónDeArchivo )

    Parámetro ¿Obligatorio? Valor

    PatrónDeArchivo

    • <F> se reemplazará con el nombre de archivo original.

    • <N> se reemplazará con un contador incremental hasta que no se generen más colisiones con los objetos del equipo de destino.

    • <E> se reemplazará con la extensión de nombre de archivo original.

    Por ejemplo, <F> (<N>).<E> cambiará el archivo de origen MyDocument.doc a MyDocument (1).doc en el equipo de destino.

  • NewestVersion

    La función NewestVersion resuelve los conflictos en el equipo de destino en función de la versión del archivo.

    Sintaxis: NewestVersion(EtiquetaDeVersión)

    Parámetro ¿Obligatorio? Valor

    EtiquetaDeVersión

    El campo de versión que se comprobará. Puede ser “FileVersion” o “ProductVersion”. El archivo con la última versión de EtiquetaDeVersión determina los conflictos que se van a resolver en función de la versión del archivo. Por ejemplo, si Myfile.txt contiene “FileVersion 1” y el mismo archivo en el equipo de destino contiene “FileVersion 2”, se conservará el archivo de destino.

  • HigherValue()

    Puedes usar esta función para combinar valores del Registro. Los valores del Registro se evalúan como valores numéricos; el que posea el mayor valor determinará qué valores del Registro se van a combinar.

  • LowerValue()

    Puedes usar esta función para combinar valores del Registro. Los valores del Registro se evalúan como valores numéricos; el que posea el menor valor determinará qué valores del Registro se van a combinar.

  • SourcePriority

    Especifica que se migre el objeto que se encuentra en el equipo de origen y que se elimine el objeto que se encuentra en el equipo de destino.

    Por ejemplo:

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

<migration>

El elemento <migration> es el único elemento de raíz de un archivo .xml de migración y es un elemento necesario. Cada archivo .xml debe tener un atributo urlid de migración exclusivo. El atributo urlid de cada archivo que especifiques en la línea de comandos debe ser único. Esto se debe a que USMT usa el atributo urlid para definir los componentes dentro del archivo. Debes especificar lo siguiente en el comienzo de cada archivo: <CustomFileName> es el nombre del archivo; por ejemplo, “CustomApp”.

  • Número de repeticiones: una

  • Elementos principales: ninguno

  • Elementos secundarios necesarios: <component>

  • Elementos secundarios opcionales: <library>, <namedElements>

Sintaxis:

<migration urlid=“*urlid/*Name”>

</migration>

Parámetro ¿Obligatorio? Valor

urlid

urlid es un identificador de cadenas que identifica este archivo .xml de forma exclusiva. Este parámetro debe ser un nombre sin signo de dos puntos según se define en la especificación de espacios de nombres XML. Cada archivo .xml de migración debe tener un atributo urlid exclusivo. Si dos archivos .xml de migración tienen el mismo atributo urlid, no se procesará el segundo archivo .xml especificado en la línea de comandos. Para obtener más información sobre los espacios de nombres XML, consulta el tema sobre el uso de espacios de nombres XML.

Nombre

No

Si bien no es necesario, te recomendamos que uses el nombre del archivo .xml.

El siguiente ejemplo pertenece al archivo MigApp.xml:

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

MigXMLHelper.FileProperties

Esta función auxiliar de filtro puede usarse para filtrar la migración de los archivos en función del tamaño del archivo y los atributos de fecha.

Función auxiliar MigXMLHelper.FileProperties (property, operator, valueToCompare)

Propiedad

filesize, dateCreated, dateModified, dateAccessed

Operador

range, neq, lte, lt, eq, gte, gt

valueToCompare

El valor que se compara. Por ejemplo:

Fecha: “2008/05/15-2005/05/17”, “2008/05/15”

Tamaño: un número que termina con B, KB, MB o GB. “5GB”, “1KB-1MB”

<component context="System"  type="Application">
<displayName>File_size</displayName>
<role role="Data">

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

<namedElements>

Puedes usar el elemento <namedElements> para definir elementos con nombre. Puedes usar estos elementos en cualquier componente en todo el archivo .xml. Para obtener un ejemplo de cómo usar este elemento, consulta el archivo MigApp.xml.

Sintaxis:

<namedElements>

</namedElements>

  • Número de repeticiones: ilimitado

  • Elementos principales: <migration>

  • Elementos secundarios: <environment>, <rules>, <conditions>, <detection>, <detects>, <detect>

Para obtener un ejemplo de este elemento, consulta el archivo MigApp.xml.

<object>

El elemento <object> representa un archivo o una clave del Registro.

  • Número de repeticiones: ilimitado

  • Elementos principales: <addObjects>

  • Elementos secundarios necesarios: <location>, <attributes>

  • Elementos secundarios opcionales: <bytes>

Sintaxis:

<object>

</object>

El siguiente ejemplo pertenece al archivo MigApp.xml:

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

<objectSet>

El elemento <objectSet> contiene una lista de los patrones de objetos, como rutas de acceso a archivos y ubicaciones del Registro, entre otros. Todos los elementos secundarios <conditions> se evaluarán en primer lugar. Si todos los elementos <conditions> devuelven “FALSE”, el elemento <objectSet> se evaluará en un conjunto vacío. Por cada elemento principal, solo puede haber varios elementos <objectSet>.

  • Número de repeticiones: ilimitado

  • Elementos principales: <variable>, <content>, <include>, <exclude>, <merge>, <contentModify>, <locationModify>, <destinationCleanup>, <includeAttributes>, <excludeAttributes>, <unconditionalExclude>, <detect>

  • Elementos secundarios necesarios: <script> o <pattern>

  • Elementos secundarios opcionales: <content>, <conditions>, <condition>

Sintaxis:

<objectSet>

</objectSet>

El siguiente ejemplo pertenece al archivo 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>

<path>

Este elemento es interno de USMT. No lo uses.

<paths>

Este elemento es interno de USMT. No lo uses.

<pattern>

Puedes usar este elemento para especificar varios objetos. Puedes especificar varios elementos <pattern> por cada elemento <objectSet> y se combinarán. Si especificas archivos, tal vez prefieras usar GenerateDrivePatterns con <script>. GenerateDrivePatterns es, básicamente, igual que la regla <pattern>, pero sin la especificación de la letra de unidad. Por ejemplo, las dos líneas de código siguientes son similares:

<pattern type="File">C:\Folder\* [Sample.doc]</pattern>
<script>MigXmlHelper.GenerateDrivePatterns("\Folder\* [Sample.doc]","Fixed"</script>
  • Número de repeticiones: ilimitado

  • Elementos principales: <objectSet>

  • Elementos secundarios: ninguno, pero Ruta de acceso[objeto] debe ser válido.

Sintaxis:

<pattern type=“IdDeTipo”>Ruta de acceso[objeto]</pattern>

Parámetro ¿Obligatorio? Valor

type

IdDeTipo puede ser “Registry”, “File” o “Ini”. Si IdDeTipo es “Ini”, no puede haber un espacio entre Ruta de acceso y objeto. Por ejemplo, esto es correcto cuando “type” es igual a “Ini”:

<pattern type="Ini">%WinAmp5InstPath%\Winamp.ini|WinAmp[keeponscreen]</pattern>

Ruta de acceso [objeto]

Un registro o un patrón de ruta de acceso a archivos válidos, seguidos de un espacio como mínimo y, a continuación, corchetes [] que contienen el objeto que se migrará.

  • Ruta de acceso puede contener el asterisco (*) como carácter comodín o puede ser una variable de entorno. No puedes usar el signo de interrogación como carácter comodín. Puedes usar HKCU y HKLM para hacer referencia a HKEY_CURRENT_USER y HKEY_LOCAL_MACHINE, respectivamente.

  • Objeto puede contener el asterisco (*) como carácter comodín. En cambio, no puedes usar el signo de interrogación como carácter comodín. Por ejemplo:

    C:\Folder\ [*] enumera todos los archivos en C:\Ruta de acceso pero no las subcarpetas de C:\Folder.

    C:\Folder\* [*] enumera todos los archivos y las subcarpetas de C:\Folder.

    C:\Folder\ [*.mp3] enumera todos los archivos .mp3 en C:\Folder.

    C:\Folder\ [Sample.doc] enumera solamente el archivo Sample.doc en C:\Folder.

    > [!NOTE] > Si migras un archivo que contiene un carácter de corchete ([ o ]) en el nombre del archivo, debes insertar el carácter de acento circunflejo (^) justo antes del corchete para que sea válido. Por ejemplo, si hay un archivo cuyo nombre es “file].txt”, debes especificar <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> en lugar de <pattern type="File">c:\documents\mydocs [file].txt]</pattern>. >

Por ejemplo:

  • Para migrar una única clave del Registro:

    <pattern type="Registry">HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent]</pattern>
    
  • Para migrar la carpeta EngineeringDrafts y las subcarpetas de la unidad C:

    <pattern type="File">C:\EngineeringDrafts\* [*]</pattern>
    
  • Para migrar solo la carpeta EngineeringDrafts, sin ninguna subcarpeta, de la unidad C:

    <pattern type="File"> C:\EngineeringDrafts\ [*]</pattern>
    
  • Para migrar el archivo Sample.doc de C:\EngineeringDrafts:

    <pattern type="File"> C:\EngineeringDrafts\ [Sample.doc]</pattern>
    
  • Para migrar el archivo Sample.doc del lugar en el que se encuentra en la unidad C:, usa el patrón de la siguiente manera. Si existen varios archivos con el mismo nombre en la unidad C:, se migrarán todos ellos.

    <pattern type="File"> C:\* [Sample.doc] </pattern>
    
  • Para obtener ejemplos de cómo usar este elemento, consulta Excluir archivos y configuraciones, Redistribuir archivos y configuraciones, Incluir archivos y configuraciones y Ejemplos de XML personalizado.

<processing>

Puedes usar este elemento para ejecutar un script durante un momento específico en el proceso de migración. No se esperan valores de retorno de los script que especifiques; si los hay, se omitirán.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elemento secundario necesario: <script>

Sintaxis:

<processing when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">

</processing>

Parámetro ¿Obligatorio? Valor

when

Indica cuándo debe ejecutarse el script. Este valor puede ser uno de los siguientes:

  • pre-scan indica el momento antes de que comience el proceso de detección.

  • scan-success indica el momento después de finalizar correctamente el proceso de detección.

  • post-scan indica el momento después de finalizar el proceso de detección, de modo correcto o incorrecto.

  • pre-apply indica el momento antes de que comience el proceso de aplicación.

  • apply-success indica el momento después de finalizar correctamente el proceso de aplicación.

  • post-apply indica el momento después de finalizar el proceso de aplicación, de modo correcto o incorrecto.

<plugin>

Este elemento es interno de USMT. No lo uses.

<role>

El elemento <role> es necesario en un archivo .xml personalizado. Al especificar el elemento <role>, puedes crear un componente concreto. El componente se definirá según los parámetros especificados en el nivel de <component> y el rol que especificaste aquí.

  • Número de repeticiones: cada <component> puede tener uno, dos o tres elementos <role> secundarios.

  • Elementos principales: <component>, <role>

  • Elementos secundarios necesarios: <rules>

  • Elementos secundarios opcionales: <environment>, <detection>, <component>, <role>, <detects>, <plugin>

Sintaxis:

<role role="Container|Binaries|Settings|Data">

</role>

Parámetro ¿Obligatorio? Valor

role

Define el rol del componente. “Role” puede ser uno de los siguientes valores:

  • Container

  • Binaries

  • Settings

  • Data

Puedes realizar una de estas acciones:

  1. Especifica hasta tres elementos <role> dentro de un <component>: un elemento de rol “Binaries”, un elemento de rol “Settings” y un elemento de rol “Data”. Estos parámetros no cambian el comportamiento de la migración. Su única finalidad es ayudarte a clasificar la configuración que vas a migrar. Puedes anidar estos elementos <role>, pero cada elemento anidado debe pertenecer al mismo parámetro de rol.

  2. Especifica un elemento <role> “Container” dentro de un elemento <component>. En este caso, no puedes especificar ningún elemento secundario <rules>, sino solamente otros elementos <component>. Cada elemento secundario <component> debe tener el mismo tipo que el elemento principal <component>. Por ejemplo:

<component context="UserAndSystem" type="Application">
  <displayName _locID="migapp.msoffice2003">Microsoft Office 2003</displayName> 
  <environment name="GlobalEnv" /> 
  <role role="Container">
    <detection name="AnyOffice2003Version" /> 
    <detection name="FrontPage2003" /> 
    <!-- 
 Office 2003 Common Settings 
  --> 
    <component context="UserAndSystem" type="Application">

El siguiente ejemplo se extrajo del archivo MigUser.xml. Para obtener más ejemplos, consulta el archivo 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>

El elemento <rules> es necesario en un archivo .xml personalizado. Este elemento contiene reglas que se ejecutarán durante la migración si se selecciona el elemento principal <component>, salvo que el elemento secundario <conditions>, si existe, dé como resultado “FALSE”. Por cada elemento <rules> puede haber varios elementos <rules> secundarios.

  • Número de repeticiones: ilimitado

  • Elementos principales: <role>, <rules>, <namedElements>

  • Elementos secundarios necesarios: <include>

  • Elementos secundarios opcionales: <rules>, <exclude>, <unconditionalExclude>,<merge>, <contentModify>, <locationModify>, <destinationCleanup>, <addObjects>, <externalProcess>, <processing>, <includeAttributes>, <excludeAttributes>, <conditions>, <detects>

Sintaxis:

<rules name=“Id” context="User|System|UserAndSystem">

</rules>

Parámetro ¿Obligatorio? Valor

nombre

Sí, cuando <rules> es secundario de <namedElements>

Sí, cuando <rules> es secundario de cualquier otro elemento

Cuando se especifica Id, no se procesa ningún elemento secundario. En cambio, se procesan todos los elementos <rules> restantes con el mismo nombre que estén indicados dentro de <namedElements>.

context

No

El valor predeterminado es “UserAndSystem”

Define el ámbito de este parámetro, es decir, si este componente se debe procesar en el contexto del usuario específico, en todo el sistema operativo, o en ambos.

El ámbito más amplio posible se establece con el elemento <component>. Por ejemplo, si un elemento <component> tiene un contexto de “User” y un elemento <rules> tiene un contexto de “UserAndSystem”, el elemento <rules> se comportará como si tuviera el contexto de “User”. Si <rules> tiene un contexto de “System”, se comportará como si <rules> no existiera.

  • User: evalúa las variables de cada usuario.

  • System: evalúa las variables solo una vez en el sistema.

  • UserAndSystem: evalúa las variables de todo el sistema operativo y de cada usuario.

El siguiente ejemplo pertenece al archivo 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>

<script>

El valor de retorno que se necesita para <script> depende del elemento principal.

Número de repeticiones: una por <variable>, ilimitadas para <objectSet> y <processing>

Elementos principales: <objectSet>, <variable>, <processing>

Elementos secundarios: ninguno

Sintaxis y funciones auxiliares

  • Sintaxis general: <script>ScriptConArgumentos</script>

  • Puedes usar Funciones <script> cuando <script> está dentro de <variable>.

    Sintaxis: <script>MigXmlHelper.GetStringContent(“TipoDeObjeto”,“PatrónDeUbicaciónCodificado”, “ExpandirContenido”)</script>

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

  • Puedes usar Funciones <script> cuando <script> está dentro de <objectSet>.

    Sintaxis: <script>MigXmlHelper.GenerateUserPatterns(“TipoDeObjeto”,“PatrónDeUbicaciónCodificado”,“ProcesarUsuarioActual”)</script>

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

  • Puedes usar Funciones <script> cuando <script> está dentro de <objectSet>.

    Sintaxis: <script>MigXmlHelper.GenerateDrivePatterns(“SegmentoDePatrón”,“TipoDeUnidad”)</script>

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

  • Puedes usar los Funciones <script> con elementos <script> que se encuentran dentro de elementos <processing>: AskForLogoff, ConvertToShortFileName, KillExplorer, RemoveEmptyDirectories, RestartExplorer, RegisterFonts, StartService, StopService y SyncSCM.

    Sintaxis: <script>MigXmlHelper.ScriptDeEjecución</script>

    Ejemplo: <script>MigXmlHelper.KillExplorer()</script>

Parámetro ¿Obligatorio? Valor

ScriptConArgumentos

Un script seguido de cualquier cantidad de argumentos de cadena separados por comas y entre paréntesis. Por ejemplo, , MyScripts.AScript ("Arg1","Arg2").

Se llama al script por cada objeto enumerado por los conjuntos de objetos de la regla <include>. El script de filtrado devuelve un valor booleano. Si el valor de retorno es “TRUE”, se migrará el objeto. Si es “FALSE”, no se migrará.

El valor de retorno que se necesita para <script> depende del elemento principal.

  • Cuando se usa dentro de <variable>, el valor de retorno debe ser una cadena.

  • Cuando se usa dentro de <objectSet>, el valor de retorno debe ser una matriz de cadena de tipo bidimensional.

  • Cuando se usa dentro de <location>, el valor de retorno debe ser una ubicación válida que se alinea con el atributo de tipo de <location>. Por ejemplo, si <location type="File">, el elemento secundario de script (si se especifica) debe ser una ubicación de archivo válida.

    > [!NOTE] > Si migras un archivo que contiene un carácter de corchete ([ o ]) en el nombre del archivo, inserta el carácter de acento circunflejo (^) justo antes del corchete para que sea válido. Por ejemplo, si hay un archivo cuyo nombre es “file].txt”, especifica <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> en lugar de <pattern type="File">c:\documents\mydocs [file].txt]</pattern>. >

Ejemplos:

Para migrar el archivo Sample.doc de cualquier unidad en el equipo de origen, usa <script> como se muestra a continuación. Si existen varios archivos con el mismo nombre, se migrarán todos ellos.

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

Para obtener ejemplos de cómo usar este elemento, consulta Excluir archivos y configuraciones, Redistribuir archivos y configuraciones, Redistribuir archivos y configuraciones y Ejemplos de XML personalizado.

Funciones <script>

Puedes usar las siguientes funciones con el elemento <script>:

  • Funciones de generación de cadenas y patrones

  • Scripts de ejecución simple

Funciones de generación de cadenas y patrones

Estas funciones devuelven una cadena o un patrón.

  • GetStringContent

    Puedes usar GetStringContent con elementos <script> que están dentro de elementos <variable>. Si es posible, esta función devuelve la representación de cadena del objeto dado. De lo contrario, devuelve “NULL”. En objetos de archivo, esta función siempre devuelve “NULL”.

    Sintaxis: GetStringContent(“TipoDeObjeto”,“PatrónDeUbicaciónCodificado”, “ExpandirContenido”)

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto

    El tipo de objeto. Puede ser “Registry” o “Ini” (para un archivo .ini).

    PatrónDeUbicaciónCodificado

    • Si el tipo de objeto es Registry, PatrónDeUbicaciónCodificado debe ser una ruta de acceso del Registro válida. Por ejemplo, HKLM\SOFTWARE\MyKey[].

    • Si el tipo de objeto es Ini, PatrónDeUbicaciónCodificado debe tener el siguiente formato:

      IniFilePath|SectionName[SettingName]

    ExpandirContenido

    No, el valor predeterminado es “TRUE”

    Puede ser “TRUE” o “FALSE”. Si es “FALSE”, la ubicación dada no se expandirá antes de devolverse.

    Por ejemplo:

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

    La función GenerateDrivePatterns realiza una iteración en todas las unidades disponibles y selecciona las que coinciden con el tipo de unidad solicitada. Después, concatena las unidades seleccionadas con la parte final de SegmentoDePatrón para formar un patrón de archivo codificado completo. Por ejemplo, si SegmentoDePatrón es Path [file.txt] y TipoDeUnidad es Fixed, la función generará C:\Path [file.txt] y otros patrones si existen otras unidades fijas además de C:. No puedes especificar variables de entorno con esta función. Puedes usar GenerateDrivePatterns con elementos <script> que están en <objectSet> dentro de <include>/<exclude>.

    Sintaxis: GenerateDrivePatterns(“SegmentoDePatrón”,“TipoDeUnidad”)

    Parámetro ¿Obligatorio? Valor

    SegmentoDePatrón

    El sufijo de un patrón codificado. Se concatenará con una especificación de unidad, como "c:\", para formar un Especificación de ubicaciones completo. Por ejemplo, “* [*.doc]”. SegmentoDePatrón no puede ser una variable de entorno.

    TipoDeUnidad

    El tipo de unidad para la que se generan los patrones. Puede ser uno de los siguientes valores:

    • Fixed

    • CDROM

    • Removable

    • Remote

    Consulta el último componente en el archivo MigUser.xml para obtener un ejemplo de este elemento.

  • GenerateUserPatterns

    La función procesa una iteración en todos los usuarios que se migran, a excepción del usuario que se procesa actualmente (si <ProcesarUsuarioActual> es “FALSE”), y expande el patrón especificado en el contexto de cada usuario. Por ejemplo, si los usuarios A, B y C tienen perfiles en C:\Documents and Settings), al llamar a GenerateUserPattens('File','%userprofile% [*.doc]','TRUE'), la función auxiliar generará los tres valores siguientes:

    • “C:\Documents and Settings\A\* [*.doc]”

    • “C:\Documents and Settings\B\* [*.doc]”

    • “C:\Documents and Settings\C\* [*.doc]”

    Sintaxis: GenerateUserPatterns(“TipoDeObjeto”,“PatrónDeUbicaciónCodificado”,“ProcesarUsuarioActual”)

    Parámetro ¿Obligatorio? Valor

    TipoDeObjeto

    Define el tipo de objeto. Puede ser “File” o “Registry”.

    PatrónDeUbicaciónCodificado

    El Especificación de ubicaciones. Se permiten variables de entorno.

    ProcesarUsuarioActual

    Puede ser “TRUE” o “FALSE”. Indica si deben generarse los patrones del usuario actual.

    Ejemplo:

    Si se llama a GenerateUserPattens('File','%userprofile% [*.doc]','FALSE') mientras USMT procesa al usuario A, esta función solo generará patrones para los usuarios B y C. Puedes usar esta función auxiliar para crear reglar complejas. Por ejemplo, puedes migrar todos los archivos .doc del equipo de origen (pero si no se migra el usuario X, no migres ningún archivo .doc del perfil del usuario X).

    Este es un código de ejemplo de este escenario. El primer elemento <rules> migra todos los archivos .doc en el equipo de origen, a excepción de los que están en C:\Documents and Settings. El segundo elemento <rules> migra todos los archivos .doc de C:\Documents and Settings, a excepción de los archivos .doc en los perfiles de los otros usuarios. Como el segundo elemento <rules> se procesará en cada contexto de usuario migrado, el resultado final va a ser el comportamiento deseado. El resultado final es el que esperábamos.

    <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

Esta función auxiliar invoca al buscador de documentos para que busque en el sistema todos los archivos que pueden migrarse. Puede invocarse tanto en el contexto de “System” como en el de “User” para centrar la búsqueda.

Parámetro ¿Obligatorio? Valor

ScanProgramFiles

No, el valor predeterminado es “FALSE”

Puede ser “TRUE” o “FALSE”. El parámetro ScanProgramFiles determina si el buscador de documentos analiza o no el directorio Archivos de programa para recopilar extensiones de archivos registradas de las aplicaciones conocidas. Por ejemplo, cuando se establece en “TRUE”, detecta y migra archivos .jpg del directorio Photoshop (si .jpg es una extensión de archivo registrada en Photoshop).

IncludePatterns

No, el valor predeterminado es “TRUE”

Puede ser “TRUE” o “FALSE”. “TRUE” generará patrones de inclusión y puede agregarse en el elemento <include>. “FALSE” generará patrones de exclusión y puede agregarse en el elemento <exclude>.

SystemDrive

No, el valor predeterminado es “FALSE”

Puede ser “TRUE” o “FALSE”. Si es “TRUE”, restringe todos los patrones de la unidad del sistema.

 <!-- 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>

Scripts de ejecución simple

Los siguientes scripts no devuelven ningún valor. Puedes usar los siguientes errores con elementos <script> que están dentro de elementos <processing>:

  • AskForLogoff(). Le pide al usuario que cierre sesión al finalizar la migración. Por ejemplo:

         <processing when="apply-success">
              <script>MigXmlHelper.AskForLogoff()</script>
         </processing>
    
  • ConvertToShortFileName(UbicaciónCodificadaDelRegistro). Si UbicaciónCodificadaDelRegistro es la ruta de acceso completa a un archivo existente, esta función convertirá el archivo a su nombre corto de archivo y después actualizará el valor del Registro.

  • KillExplorer(). Detiene Explorer.exe en el contexto del usuario actual. Esto permite obtener acceso a ciertas claves y archivos que se mantienen abiertos mientras se ejecuta Explorer.exe. Por ejemplo:

         <processing when="pre-apply">
              <script>MigXmlHelper.KillExplorer()</script>
         </processing>
    
  • RegisterFonts(UbicaciónCodificadaDeArchivo). Registra la fuente especificada o todas las fuentes en el directorio dado. Por ejemplo:

    <processing when="apply-success">
    <script>MigXmlHelper.RegisterFonts("%CSIDL_COMMON_FONTS%")</script>
    </processing>
    
  • **RemoveEmptyDirectories (PatrónCodificadoDeDirectorio).**Elimina los directorios vacíos que coinciden con PatrónCodificadoDeDirectorio en el equipo de destino.

  • RestartExplorer(). Reinicia Explorer.exe al final de la migración. Por ejemplo:

         <processing when="post-apply">
              <script>MigXmlHelper.RestartExplorer()</script>
         </processing>
    
  • StartService (NombreDelServicio, ParamOpcional1, ParamOpcional2,…). Inicia el servicio identificado por NombreDelServicio. NombreDelServicio es una subclave en HKLM\System\CurrentControlSet\Services que contiene datos del servicio dado. Los parámetros opcionales (si los hay) se pasarán a la API de StartService. Para obtener más información, consulta este sitio web de Microsoft.

  • StopService (NombreDelServicio). Detiene el servicio que identifica NombreDelServicio. NombreDelServicio es la subclave en HKLM\System\CurrentControlSet\Services que contiene los datos del servicio dado.

  • SyncSCM(ServiceShortName). Lee el valor de tipo de inicio del Registro (HKLM\System\CurrentControlSet\Services\ServiceShortName [Start]) después de que sea modificado por el motor de migración y después sincroniza el Administrador de control de servicios (SCM) con el valor nuevo.

<text>

Puedes usar el elemento <text> para establecer un valor para las variables de entorno que se encuentren en uno de los archivos .xml de migración.

  • Número de repeticiones: una por cada elemento <variable>.

  • Elementos principales: <variable>

  • Elementos secundarios: ninguno.

Sintaxis:

<text>TextoNormal</text>

Parámetro Valor

TextoNormal

Se interpreta como texto normal.

Por ejemplo:

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

<unconditionalExclude>

El elemento <unconditionalExclude> excluye de la migración los archivos y los valores del Registro especificados, independientemente de las otras reglas de inclusión de cualquiera de los archivos .xml de migración o del archivo Config.xml. Los objetos indicados aquí no se migrarán, porque este elemento tiene prioridad sobre cualquier otra regla. Por ejemplo, incluso si hay reglas <include> explícitas para incluir archivos .mp3, si usas esta opción para especificar que se excluyan, no se migrarán.

Usa este elemento si quieres excluir todos los archivos .mp3 del equipo de origen. Si estás haciendo una copia de seguridad de C:\UserData con otro método, también puedes excluir toda la carpeta de la migración. Sin embargo, debes usar este elemento con precaución, porque si una aplicación necesita un archivo que estés excluyendo, es posible que la aplicación no funcione correctamente en el equipo de destino.

  • Número de repeticiones: ilimitado

  • Elementos principales: <rules>

  • Elementos secundarios: <objectSet>

Sintaxis:

<unconditionalExclude></unconditionalExclude>

El siguiente archivo .xml excluye todos los archivos .mp3 de la migración. Para obtener más ejemplos sobre cómo usar este elemento, consulta Excluir archivos y configuraciones.

<migration urlid="https://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>

<variable>

El elemento <variable> es necesario en un elemento <environment>. Por cada elemento <variable> debe haber un elemento <objectSet>, <script> o <text> El contenido del elemento <variable> le asigna un valor de texto a la variable de entorno. Este elemento tiene las tres funciones siguientes:

  1. Si el elemento <variable> contiene un elemento <text>, el valor del elemento variable será el valor del elemento <text>.

  2. Si el elemento <variable> contiene un elemento <script> y la invocación del script genera una cadena no nula, el valor del elemento <variable> será el resultado de la invocación del script.

  3. Si el elemento <variable> contiene un elemento <objectSet> y la evaluación del elemento <objectSet> genera, como mínimo, un patrón de objeto, el valor del primer objeto que coincida con el patrón de objeto resultante será el valor del elemento variable.

  • Número de repeticiones: ilimitado

  • Elementos principales: <environment>

  • Elementos secundarios necesarios: <text>, <script> u <objectSet>

Sintaxis:

<variable name=“Id” remap=TRUE|FALSE>

</variable>

Parámetro ¿Obligatorio? Valor

nombre

Id es un valor de cadena. Es el nombre que se usa para hacer referencia a la variable de entorno. Te recomendamos que Id comience con el nombre del componente para evitar colisiones de espacios de nombres. Por ejemplo, si el nombre del componente es “MyComponent” y la variable que quieres es la ruta de acceso de instalación del componente, puedes especificar MyComponent.InstallPath.

remap

No, el valor predeterminado es “FALSE”

Especifica si se va a evaluar esta variable de entorno como una variable de entorno de asignación. Los objetos que se encuentran en una ruta de acceso por debajo de este valor de variable de entorno se mueven automáticamente a la ubicación que indica la variable de entorno en el equipo de destino.

El siguiente ejemplo pertenece al archivo 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>

El elemento <version> define la versión del componente, pero no afecta a la migración.

  • Número de repeticiones: cero o una

  • Elementos principales: <component>

  • Elementos secundarios: ninguno

Sintaxis:

<version>VersiónDelComponente</version>

Parámetro ¿Obligatorio? Valor

VersiónDelComponente

La versión del componente, que puede contener patrones.

Por ejemplo:

<version>4.*</version>

<windowsObjects>

El elemento <windowsObjects> es solo para uso interno de USMT. No lo uses.

Apéndice

Especificación de ubicaciones

  • Especificación de ubicaciones codificadas. La ubicación codificada usada en todas las funciones auxiliares es una representación de cadena inequívoca del nombre de un objeto. Consta de la parte del nodo, que puede ir seguida de la hoja entre corchetes. Esto marca una clara diferencia entre los nodos y las hojas.

    Por ejemplo, especifica el archivo C:\Windows\Notepad.exe de este modo: c:\Windows[Notepad.exe]. Del mismo modo, especifica el directorio C:\Windows\System32 de esta manera: c:\Windows\System32. (Observa que no hay ninguna construcción []).

    La representación del Registro es muy parecida. El valor predeterminado de una clave del Registro se representa como una construcción [] vacía. Por ejemplo, el valor predeterminado de la clave del Registro HKLM\SOFTWARE\MyKey será HKLM\SOFTWARE\MyKey[].

  • Especificación de patrones de ubicación. La manera de especificar un patrón de ubicación y una ubicación en sí son parecidas. La excepción es que tanto la parte del nodo como la de la hoja aceptan patrones. Sin embargo, un patrón del nodo no se extiende hasta la hoja.

    Por ejemplo, el patrón c:\Windows\* coincidirá con el directorio Windows y todos los subdirectorios. Pero no coincidirá con ninguno de los archivos en esos directorios. Para que los archivos también coincidan, debes especificar c:\Windows\*[*].

Funciones internas de USMT

Las siguientes funciones son solo para uso interno de USMT. No las uses en un archivo .xml.

  • AntiAlias

  • ConvertScreenSaver

  • ConvertShowIEOnDesktop

  • ConvertToOfficeLangID

  • MigrateActiveDesktop

  • MigrateAppearanceUPM

  • MigrateDisplayCS

  • MigrateDisplaySS

  • MigrateIEAutoSearch

  • MigrateMouseUPM

  • MigrateSoundSysTray

  • MigrateTaskBarSS

  • SetPstPathInMapiStruc

Etiquetas de versión válidas

Puedes usar las siguientes etiquetas de versión con varias funciones auxiliares:

  • “CompanyName”

  • “FileDescription”

  • “FileVersion”

  • “InternalName”

  • “LegalCopyright”

  • “OriginalFilename”

  • “ProductName”

  • “ProductVersion”

Las siguientes etiquetas de versión contienen valores que se pueden comparar:

  • “FileVersion”

  • “ProductVersion”

Consulte también

Otros recursos

Referencia de XML de USMT