Conflitos e precedência
Quando você inclui, exclui e redireciona arquivos e configurações, é importante saber como a USMT (Ferramenta de Migração de Estado do Usuário) 5.0 lida com conflitos e precedência. Ao trabalhar com a USMT, estas são as diretrizes mais importantes de conflitos e precedência a ter em mente.
Quando há regras conflitantes em um componente, a regra mais específica é aplicada. Porém, a regra <unconditionalExclude> é uma exceção porque ela tem precedência sobre todas as outras. Os nomes de diretório têm precedência sobre extensões de arquivo. Para ver exemplos, veja O que acontece quando há conflito entre as regras <include> e <exclude>? e o primeiro exemplo em Exemplos de precedência das regras <include> e <exclude>mais adiante neste tópico.
Somente as regras dentro do mesmo componente podem afetar umas às outras, dependendo da especificidade.. As regras que estão em componentes diferentes não afetam umas às outras, exceto a regra <unconditionalExclude>.
Quando as regras são igualmente específicas, <exclude> tem precedência sobre <include>. Por exemplo, se você usa a regra <exclude> para excluir um arquivo e usa a regra <include> para incluir o mesmo arquivo, o arquivo é excluído.
A ordem dos componentes não importa. Não importa quais componentes estão listados em qual arquivo .xml, porque cada componente é processado independentemente dos outros componentes em todos os arquivos .xml.
A ordem das regras <include> e <exclude> em um componente não importa.
Você pode usar o elemento <unconditionalExclude> para excluir dados globalmente. Esse elemento exclui objetos, independentemente de qualquer outra regra <include> que estiver nos arquivos .xml. Por exemplo, você pode usar o elemento <unconditionalExclude> para excluir todos os arquivos MP3 do computador ou para excluir todos os arquivos de C:\UserData.
Neste tópico
Geral
Qual é a relação entre as regras que estão localizadas em componentes diferentes?
Como funciona a precedência com o arquivo Config.xml?
Como a ferramenta de transferência do Windows processa cada componente em um arquivo .xml com vários componentes?
Como as regras são processadas?
Como a ferramenta de transferência do Windows combina todos os arquivos .xml que eu especifico na linha de comando?
Regras <include> e <exclude>
O que acontece quando há conflito entre as regras <include> e <exclude>?
Exemplos de precedência das regras <include> e <exclude>
Colisões de arquivos
Qual é o comportamento padrão quando há colisões de arquivos?
Como funciona a regra <merge> quando há colisões de arquivos?
Geral
Qual é a relação entre as regras que estão localizadas em componentes diferentes?
Apenas as regras dentro do mesmo componente podem afetar umas às outras, dependendo da especificidade, exceto a regra <unconditionalExclude>. As regras que estão em componentes diferentes não afetam umas às outras. Quando há uma regra <include> em um componente e uma regra <exclude> idêntica em outro componente, os dados são migrados porque as duas regras são independentes uma da outra.
Se você tem uma regra <include> em um componente e uma regra <locationModify> em outro componente para o mesmo arquivo, o arquivo é migrado em ambos os locais. Ou seja, ele é incluído com base na regra <include> e é migrado com base na regra <locationModify>.
O arquivo .xml a seguir migra todos os arquivos de C:\Userdocs, incluindo arquivos .mp3, porque a regra <exclude> é especificada em um componente separado.
<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>
Como funciona a precedência com o arquivo Config.xml?
Especificar migrate="no"
no arquivo Config.xml é o mesmo que excluir o componente correspondente do arquivo .xml de migração. Porém, se você define migrate="no"
para Meus Documentos, mas tem uma regra semelhante à exibida a seguir em um arquivo .xml de migração (que inclui todos os arquivos .doc de Meus Documentos), apenas os arquivos .doc são migrados, e todos os outros arquivos são excluídos.
<include>
<objectSet>
<pattern type="File">%CSIDL_PERSONAL%\* [*.doc] </pattern>
</objectSet>
</include>
Como a ferramenta de transferência do Windows processa cada componente em um arquivo .xml com vários componentes?
A ordem dos componentes não importa. Cada componente é processado independentemente dos outros componentes. Por exemplo, se você tem uma regra <include> em um componente e uma regra <locationModify> em outro componente para o mesmo arquivo, o arquivo é migrado em ambos os locais. Ou seja, ele é incluído com base na regra <include> e é migrado com base na regra <locationModify>.
Como as regras são processadas?
Há duas categorias amplas de regras.
Regras que afetam o comportamento das ferramentas ScanState e LoadState. Por exemplo, as regras <include>, <exclude> e <unconditionalExclude> são processadas para cada componente nos arquivos .xml. Para cada componente, a USMT cria uma lista de inclusões e uma lista de exclusões. Algumas das regras no componente podem ser descartadas devido a especificidade, mas todas as regras restantes são processadas. Para cada regra <include>, a USMT faz a iteração nos elementos para verificar se algum dos locais precisa ser excluído. A USMT enumera todos os objetos e cria uma lista de objetos que serão coletados para cada usuário. Quando a lista está completa, cada um dos objetos é armazenado ou migrado para o computador de destino.
Regras que afetam o comportamento apenas da ferramenta LoadState. Por exemplo, as regras <locationModify>, <contentModify> e <destinationCleanup> não afetam o ScanState. Elas são processadas somente com LoadState. Primeiro, a ferramenta LoadState determina o conteúdo e o local de cada componente com base nas regras <locationModify> e <contentModify>. Depois, LoadState processa todas as regras <destinationCleanup> e exclui os dados do computador de destino. Por fim, LoadState aplica os componentes ao computador.
Como a ferramenta de transferência do Windows combina todos os arquivos .xml que eu especifico na linha de comando?
A USMT não distingue os arquivos .xml com base em seu nome ou conteúdo. Ela processa cada componente dentro dos arquivos separadamente. A USMT permite vários arquivos .xml apenas para facilitar a manutenção e organização dos componentes dentro deles. Como a USMT usa uma urlid para distinguir cada componente dos outros, verifique se cada arquivo .xml que você especificar na linha de comando tem uma urlid de migração exclusiva.
Regras <include> e <exclude>
O que acontece quando há conflito entre as regras <include> e <exclude>?
Quando há regras conflitantes em um componente, a regra mais específica é aplicada, exceto a regra <unconditionalExclude>, que tem precedência sobre todas as outras regras. Quando as regras são igualmente específicas, os dados não são migrados. Por exemplo, se você exclui um arquivo e inclui o mesmo arquivo, ele não é migrado. Quando há regras conflitantes dentro de componentes diferentes, elas não afetam umas às outras porque cada componente é processado de forma independente.
No exemplo abaixo, os arquivos mp3 não são excluídos da migração. Isso ocorre porque os nomes de diretório têm precedência sobre as extensões de arquivo.
<include>
<objectSet>
<pattern type="File">C:\Data\* [*]</pattern>
</objectSet>
</include>
<exclude>
<objectSet>
<pattern type="File"> C:\* [*.mp3]</pattern>
</objectSet>
</exclude>
Exemplos de precedência das regras <include> e <exclude>
Estes exemplos explicam como a USMT lida com as regras <include> e <exclude>. Quando as regras estão em componentes diferentes, o comportamento resultante é igual, não importando se os componentes estão nos mesmos arquivos .xml de migração ou em outros diferentes.
Incluindo e excluindo arquivos
Incluindo e excluindo objetos do registro
Incluindo e excluindo arquivos
Se você tem o código a seguir no mesmo componente | Comportamento resultante | Explicação |
---|---|---|
|
Migra todos os arquivos e subpastas em Dir1 (incluindo todos os arquivos .txt em C:). |
A regra <exclude> não afeta a migração porque a regra <include> é mais específica. |
|
Migra todos os arquivos e subpastas em C:\Dir1, exceto os arquivos .txt em C:\Dir1\Dir2 e suas subpastas. |
Ambas as regras são processadas conforme o esperado. |
|
Migra todos os arquivos e subpastas em C:\Dir1, exceto os arquivos .txt em C:\Dir1 e suas subpastas. |
Ambas as regras são processadas conforme o esperado. |
|
Nada é migrado. |
As regras são igualmente específicas, portanto, a regra <exclude> tem precedência sobre a regra <include>. |
|
Migra os arquivos .txt em Dir1 e os arquivos .txt das subpastas que não sejam Dir2. Nenhum arquivo é migrado de Dir2 ou suas subpastas. |
Ambas as regras são processadas conforme o esperado. |
|
Migra todos os arquivos e subpastas de Dir2, exceto os arquivos .txt de Dir1 e todas as subpastas de Dir1 (incluindo Dir2). |
Ambas as regras são processadas conforme o esperado. |
Se você tem o código a seguir em diferentes componentes | Comportamento resultante | Explicação |
---|---|---|
Componente 1:
Componente 2:
|
Migra todos os arquivos e subpastas de C:\Dir1\ (incluindo C:\Dir1\Dir2\). |
As regras que estão em componentes diferentes não afetam umas às outras, exceto a regra <unconditionalExclude>. Portanto, neste exemplo, embora alguns arquivos .txt foram excluídos quando Componente 1 foi processado, eles foram incluídos quando Componente 2 foi processado. |
Componente 1:
Componente 2:
|
Migra todos os arquivos e subpastas de Dir2, exceto os arquivos .txt em C:\Dir1 e suas subpastas. |
Ambas as regras são processadas conforme o esperado. |
Componente 1:
Componente 2:
|
Migra todos os arquivos .txt em Dir1 e todas as subpastas. |
Componente 1 não contém uma regra <include>, portanto a regra <exclude> não é processada. |
Incluindo e excluindo objetos do registro
Se você tem o código a seguir no mesmo componente | Comportamento resultante | Explicação |
---|---|---|
|
Migra todas as chaves em HKLM\Software\Microsoft\Command Processor exceto DefaultColor. |
Ambas as regras são processadas conforme o esperado. |
|
Migra apenas DefaultColor em HKLM\Software\Microsoft\Command Processor. |
DefaultColor é migrado porque a regra <include> é mais específica que a regra <exclude>. |
|
Não migra DefaultColor. |
As regras são igualmente específicas, portanto, a regra <exclude> tem precedência sobre a regra <include>. |
Se você tem o código a seguir em diferentes componentes | Comportamento resultante | Explicação |
---|---|---|
Componente 1:
Componente 2:
|
Migra todas as chaves/valores em HKLM\Software\Microsoft\Command Processor. |
As regras que estão em componentes diferentes não afetam umas às outras, exceto a regra <unconditionalExclude>. Portanto, neste exemplo, os objetos que foram excluídos quando Componente 1 foi processado foram incluídos quando Componente 2 foi processado. |
Colisões de arquivos
Qual é o comportamento padrão quando há colisões de arquivos?
Quando não há uma regra <merge>, o comportamento padrão para o registro é a origem substituir o destino. O comportamento padrão para arquivos é a origem ser renomeada de forma incremental: por exemplo, OriginalFileName(1).OriginalExtension, OriginalFileName(2).OriginalExtension e assim por diante.
Como funciona a regra <merge> quando há colisões de arquivos?
Quando uma colisão é detectada, a USMT seleciona a regra <merge> mais específica e a aplica para resolver o conflito. Por exemplo, se você tem uma regra <merge> para C:\* [*] definida como sourcePriority() e outra regra <merge> para C:\subpasta\* [*] definida como destinationPriority(), a USMT usa a regra destinationPriority() porque é a mais específica.
Cenário de exemplo
O computador de origem contém os seguintes arquivos:
C:\Data\SampleA.txt
C:\Data\SampleB.txt
C:\Data\Folder\SampleB.txt
O computador de destino contém os seguintes arquivos:
C:\Data\SampleB.txt
C:\Data\Folder\SampleB.txt
Você tem um arquivo .xml personalizado que contém o seguinte código:
<include>
<objectSet>
<pattern type="File">c:\data\* [*]</pattern>
</objectSet>
</include>
Para esse exemplo, a tabela abaixo descreve o comportamento resultante quando você adiciona o código à primeira coluna do seu arquivo .xml personalizado.
Se você especifica este código | Comportamento resultante |
---|---|
|
Durante o ScanState, todos os arquivos são adicionados ao repositório. Durante o LoadState, apenas C:\Data\SampleA.txt é restaurado. |
|
Durante o ScanState, todos os arquivos são adicionados ao repositório. Durante o LoadState, todos os arquivos são restaurados, substituindo os arquivos existentes no computador de destino. |
|
Durante o ScanState, todos os arquivos são adicionados ao repositório. Durante o LoadState, ocorre o seguinte:
|