Share via


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
  • Regra de inclusão: <pattern type="File">C:\Dir1\* [*]</pattern>

  • Regra de exclusão: <pattern type="File">C:\* [*.txt]</pattern>

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.

  • Regra de inclusão: <pattern type="File">C:\Dir1\* [*]</pattern>

  • Regra de exclusão: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

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.

  • Regra de inclusão: <pattern type="File">C:\Dir1\* [*]</pattern>

  • Regra de exclusão: <pattern type="File">C:\Dir1\ * [*.txt]</pattern>

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.

  • Regra de inclusão: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

  • Regra de exclusão: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

Nada é migrado.

As regras são igualmente específicas, portanto, a regra <exclude> tem precedência sobre a regra <include>.

  • Regra de inclusão: C:\Dir1\* [*.txt]

  • Regra de exclusão: C:\Dir1\Dir2\* [*]

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.

  • Regra de inclusão: C:\Dir1\Dir2\* [*]

  • Regra de exclusão: C:\Dir1\* [*.txt]

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:

  • Regra de inclusão: <pattern type="File">C:\Dir1\* [*]</pattern>

  • Regra de exclusão: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

Componente 2:

  • Regra de inclusão: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

  • Regra de exclusão: <pattern type="File">C:\Dir1\* [*]</pattern>

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:

  • Regra de inclusão: C:\Dir1\Dir2\* [*]

Componente 2:

  • Regra de exclusão: C:\Dir1\* [*.txt]

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:

  • Regra de exclusão: C:\Dir1\Dir2\* [*]

Componente 2:

  • Regra de inclusão: C:\Dir1\* [*.txt]

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
  • Regra de inclusão: HKLM\Software\Microsoft\Command Processor\* [*]

  • Regra de exclusão: HKLM\Software\Microsoft\Command Processor [DefaultColor]

Migra todas as chaves em HKLM\Software\Microsoft\Command Processor exceto DefaultColor.

Ambas as regras são processadas conforme o esperado.

  • Regra de inclusão: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • Regra de exclusão: HKLM\Software\Microsoft\Command Processor\* [*]

Migra apenas DefaultColor em HKLM\Software\Microsoft\Command Processor.

DefaultColor é migrado porque a regra <include> é mais específica que a regra <exclude>.

  • Regra de inclusão: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • Regra de exclusão: HKLM\Software\Microsoft\Command Processor [DefaultColor]

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:

  • Regra de inclusão: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • Regra de exclusão: HKLM\Software\Microsoft\Command Processor\* [*]

Componente 2:

  • Regra de inclusão: HKLM\Software\Microsoft\Command Processor\* [*]

  • Regra de exclusão: HKLM\Software\Microsoft\Command Processor [DefaultColor]

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
<merge script="MigXmlHelper.DestinationPriority()"> 
   <objectSet> 
      <pattern type="File">c:\data\* [*]</pattern> 
   </objectSet> 
</merge>

Durante o ScanState, todos os arquivos são adicionados ao repositório.

Durante o LoadState, apenas C:\Data\SampleA.txt é restaurado.

<merge script="MigXmlHelper.SourcePriority()"> 
   <objectSet> 
      <pattern type="File">c:\data\* [*]</pattern> 
   </objectSet> 
</merge> 

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.

<merge script="MigXmlHelper.SourcePriority()"> 
   <objectSet> 
      <pattern type="File">c:\data\ [*]</pattern> 
   </objectSet> 
</merge> 

Durante o ScanState, todos os arquivos são adicionados ao repositório.

Durante o LoadState, ocorre o seguinte:

  • C:\Data\SampleA.txt é restaurado.

  • C:\Data\SampleB.txt é restaurado, substituindo o arquivo existente no computador de destino.

  • C:\Data\Folder\SampleB.txt não é restaurado.

Consulte também

Outros Recursos

Referência XML da USMT