競合と優先度

ファイルと設定を対象に含めたり、対象から除外したり、その経路を変更したりする場合には、User State Migration Tool (USMT) 10.0 で競合と優先度がどのように扱われるかを知っておくことが重要です。USMT を操作する際の、競合と優先度に関する最も重要なガイドラインを以下に示します。

  • コンポーネント内で規則が競合している場合は、最も限定的な規則が適用されます。ただし <unconditionalExclude> 規則は例外で、それ以外の規則よりも優先されます。 ディレクトリ名は、ファイルの拡張子よりも優先されます。例については、後述の「<include> 規則と <exclude> 規則が競合したときの動作」と「<include> 規則と <exclude> 規則の優先度の例」の最初の例をご覧ください。

  • 限定性に応じて相互に影響する可能性があるのは、同じコンポーネントに含まれる規則だけです。異なるコンポーネントに含まれる規則は、<unconditionalExclude> 規則を除いて、相互に影響しません。

  • 規則の限定性が等しいときは <exclude> が <include> よりも優先されます。たとえば、<exclude> 規則を使って特定のファイルを除外し、<include> 規則を使ってそのファイルを対象に含めた場合、そのファイルは除外されます。

  • コンポーネントの順序は考慮されません。各コンポーネントはすべての .xml ファイルを通じて他のコンポーネントとは関係なく処理されるため、どの .xml ファイルにどのコンポーネントが含まれているかは関係ありません。

  • コンポーネント内の <include> 規則と <exclude> 規則の順序は考慮されません。

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

このトピックの内容

全般

  • 異なるコンポーネントに含まれる規則の関係性

  • Config.xml ファイルでの優先度の扱い

  • .xml ファイルに複数のコンポーネントが含まれる場合の USMT の処理

  • 規則の処理方法

  • コマンド ラインで指定した全 .xml ファイルが USMT で結合される方法

<include> 規則と <exclude> 規則

  • <include> 規則と <exclude> 規則が競合したときの動作

  • <include> 規則と <exclude> 規則の優先度の例

ファイルの競合

  • ファイルが競合したときの既定の動作

  • ファイルが競合したときの <merge> 規則の動作

全般

異なるコンポーネントに含まれる規則の関係性

同じコンポーネントに含まれる規則のみが、限定性に応じて相互に影響します (<unconditionalExclude> 規則を除く)。異なるコンポーネントの規則は、相互に影響しません。あるコンポーネントに <include> 規則が含まれており、別のコンポーネントに同じ <exclude> 規則が含まれている場合、2 つの規則は独立しているため、データは移行されます。

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

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

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

Config.xml ファイルでの優先度の扱い

Config.xml ファイルで migrate="no" を指定することは、移行 .xml ファイルから対応するコンポーネントを削除するのと同じことです。ただし、マイ ドキュメントに migrate="no" を設定しても、移行 .xml ファイルに以下のような規則 (マイ ドキュメントのすべての .doc ファイルを含める) が含まれている場合、.doc ファイルのみが移行され、その他のファイルはすべて除外されます。

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

.xml ファイルに複数のコンポーネントが含まれる場合の USMT の処理

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

規則の処理方法

規則には、大きく分けて 2 つのカテゴリがあります。

  • ScanState ツールと LoadState ツールの両方の動作に影響を及ぼす規則。たとえば、<include> 規則、<exclude> 規則、<unconditionalExclude> 規則は、.xml ファイル内の各コンポーネントに対して処理されます。USMT によって、コンポーネントごとに対象リストと除外リストが作成されます。コンポーネントの規則の中には、限定性のために破棄されるものもありますが、それ以外の規則はすべて処理されます。USMT は、いずれかの場所を除外する必要があるかどうかを調べるために、各 <include> 規則に対して要素を繰り返し処理します。USMT は、すべてのオブジェクトを列挙し、ユーザーごとに収集するオブジェクトの一覧を作成します。一覧が完成すると、各オブジェクトは、移行先コンピューターに格納または移行されます。

  • LoadState ツールの動作にのみ影響を及ぼす規則。たとえば、<locationModify> 規則、<contentModify> 規則、<destinationCleanup> 規則は ScanState に影響しません。これらは LoadState でのみ処理されます。まず、LoadState ツールは <locationModify> 規則と <contentModify> 規則に基づいて、各コンポーネントの内容と場所を判断します。次に、すべての <destinationCleanup> 規則を処理し、移行先コンピューターからデータを削除します。最後に、コンポーネントをコンピューターに適用します。

コマンド ラインで指定した全 .xml ファイルが USMT で結合される方法

USMT は名前や内容を基に .xml ファイルを区別しません。ファイル内の各コンポーネントは別々に処理されます。USMT では、ファイル内のコンポーネントの管理と整理を容易にするために、複数の .xml ファイルがサポートされています。USMT は移行 urlid を使って各コンポーネントを区別するため、コマンド ラインで指定した各 .xml ファイルに一意の移行 urlid があることを確かめてください。

<include> 規則と <exclude> 規則

<include> 規則と <exclude> 規則が競合したときの動作

コンポーネント内で規則が競合している場合は、最も限定的な規則が適用されます。ただし <unconditionalExclude> 規則は例外で、それ以外の規則よりも優先されます。規則の限定性が等しいとき、データは移行されません。たとえば、あるファイルを対象から除外すると同時に、対象に含めている場合、ファイルは移行されません。異なるコンポーネントに含まれる規則が競合している場合、規則は相互に影響しません。各コンポーネントは独立して処理されるためです。

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

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

<include> 規則と <exclude> 規則の優先度の例

以下の例では、USMT が <include> 規則と <exclude> 規則をどのように扱うかを説明します。規則が異なるコンポーネントに含まれている場合は、コンポーネントが同じ移行 .xml ファイルにあるか異なる移行 .xml ファイルにあるかに関係なく、その結果の動作は同じになります。

  • ファイルを含めるか、除外する

  • レジストリ オブジェクトを含めるか、除外する

ファイルを含めるか、除外する

同じコンポーネントに次のコードがある場合 結果の動作 説明
  • <include> 規則: <pattern type="File">C:\Dir1\* [*]</pattern>

  • <exclude> 規則: <pattern type="File">C:\* [*.txt]</pattern>

Dir1 内のすべてのファイルとサブフォルダーを移行します (C: 内の全 .txt ファイルを含む)。

<include> 規則の方がより限定的であるため、<exclude> 規則は移行に影響しません。

  • <include> 規則: <pattern type="File">C:\Dir1\* [*]</pattern>

  • <exclude> 規則: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

C:\Dir1\Dir2 内の .txt ファイルとそのサブフォルダーを除いて、C:\Dir1 内のすべてのファイルとサブフォルダーを移行します。

両方の規則が意図したとおりに処理されます。

  • <include> 規則: <pattern type="File">C:\Dir1\* [*]</pattern>

  • <exclude> 規則: <pattern type="File">C:\Dir1\ * [*.txt]</pattern>

C:\Dir1 内の .txt ファイルとそのサブフォルダーを除いて、C:\Dir1 内のすべてのファイルとサブフォルダーを移行します。

両方の規則が意図したとおりに処理されます。

  • <include> 規則: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

  • <exclude> 規則: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

何も移行されません。

規則の限定性が等しいため、<exclude> 規則が <include> 規則よりも優先されます。

  • <include> 規則: C:\Dir1\* [*.txt]

  • <exclude> 規則: C:\Dir1\Dir2\* [*]

Dir1 内の .txt ファイルと Dir2 以外のサブフォルダーの .txt ファイルを移行します。

Dir2 またはそのサブフォルダーのファイルは移行されません。

両方の規則が意図したとおりに処理されます。

  • <include> 規則: C:\Dir1\Dir2\* [*]

  • <exclude> 規則: C:\Dir1\* [*.txt]

Dir1 の .txt ファイルと Dir1 のすべてのサブフォルダー (Dir2 を含む) を除いて、Dir2 のすべてのファイルとサブフォルダーを移行します。

両方の規則が意図したとおりに処理されます。

 

異なるコンポーネントに次のコードがある場合 結果の動作 説明

コンポーネント 1:

  • <include> 規則: <pattern type="File">C:\Dir1\* [*]</pattern>

  • <exclude> 規則: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

コンポーネント 2:

  • <include> 規則: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

  • <exclude> 規則: <pattern type="File">C:\Dir1\* [*]</pattern>

C:\Dir1\ (C:\Dir1\Dir2\ を含む) のすべてのファイルとサブフォルダーを移行します。

異なるコンポーネントにある規則は、<unconditionalExclude> 規則を除いて、相互に影響しません。そのため、この例では、コンポーネント 1 が処理されたときにいくつかの .txt ファイルが除外されますが、それらのファイルは、コンポーネント 2 が処理されるときに含められます。

コンポーネント 1:

  • <include> 規則: C:\Dir1\Dir2\* [*]

コンポーネント 2:

  • <exclude> 規則: C:\Dir1\* [*.txt]

C:\Dir1 内の .txt ファイルとそのサブフォルダーを除いて、Dir2 のすべてのファイルとサブフォルダーを移行します。

両方の規則が意図したとおりに処理されます。

コンポーネント 1:

  • <exclude> 規則: C:\Dir1\Dir2\* [*]

コンポーネント 2:

  • <include> 規則: C:\Dir1\* [*.txt]

Dir1 内のすべての .txt ファイルとサブフォルダーを移行します。

コンポーネント 1 には <include> 規則が含まれないため、<exclude> 規則は処理されません。

 

レジストリ オブジェクトを含めるか、除外する

同じコンポーネントに次のコードがある場合 結果の動作 説明
  • <include> 規則: HKLM\Software\Microsoft\Command Processor\* [*]

  • <exclude> 規則: HKLM\Software\Microsoft\Command Processor [DefaultColor]

DefaultColor 以外の HKLM\Software\Microsoft\Command Processor 内のすべてのキーを移行します。

両方の規則が意図したとおりに処理されます。

  • <include> 規則: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • <exclude> 規則: HKLM\Software\Microsoft\Command Processor\* [*]

HKLM\Software\Microsoft\Command Processor 内の DefaultColor のみを移行します。

<include> 規則の方が <exclude> 規則よりも限定的であるため、DefaultColor が移行されます。

  • <include> 規則: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • <exclude> 規則: HKLM\Software\Microsoft\Command Processor [DefaultColor]

DefaultColor は移行されません。

規則の限定性が等しいため、<exclude> 規則が <include> 規則よりも優先されます。

 

異なるコンポーネントに次のコードがある場合 結果の動作 説明

コンポーネント 1:

  • <include> 規則: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • <exclude> 規則: HKLM\Software\Microsoft\Command Processor\* [*]

コンポーネント 2:

  • <include> 規則: HKLM\Software\Microsoft\Command Processor\* [*]

  • <exclude> 規則: HKLM\Software\Microsoft\Command Processor [DefaultColor]

HKLM\Software\Microsoft\Command Processor 以下のすべてのキーと値を移行します。

異なるコンポーネントにある規則は、<unconditionalExclude> 規則を除いて、相互に影響しません。そのため、この例では、コンポーネント 1 が処理されるときに除外されるオブジェクトが、コンポーネント 2 が処理されるときに含められます。

 

ファイルの競合

ファイルが競合したときの既定の動作

<merge> 規則がない場合、レジストリの既定の動作では、移行元の情報によって移行先の情報が上書きされます。ファイルについては、既定で移行元のファイル名が変更され、数字が付加されます。たとえば、OriginalFileName(1).OriginalExtension、OriginalFileName(2).OriginalExtension などのファイル名になります。

ファイルが競合したときの <merge> 規則の動作

競合が検出されると、USMT では最も限定的な <merge> 規則が選ばれ、競合を解決するために適用されます。たとえば、C:\* [*] を sourcePriority() に設定する <merge> 規則があり、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\Folder\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 のみが復元されます。

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

ScanState の処理中に、すべてのファイルがストアに追加されます。

LoadState の処理中に、すべてのファイルが復元され、移行先コンピューター上に既にあるファイルが上書きされます。

<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 リファレンス