競合と優先順位

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

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

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

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

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

  • コンポーネント内の <インクルード> ルールと <除外> ルールの順序は関係ありません。

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

全般

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

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

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

次の .xml ファイルは、除外>規則が別のコンポーネントで指定されているため<.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 ファイルでの優先順位のしくみ

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

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

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

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

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

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

  • ScanState ツールと LoadState ツールの両方の動作に影響を与えるルール。 たとえば、<インクルード>除外>、<および<無条件Exclude>ルールは、.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> ルールを除きます<。 ルールが等しく固有の場合、データは移行されません。 たとえば、同じファイルが除外され、含まれている場合、ファイルは移行されません。 異なるコンポーネント内に競合するルールがある場合、各コンポーネントは個別に処理されるため、ルールは相互に影響しません。

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

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

<ルールの優先順位の例を含める> / <除外> する

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

ファイルの含めと除外

次のコードが同じコンポーネントに存在する場合 結果の動作 説明
  • Include rule: <pattern type="File">C:\Dir1* []</pattern>
  • 除外ルール: <pattern type="File">C:* [.txt]</pattern>
Dir1 内のすべてのファイルとサブフォルダー (C: のすべての .txt ファイルを含む) を移行します。 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>
何も移行されません。 ルールは同じように固有であるため<、除外>ルールはインクルード> ルールよりも<優先されます。
  • 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>
  • 除外ルール: <パターン type="File">C:\Dir1* []</pattern>
C:\Dir1\ のすべてのファイルとサブフォルダー (C:\Dir1\Dir2 を含む) を移行します。 異なるコンポーネント内にあるルールは、無条件Exclude> ルールを除き、相互に<影響を与えません。 したがって、この例では、コンポーネント 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 にはインクルード> ルールが含<まれていないため<、除外>ルールは処理されません。

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

次のコードが同じコンポーネントに存在する場合 結果の動作 説明
  • 次の規則を含めます。
    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 が移行されます。<>
  • 次の規則を含めます。
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • 除外ルール:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
DefaultColor は移行されません。 ルールは同じように固有であるため<、除外>ルールはインクルード> ルールよりも<優先されます。
次のコードが異なるコンポーネントに存在する場合 結果の動作 説明
コンポーネント 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 のすべてのキー/値を移行します。 異なるコンポーネント内にあるルールは、無条件Exclude> ルールを除き、相互に<影響を与えません。 この例では、コンポーネント 2 の処理中にコンポーネント 1 が処理されたときに除外されたオブジェクトが含まれていました。

ファイルの競合

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

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

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

競合が検出されると、USMT は最も具体的な <マージ> 規則を選択し、それを適用して競合を解決します。 たとえば、C:\* [*]sourcePriority() に設定され、C:\subfolder\* [*]destinationPriority() に設定されている別<のマージ> ルールが存在する場合<>、USMT は destinationPriority() ルールが最も具体的であるため、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 リファレンス