Conflitos e precedência

Ao incluir, excluir e redirecionar arquivos e configurações, é importante saber como a USMT (Ferramenta de Migração de Estado do Usuário) lida com conflitos e precedência. A seguir estão as diretrizes de conflitos e precedência mais importantes a serem lembradas ao trabalhar com a USMT.

  • Se houver regras conflitantes em um componente, a regra mais específica será aplicada. No entanto, a <regra unconditionalExclude> é uma exceção porque tem precedência sobre todas as outras. Os nomes de diretório têm precedência sobre as extensões de arquivo. Para obter exemplos, consulte O que acontece quando há regras de inclusão> e <exclusão> conflitantes? e o primeiro exemplo em exemplos de precedência de <regras de inclusão> e <exclusão> mais adiante neste artigo.<

  • Somente 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> .

  • Se as regras forem igualmente específicas, <excluir> terá precedência sobre <incluir>. Por exemplo, se a <regra de exclusão> for usada para excluir um arquivo e usar a regra de <inclusão> para incluir o mesmo arquivo, o arquivo será 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 de <inclusão> e <exclusão> em um componente não importa.

  • O <elemento unconditionalExclude> pode ser usado para excluir dados globalmente. Esse elemento exclui objetos, independentemente de qualquer outra <regra de inclusão> que esteja nos arquivos .xml . Por exemplo, o <elemento unconditionalExclude> pode ser usado para excluir todos os arquivos MP3 no computador ou para excluir todos os arquivos do C:\UserData.

Geral

Qual é a relação entre as regras localizadas em diferentes componentes?

Somente 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. Se houver uma <regra de inclusão> em um componente e uma regra de exclusão> idêntica< em outro componente, os dados serão migrados porque as duas regras são independentes uma da outra.

Se uma <regra de inclusão> estiver em um componente e uma <regra locationModify> estiver em outro componente para o mesmo arquivo, o arquivo será migrado em ambos os locais. Ou seja, o arquivo é incluído com base na <regra de inclusão> e é migrado <com base na regra locationModificar> .

O arquivo .xml a seguir migra todos os arquivos de C:\Userdocs, incluindo arquivos.mp3 , porque a <regra de exclusão> é especificada em um componente separado.

<migration urlid="http://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 Config.xml arquivo é o mesmo que excluir o componente correspondente do arquivo de.xml de migração. No entanto, se migrate="no" estiver definido para a pasta de Documentos , mas existir uma regra semelhante à seguinte em um arquivo de .xml de migração (que inclui todos os arquivos de .doc da pasta de Documentos ), somente os arquivos.doc serão migrados e todos os outros arquivos serão excluídos:

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

Como a USMT 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 uma <regra de inclusão> estiver em um componente e uma <regra locationModify> estiver em outro componente para o mesmo arquivo, o arquivo será migrado em ambos os locais. Ou seja, o arquivo é incluído com base na <regra de inclusão> e é migrado <com base na regra locationModificar> .

Como as regras são processadas?

Existem duas grandes categorias 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ão e uma lista de exclusão. Algumas das regras no componente podem ser descartadas devido à especificidade, mas todas as regras restantes são processadas. Para cada <regra de inclusão> , a USMT itera pelos elementos para ver se algum dos locais precisa ser excluído. A USMT enumera todos os objetos e cria uma lista de objetos que coletará para cada usuário. Quando a lista estiver concluída, cada um dos objetos será 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 ScanState<.<><> Eles são processados apenas com LoadState. Primeiro, a ferramenta LoadState determina o conteúdo e o local de cada componente com base nas <regras locationModify> e <contentModify> . Em seguida, o LoadState processa <todas as regras destinationCleanup> e exclui dados do computador de destino. Por fim, LoadState aplica os componentes ao computador.

Como a USMT 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. Ele processa cada componente dentro dos arquivos separadamente. A USMT oferece suporte a vários arquivos .xml apenas para facilitar a manutenção e a organização dos componentes dentro deles. Como a USMT usa um urlid para distinguir cada componente dos outros, certifique-se de que cada arquivo .xml especificado na linha de comando tenha um urlid de migração exclusivo.

As <regras de inclusão> e <exclusão>

O que acontece quando há regras de inclusão> e <exclusão> conflitantes<?

Se houver regras conflitantes em um componente, a regra mais específica será aplicada, exceto com a <regra unconditionalExclude> , que tem precedência sobre todas as outras regras. Se as regras forem igualmente específicas, os dados não serão migrados. Por exemplo, se o mesmo arquivo for excluído e incluído, o arquivo não será migrado. Se houver regras conflitantes em componentes diferentes, as regras não afetarão umas às outras porque cada componente é processado de forma independente.

No exemplo a seguir, os arquivos mp3 não são excluídos da migração. Os arquivos mp3 não são excluídos 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>

<Incluir> e <excluir> exemplos de precedência de regras

Esses exemplos explicam como a USMT lida com regras de <inclusão> e <exclusão> . Quando as regras estão em componentes diferentes, o comportamento resultante é o mesmo, independentemente de os componentes estarem nos mesmos arquivos de.xml de migração ou em diferentes.

Incluindo e excluindo arquivos

Se o código a seguir existir no mesmo componente Comportamento resultante Explicação
  • Incluir regra: <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 de exclusão> não afeta a migração porque a regra de <inclusão> é mais específica.
  • Incluir regra: <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.
  • Incluir regra: <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.
  • Incluir regra: <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 de exclusão> tem precedência sobre a regra de <inclusão> .
  • Incluir regra: C:\Dir1* [.txt]
  • Regra de exclusão: C:\Dir1\Dir2* []
Migra os arquivos .txt em Dir1 e os arquivos .txt de subpastas diferentes de Dir2.
Nenhum arquivo é migrado do Dir2 ou de suas subpastas.
Ambas as regras são processadas conforme o esperado.
  • Incluir regra: 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 de quaisquer subpastas de Dir1 (incluindo Dir2). Ambas as regras são processadas conforme o esperado.
Se o código a seguir existir em componentes diferentes Comportamento resultante Explicação
Componente 1:
  • Incluir regra: <pattern type="File">C:\Dir1* []</pattern>
  • Regra de exclusão: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>

Componente 2:
  • Incluir regra: <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 tenham sido excluídos quando o Componente 1 foi processado, eles foram incluídos quando o Componente 2 foi processado.
Componente 1:
  • Incluir regra: 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:
  • Incluir regra: C:\Dir1* [.txt]
Migra todos os arquivos .txt em Dir1 e em quaisquer subpastas. O componente 1 não contém uma <regra de inclusão> , portanto, a <regra de exclusão> não é processada.

Incluindo e excluindo objetos do Registro

Se o código a seguir existir no mesmo componente Comportamento resultante Explicação
  • Incluir regra:
    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.
  • Incluir regra:
    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 de <inclusão> é mais específica do que a <regra de exclusão> .
  • Incluir regra:
    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 de exclusão> tem precedência sobre a regra de <inclusão> .
Se o código a seguir existir em componentes diferentes Comportamento resultante Explicação
Componente 1:
  • Incluir regra:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • Regra de exclusão:
    HKLM\Software\Microsoft\Command Processor* []

Componente 2:
  • Incluir regra:
    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> . Neste exemplo, os objetos que foram excluídos quando o Componente 1 foi processado foram incluídos quando o Componente 2 foi processado.

Colisões de arquivos

Qual é o comportamento padrão quando há colisões de arquivos?

Se não houver uma <regra de mesclagem> , o comportamento padrão do Registro será a origem substituir o destino. O comportamento padrão para arquivos é a origem a ser renomeada incrementalmente: por exemplo, OriginalFileName(1). OriginalExtension, OriginalFileName(2). OriginalExtension e assim por diante.

Como funciona a <regra de mesclagem> quando há colisões de arquivos?

Quando uma colisão é detectada, a USMT seleciona a regra de mesclagem> mais específica< e a aplica para resolver o conflito. Por exemplo, se existir uma <regra de mesclagem> para C:\* [*] definida como sourcePriority() e outra <regra de mesclagem> para C:\subpasta\* [*] definida como destinationPriority() , a USMT usará 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\SampleB.txt

Um arquivo de.xml personalizado contém o seguinte código:

<include>
   <objectSet>
      <pattern type="File">c:\data\* [*]</pattern>
   </objectSet>
</include>

Para este exemplo, as informações a seguir descrevem o comportamento resultante se o código for adicionado ao arquivo de.xml personalizado.

Exemplo 1

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

Resultado: durante o ScanState, todos os arquivos são adicionados ao repositório. Durante LoadState, somente C:\Data\SampleA.txt é restaurado.

Exemplo 2

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

Resultado: 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.

Exemplo 3

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

Resultado: durante o ScanState, todos os arquivos são adicionados ao repositório. Durante o LoadState, ocorrem as seguintes ações:

  • C:\Data\SampleA.txt foi restaurado.
  • C:\Data\SampleB.txt é restaurado, substituindo o arquivo existente no computador de destino.
  • C:\Data\Folder\SampleB.txt não serão restauradas.

Referência de XML da USMT.