競合と優先順位

ファイルと設定を含め、除外し、再ルーティングする場合は、ユーザー状態移行ツール (USMT) が競合と優先順位をどのように扱うのかを把握することが重要です。 USMT を使用する際に留意すべき最も重要な競合と優先順位のガイドラインを次に示します。

  • コンポーネント内に競合するルールがある場合は、最も具体的なルールが適用されます。 ただし、 <unconditionalExclude> ルールは、他のすべてのルールよりも優先されるため、例外です。 ディレクトリ名は、ファイル拡張子よりも優先されます。 例については、「競合する<>と<exclude>ルールがある場合の動作」と、この記事の後半の「<include>および <exclude> ルールの優先順位の例」の最初の例を参照してください。

  • 特定性に応じて、同じコンポーネント内のルールのみが相互に影響を与える可能性があります。 < unconditionalExclude>ルールを除き、異なるコンポーネント内のルールは相互に影響しません。

  • ルールが等しく固有である場合は、 <exclude> が <include>よりも優先されます。 たとえば、 <exclude> ルールを使用してファイルを除外し、 <include> ルールを使用して同じファイルを含める場合、ファイルは除外されます。

  • コンポーネントの順序は関係ありません。 各コンポーネントは、すべての .xml ファイルにわたって他のコンポーネントとは独立して処理されるため、どのコンポーネントがどの .xml ファイルに一覧表示されるかは関係ありません。

  • コンポーネント内の<>および<exclude>規則の順序は関係ありません。

  • <unconditionalExclude> 要素を使用して、データをグローバルに除外できます。 この要素は、.xmlファイル内にある他の<>規則に関係なく、オブジェクトを除外します。 たとえば、 <unconditionalExclude> 要素を使用して、コンピューター上のすべての MP3 ファイルを除外したり、すべてのファイルを C:\UserDataから除外したりできます。

全般

異なるコンポーネント内にあるルール間の関係は何ですか?

<unconditionalExclude>規則を除き、特異性に応じて、同じコンポーネント内のルールのみが相互に影響を与える可能性があります。 異なるコンポーネント内のルールは、相互に影響しません。 1 つのコンポーネントに<>ルールがあり別のコンポーネントに同じ<exclude>ルールがある場合、2 つのルールは互いに独立しているため、データが移行されます。

< >規則が 1 つのコンポーネントにあり<locationModify 規則が同じファイルの別のコンポーネントにある場合>ファイルは両方の場所に移行されます。 つまり、ファイルは<>規則に基づいて含まれ、ファイルは <locationModify> 規則に基づいて移行されます。

次の .xml ファイルは、<exclude>規則が別のコンポーネントで指定されているため、.mp3 ファイルを含むすべてのファイルを C:\Userdocs から移行します。

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

Config.xml ファイルでの優先順位のしくみ

Config.xml ファイルでmigrate="no"を指定することは、移行 .xml ファイルから対応するコンポーネントを削除することと同じです。 ただし、migrate="no"が Documents フォルダーに設定されているが、次のようなルールが移行 .xml ファイルに存在する場合 (Documents フォルダーのすべての .doc ファイルを含む)、.doc ファイルのみが移行され、その他のすべてのファイルは除外されます。

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

USMT は、複数のコンポーネントを含む .xml ファイル内の各コンポーネントをどのように処理しますか?

コンポーネントの順序は関係ありません。 各コンポーネントは、他のコンポーネントとは別に処理されます。 たとえば、<include>ルールが 1 つのコンポーネントにあり、<locationModify>ルールが同じファイルの別のコンポーネントにある場合、ファイルは両方の場所で移行されます。 つまり、ファイルは<>規則に基づいて含まれ、ファイルは <locationModify> 規則に基づいて移行されます。

ルールはどのように処理されますか?

ルールには 2 つの大きなカテゴリがあります。

  • ScanState ツールと LoadState ツールの両方の動作に影響を与えるルール。 たとえば、<>、<exclude><unconditionalExclude> ルールは、.xml ファイル内の各コンポーネントに対して処理されます。 コンポーネントごとに、USMT によってインクルード リストと除外リストが作成されます。 コンポーネント内のルールの一部は、特異性のために破棄される場合がありますが、残りのルールはすべて処理されます。 各<>規則について、USMT は要素を反復処理して、いずれかの場所を除外する必要があるかどうかを確認します。 USMT は、すべてのオブジェクトを列挙し、ユーザーごとに収集するオブジェクトの一覧を作成します。 一覧が完了すると、各オブジェクトが保存または移行先のコンピューターに移行されます。

  • LoadState ツールのみの動作に影響を与えるルール。 たとえば、<locationModify>、<contentModify><destinationCleanup>ルールは ScanState に影響しません。 これらは LoadState でのみ処理されます。 まず、LoadState ツールは、<locationModify> および <contentModify> ルールに基づいて、各コンポーネントのコンテンツと場所決定します。 次 に、LoadState はすべての <destinationCleanup> ルールを処理し、コピー先コンピューターからデータを削除します。 最後に、 LoadState によってコンポーネントがコンピューターに適用されます。

USMT は、コマンド ラインで指定したすべての .xml ファイルをどのように結合しますか?

USMT は、名前またはコンテンツに基づいて .xml ファイルを区別しません。 ファイル内の各コンポーネントを個別に処理します。 USMT では、複数 の.xml ファイルがサポートされており、コンポーネントの保守と整理が容易になります。 USMT では urlid を使用して各コンポーネントを他のコンポーネントと区別するため、コマンド ラインで指定された各 .xml ファイルに一意の移行 urlid があることを確認してください。

< >と<exclude>ルール

競合する<>と<exclude>ルールがある場合はどうなりますか?

コンポーネント内に競合するルールがある場合は、他のすべてのルールよりも優先される <unconditionalExclude> ルールを除き、最も具体的なルールが適用されます。 ルールが等しく固有の場合、データは移行されません。 たとえば、同じファイルが除外され、含まれている場合、ファイルは移行されません。 異なるコンポーネント内に競合するルールがある場合、各コンポーネントは個別に処理されるため、ルールは相互に影響しません。

次の例では、mp3 ファイルは移行から除外されません。 ディレクトリ名はファイル拡張子よりも優先されるため、mp3 ファイルは除外されません。

<include>
     <objectSet>
          <pattern type="File">C:\Data\* [*]</pattern>
     </objectSet>
</include>
<exclude>
     <objectSet>
          <pattern type="File"> C:\* [*.mp3]</pattern>
     </objectSet>
</exclude>  

<include> と <exclude> ルールの優先順位の例

これらの例では、USMT が<>および<exclude>ルールを処理する方法について説明します。 ルールが異なるコンポーネントにある場合、コンポーネントが同じか異なる移行 .xml ファイル内にあるかに関係なく、結果の動作は同じです。

ファイルの含めと除外

次のコードが同じコンポーネントに存在する場合 結果の動作 説明
  • Include rule: <pattern type="File">C:\Dir1* []</pattern>
  • 除外規則: <pattern type="File">C:* [.txt]</pattern>
Dir1 内のすべてのファイルとサブフォルダー (C: のすべての .txt ファイルを含む) を移行します。 <exclude>ルールは、<include>ルールがより具体的であるため、移行には影響しません。
  • Include rule: <pattern type="File">C:\Dir1* []</pattern>
  • 除外規則: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>
C:\Dir1\Dir2 内の .txt ファイルとそのサブフォルダーを除く、C:\Dir1 内のすべてのファイルとサブフォルダーを移行します。 どちらのルールも意図したとおりに処理されます。
  • Include rule: <pattern type="File">C:\Dir1* []</pattern>
  • 除外規則: <pattern type="File">C:\Dir1\ * [.txt]</pattern>
C:\Dir1 内の .txt ファイルとそのサブフォルダーを除く、C:\Dir1 内のすべてのファイルとサブフォルダーを移行します。 どちらのルールも意図したとおりに処理されます。
  • Include rule: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>
  • 除外規則: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>
何も移行されません。 ルールは同じように固有であるため、 <exclude> 規則が <include> ルールよりも優先されます。
  • Include rule: C:\Dir1* [.txt]
  • 除外規則: C:\Dir1\Dir2* []
Dir1 内の .txt ファイルと .txt ファイルを Dir2 以外のサブフォルダーから移行します。
Dir2 またはそのサブフォルダーからファイルは移行されません。
どちらのルールも意図したとおりに処理されます。
  • インクルード ルール: C:\Dir1\Dir2* []
  • 除外ルール: C:\Dir1* [.txt]
Dir1 の .txt ファイルと Dir1 のサブフォルダー (Dir2 を含む) を除く、Dir2 のすべてのファイルとサブフォルダーを移行します。 どちらのルールも意図したとおりに処理されます。
次のコードが異なるコンポーネントに存在する場合 結果の動作 説明
コンポーネント 1:
  • Include rule: <pattern type="File">C:\Dir1* []</pattern>
  • 除外規則: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>

コンポーネント 2:
  • Include rule: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>
  • 除外規則: <pattern type="File">C:\Dir1* []</pattern>
C:\Dir1\ のすべてのファイルとサブフォルダー (C:\Dir1\Dir2 を含む) を移行します。 < unconditionalExclude>ルールを除き、異なるコンポーネント内のルールは相互に影響しません。 したがって、この例では、コンポーネント 1 の処理時に除外された .txt ファイルもありますが、コンポーネント 2 の処理時に含まれています。
コンポーネント 1:
  • インクルード ルール: C:\Dir1\Dir2* []

コンポーネント 2:
  • 除外ルール: C:\Dir1* [.txt]
C:\Dir1 内の .txt ファイルとそのサブフォルダーを除き、Dir2 からすべてのファイルとサブフォルダーを移行します。 どちらのルールも意図したとおりに処理されます。
コンポーネント 1:
  • 除外規則: C:\Dir1\Dir2* []

コンポーネント 2:
  • Include rule: C:\Dir1* [.txt]
Dir1 内のすべての .txt ファイルとサブフォルダーを移行します。 コンポーネント 1 には <include> ルールが含まれていないため、 <exclude> ルールは処理されません。

レジストリ オブジェクトの含めと除外

次のコードが同じコンポーネントに存在する場合 結果の動作 説明
  • 次の規則を含めます。
    HKLM\Software\Microsoft\Command Processor* []
  • 除外ルール:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
HKLM\Software\Microsoft\Command Processor 内のすべてのキー (DefaultColor を除く) を移行します。 どちらのルールも意図したとおりに処理されます。
  • 次の規則を含めます。
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • 除外ルール:
    HKLM\Software\Microsoft\Command Processor* []
HKLM\Software\Microsoft\Command Processor で DefaultColor のみを移行します。 DefaultColor は移行されます。<>規則は、<exclude> ルールよりも具体的です。
  • 次の規則を含めます。
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • 除外ルール:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
DefaultColor は移行されません。 ルールは同じように固有であるため、 <exclude> 規則が <include> ルールよりも優先されます。
次のコードが異なるコンポーネントに存在する場合 結果の動作 説明
コンポーネント 1:
  • 次の規則を含めます。
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • 除外ルール:
    HKLM\Software\Microsoft\Command Processor* []

コンポーネント 2:
  • 次の規則を含めます。
    HKLM\Software\Microsoft\Command Processor* []
  • 除外ルール:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
HKLM\Software\Microsoft\Command Processor のすべてのキー/値を移行します。 < unconditionalExclude>ルールを除き、異なるコンポーネント内のルールは相互に影響しません。 この例では、コンポーネント 2 の処理中にコンポーネント 1 が処理されたときに除外されたオブジェクトが含まれていました。

ファイルの競合

ファイルの競合がある場合の既定の動作は何ですか?

<merge>ルールがない場合、レジストリの既定の動作は、ソースが宛先を上書きすることです。 ファイルの既定の動作は、ソースの名前を段階的に変更することです(OriginalFileName(1 など)。OriginalExtension、OriginalFileName(2)。OriginalExtension など。

ファイルの競合がある場合、 <merge> ルールはどのように機能しますか?

競合が検出されると、USMT は最も具体的な <merge> ルールを選択し、それを適用して競合を解決します。 たとえば、<merge>規則が sourcePriority() に設定され、C:\subfolder\* [*]destinationPriority() に設定されている別の <merge> 規則に対して存在する場合、USMT は destinationPriority() 規則を使用します。

シナリオ例

ソース コンピューターには、次のファイルが含まれています。

  • C:\Data\SampleA.txt

  • C:\Data\SampleB.txt

  • C:\Data\Folder\SampleB.txt

コピー先のコンピューターには、次のファイルが含まれています。

  • C:\Data\SampleB.txt

  • C:\Data\SampleB.txt

カスタム .xml ファイルには、次のコードが含まれています。

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

この例では、コードがカスタム .xml ファイルに追加された場合の結果の動作について、次の情報で説明します。

例 1

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

結果: ScanState 中に、すべてのファイルがストアに追加されます。 LoadState では、 C:\Data\SampleA.txt のみが復元されます。

例 2

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

結果: ScanState 中に、すべてのファイルがストアに追加されます。 LoadState 中に、すべてのファイルが復元され、コピー先コンピューター上の既存のファイルが上書きされます。

例 3

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

結果: ScanState 中に、すべてのファイルがストアに追加されます。 LoadState 中に、次のアクションが発生します。

  • C:\Data\SampleA.txt が復元されます。
  • C:\Data\SampleB.txt が復元され、コピー先のコンピューター上の既存のファイルが上書きされます。
  • C:\Data\Folder\SampleB.txt は復元されません。

USMT XML リファレンス