Conflictos y prioridad
Cuando incluyes, excluyes o redistribuyes archivos y configuraciones, es importante que sepas de qué manera Herramienta de migración de estado de usuario (USMT) 5.0 trata los conflictos y la precedencia. Al trabajar con USMT, estas son las instrucciones de conflicto y precedencia más importantes que debes tener en cuenta.
Si hay reglas en conflicto dentro de un componente, se aplica la regla más específica. Sin embargo, la regla <unconditionalExclude> es una excepción, ya que tiene precedencia sobre el resto. Los nombres de directorio tienen precedencia sobre las extensiones de archivo. Para ver más ejemplos, consulta ¿Qué sucede cuando hay reglas <include> y <exclude> en conflicto? y el primer ejemplo en Ejemplos de precedencia de las reglas <include> y <exclude>más adelante en este tema.
Solo las reglas que están dentro del mismo componente pueden afectarse entre sí, según su especificidad. Las reglas que se encuentran en diferentes componentes no se afectan entre sí, a excepción de la regla <unconditionalExclude>.
Si las reglas son igual de específicas, <exclude> tiene precedencia sobre <include>. Por ejemplo, si usas la regla <exclude> para excluir un archivo y usas la regla <include> para incluir el mismo archivo, el archivo se excluirá.
El orden de los componentes no es relevante. No importa qué componentes figuren en el archivo .xml, porque cada uno de ellos se procesa independientemente de los otros componentes en todos los archivos .xml.
El orden de las reglas <include> y <exclude> dentro de un componente no importa.
Puedes usar el elemento <unconditionalExclude> para excluir datos globalmente. Este elemento excluye objetos, sin importar ninguna otra regla <include> que haya en los archivos .xml. Por ejemplo, puedes usar el elemento <unconditionalExclude> para excluir todos los archivos MP3 de un equipo o para excluir todos los archivos de C:\UserData.
En este tema
General
¿Cuál es la relación entre las reglas que se encuentran dentro de diferentes componentes?
¿Cómo funciona la precedencia con el archivo Config.xml?
¿De qué manera procesa USMT cada componente en un archivo .xml con varios componentes?
¿Cómo se procesan las reglas?
¿De qué manera combina USMT todos los archivos .xml que especifico en la línea de comandos?
Las reglas <include> y <exclude>
¿Qué sucede cuando hay reglas <include> y <exclude> en conflicto?
Ejemplos de precedencia de las reglas <include> y <exclude>
Conflictos de archivos
¿Cuál es el comportamiento predeterminado cuando hay conflictos de archivos?
¿De qué manera funciona la regla <merge> cuando hay conflictos de archivos?
General
¿Cuál es la relación entre las reglas que se encuentran dentro de diferentes componentes?
A excepción de la regla <unconditionalExclude>, solo las reglas que están dentro del mismo componente pueden afectarse entre sí, según su especificidad. Las reglas que están en componentes diferentes no se afectan entre sí. Si hay una regla <include> en un componente y una regla <exclude> idéntica en otro componente, los datos se migrarán, ya que ambas reglas son independientes la una de la otra.
Si tienes una regla <include> en un componente y una regla <locationModify> en otro componente del mismo archivo, el archivo se migrará en ambos casos. Es decir, la regla <include> hará que se incluya y la regla <locationModify>, que se migre.
El siguiente archivo .xml migra todos los archivos de C:\Userdocs, incluidos los archivos .mp3 ya que la regla <exclude> se especifica en un componente aparte.
<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/UserDocs">
<component type="Documents" context="System">
<displayName>User Documents</displayName>
<role role="Data">
<rules>
<exclude>
<objectSet>
<pattern type="File">C:\Userdocs\* [*.mp3]</pattern>
</objectSet>
</exclude>
</rules>
</role>
</component>
<component type="Documents" context="System">
<displayName> User documents to include </displayName>
<role role="Data">
<rules>
<include>
<objectSet>
<pattern type="File"> C:\Userdocs\ [*]</pattern>
</objectSet>
</include>
</rules>
</role>
</component>
</migration>
¿Cómo funciona la precedencia con el archivo Config.xml?
Especificar migrate="no"
en el archivo Config.xml es lo mismo que eliminar el componente correspondiente de un archivo .xml de migración. Sin embargo, si estableces migrate="no"
para Mis documentos, pero tienes una regla similar a la que se muestra a continuación en el archivo .xml de migración (que incluye todos los archivos .doc de Mis documentos), solo se migrarán los archivos .doc y se excluirá el resto de archivos.
<include>
<objectSet>
<pattern type="File">%CSIDL_PERSONAL%\* [*.doc] </pattern>
</objectSet>
</include>
¿De qué manera procesa USMT cada componente en un archivo .xml con varios componentes?
El orden de los componentes no importa. Cada componente se procesa de forma independiente del resto. Por ejemplo, si tienes una regla <include> en un componente y una regla <locationModify> en otro componente del mismo archivo, el archivo se migrará en ambos casos. Es decir, la regla <include> hará que se incluya y la regla <locationModify>, que se migre.
¿Cómo se procesan las reglas?
Existen dos grandes categorías de reglas.
Reglas que influyen en el comportamiento de las herramientas ScanState y LoadState. Por ejemplo, las reglas <include>, <exclude> y <unconditionalExclude> se procesan por cada componente que haya en los archivos .xml. USMT crea una lista de inclusión y otra de exclusión para cada componente. Algunas de las reglas del componente podrían descartarse debido a la especificidad, pero se procesan todas las reglas restantes. Por cada regla <include>, USMT itera por entre los elementos para ver si se debe excluir alguna de las ubicaciones. USMT enumera todos los objetos y crea una lista de los objetos que se van a recopilar para cada usuario. Una vez que la lista está completa, cada uno de los objetos se almacena o se migra al equipo de destino.
Reglas que influyen únicamente en el comportamiento de la herramienta LoadState. Por ejemplo, las reglas <locationModify>, <contentModify> y <destinationCleanup> no afectan a ScanState. Solo se procesan con LoadState. En primer lugar, la herramienta LoadState determina el contenido y la ubicación de cada componente en función de las reglas <locationModify> y <contentModify>. Después, procesa todas las reglas <destinationCleanup> y elimina datos del equipo de destino. Por último, aplica los componentes al equipo.
¿De qué manera combina USMT todos los archivos .xml que especifico en la línea de comandos?
USMT no distingue los archivos .xml según su nombre o contenido, sino que procesa cada componente de los archivos por separado. USMT admite varios archivos .xml solo para que sea más fácil mantener y organizar los componentes que hay en ellos. Dado que USMT usa un atributo urlid para distinguir cada componente del resto, asegúrate de que cada archivo .xml que especifiques en la línea de comandos tenga un urlid de migración único.
Las reglas <include> y <exclude>
¿Qué sucede cuando hay reglas <include> y <exclude> en conflicto?
Si hay reglas en conflicto dentro de un componente, se aplica la regla más específica, a excepción de la regla <unconditionalExclude>, que tiene precedencia sobre todas las otras reglas. Si las reglas son igual de específicas, los datos no se migrarán. Por ejemplo, si excluyes un archivo y lo incluyes al mismo tiempo, no se migrará. Si hay reglas en conflicto dentro de componentes diferentes, las reglas no se afectan entre sí, porque cada componente se procesa de forma independiente.
En el siguiente ejemplo, los archivos mp3 no se excluirán de la migración. Esto se debe a que los nombres de directorio tienen precedencia sobre las extensiones de archivo.
<include>
<objectSet>
<pattern type="File">C:\Data\* [*]</pattern>
</objectSet>
</include>
<exclude>
<objectSet>
<pattern type="File"> C:\* [*.mp3]</pattern>
</objectSet>
</exclude>
Ejemplos de precedencia de las reglas <include> y <exclude>
En estos ejemplos se explica cómo USMT trata las reglas <include> y <exclude>. Cuando las reglas están en diferentes componentes, el comportamiento final será el mismo, sin que importe si los componentes están en los mismos archivos .xml de migración o en otros distintos.
Incluir y excluir archivos
Incluir y excluir objetos del Registro
Incluir y excluir archivos
Si tienes el siguiente código en el mismo componente | Comportamiento final | Explicación |
---|---|---|
|
Se migran todos los archivos y subcarpetas en Dir1 (incluidos todos los archivos .txt en C:). |
La regla <exclude> no afecta a la migración, porque la regla <include> es más específica. |
|
Se migran todos los archivos y subcarpetas en C:\Dir1, excepto los archivos .txt en C:\Dir1\Dir2 y sus subcarpetas. |
Ambas reglas se procesan según lo previsto. |
|
Se migran todos los archivos y subcarpetas en C:\Dir1, excepto los archivos .txt en C:\Dir1 y sus subcarpetas. |
Ambas reglas se procesan según lo previsto. |
|
No se migrará nada. |
Las reglas son igual de específicas, por lo que la regla <exclude> tiene precedencia sobre la regla <include>. |
|
Se migran los archivos .txt de Dir1 y los archivos .txt de las subcarpetas que no sean Dir2. No se migran archivos de Dir2 o sus subcarpetas. |
Ambas reglas se procesan según lo previsto. |
|
Se migran todos los archivos y subcarpetas de Dir2, a excepción de los archivos .txt de Dir1 y de cualquier subcarpeta de Dir1 (incluida Dir2). |
Ambas reglas se procesan según lo previsto. |
Si tienes el siguiente código en componentes diferentes | Comportamiento final | Explicación |
---|---|---|
Componente 1:
Componente 2:
|
Se migran todos los archivos y subcarpetas de C:\Dir1\ (incluido C:\Dir1\Dir2\). |
Las reglas que están en componentes diferentes no se afectan entre sí, a excepción de la regla <unconditionalExclude>. Por lo tanto, si bien en este ejemplo se excluyeron algunos archivos .txt cuando se procesó el componente 1, se incluyeron cuando se procesó el componente 2. |
Componente 1:
Componente 2:
|
Se migran todos los archivos y subcarpetas de Dir2, excepto los archivos .txt en C:\Dir1 y sus subcarpetas. |
Ambas reglas se procesan según lo previsto. |
Componente 1:
Componente 2:
|
Se migran todos los archivos .txt de Dir1 y de cualquier subcarpeta. |
El componente 1 no contiene una regla <include>, por lo que la regla <exclude> no se procesa. |
Incluir y excluir objetos del Registro
Si tienes el siguiente código en el mismo componente | Comportamiento final | Explicación |
---|---|---|
|
Se migran todas las claves de HKLM\Software\Microsoft\Command Processor, a excepción de DefaultColor. |
Ambas reglas se procesan según lo previsto. |
|
Se migra solamente DefaultColor en HKLM\Software\Microsoft\Command Processor. |
DefaultColor se migra porque la regla <include> es más específica que la regla <exclude>. |
|
DefaultColor no se migra. |
Las reglas son igual de específicas, por lo que la regla <exclude> tiene precedencia sobre la regla <include>. |
Si tienes el siguiente código en componentes diferentes | Comportamiento final | Explicación |
---|---|---|
Componente 1:
Componente 2:
|
Se migran todas las claves o valores que estén en HKLM\Software\Microsoft\Command Processor. |
Las reglas que están en componentes diferentes no se afectan entre sí, a excepción de la regla <unconditionalExclude>. Por lo tanto, los objetos que se excluyeron en este ejemplo cuando se procesó el componente 1 se incluyeron cuando se procesó el componente 2. |
Conflictos de archivos
¿Cuál es el comportamiento predeterminado cuando hay conflictos de archivos?
Si existe una regla <merge>, el comportamiento predeterminado del Registro es que el origen sobrescriba el destino. El comportamiento predeterminado de los archivos consiste en que el origen cambie de nombre incrementalmente, y así, nombreArchivoOriginal(1).extensiónOriginal, nombreArchivoOriginal(2).extensiónOriginal, etc.
¿De qué manera funciona la regla <merge> cuando hay conflictos de archivos?
Cuando se detecta un conflicto, USMT seleccionará la regla <merge> más específica y la aplicará para resolverlo. Por ejemplo, si tienes una regla <merge> para C:\* [*] establecida en sourcePriority() y otra regla <merge> para C:\subfolder\* [*] establecida en destinationPriority(), USMT usa la regla destinationPriority() porque es la más específica.
Escenario de ejemplo
El equipo de origen contiene los siguientes archivos:
C:\Data\MuestraA.txt
C:\Data\MuestraB.txt
C:\Data\Folder\MuestraB.txt
El equipo de destino contiene los siguientes archivos:
C:\Data\MuestraB.txt
C:\Data\Folder\MuestraB.txt
Tienes un archivo .xml personalizado que contiene el siguiente código:
<include>
<objectSet>
<pattern type="File">c:\data\* [*]</pattern>
</objectSet>
</include>
En este ejemplo, la siguiente tabla describe el comportamiento final si agregas un código en la primera columna al archivo .xml personalizado.
Si especificas el siguiente código | Comportamiento final |
---|---|
|
Durante ScanState, todos los archivos se agregarán al almacén. Durante LoadState, solo se restaurará C:\Data\MuestraA.txt. |
|
Durante ScanState, todos los archivos se agregarán al almacén. Durante LoadState, se restaurarán todos los archivos y se sobrescribirán los archivos existentes en el equipo de destino. |
|
Durante ScanState, todos los archivos se agregarán al almacén. Durante LoadState, sucederá lo siguiente:
|