충돌 및 우선 순위

파일 및 설정을 포함, 제외 및 다시 라우팅하는 경우 USMT(사용자 상태 마이그레이션 도구)가 충돌 및 우선 순위를 처리하는 방법을 알고 있는 것이 중요합니다. 다음은 USMT를 사용할 때 유의해야 할 가장 중요한 충돌 및 우선 순위 지침입니다.

  • 구성 요소 내에 충돌하는 규칙이 있는 경우 가장 구체적인 규칙이 적용됩니다. 그러나 <unconditionalExclude> 규칙은 다른 모든 규칙보다 우선하기 때문에 예외입니다. 디렉터리 이름은 파일 확장명보다 우선합니다. 예를 들어 충돌<하는 포함> 및 <제외> 규칙이 있으면 어떻게 되나요?를 참조하고 이 문서의 뒷부분에 나오는< 규칙 우선 순위 예제 포함> 및 <제외>의 첫 번째 예제를 참조하세요.

  • 특정성에 따라 동일한 구성 요소 내의 규칙만 서로 영향을 줄 수 있습니다. 서로 다른 구성 요소에 있는 규칙은 unconditionalExclude> 규칙을 제외하고< 서로 영향을 주지 않습니다.

  • 규칙이 동일하게 특정<한 경우 제외>가 include>보다 <우선합니다. 예를 들어 제외> 규칙을 사용하여 파일을 제외하고 include 규칙을 사용하여 동일한 파일을 포함하는 경우< 파일은 제외됩니다.<>

  • 구성 요소의 순서는 중요하지 않습니다. 각 구성 요소는 모든 .xml 파일에서 다른 구성 요소와 독립적으로 처리되므로 .xml파일에 나열 된 구성 요소는 중요하지 않습니다.

  • 구성 요소 내의 <포함> 및 <제외> 규칙 순서는 중요하지 않습니다.

  • <unconditionalExclude> 요소를 사용하여 데이터를 전역적으로 제외할 수 있습니다. 이 요소는 .xml 파일에 있는 다른 <포함> 규칙에 관계없이 개체를 제외합니다. 예를 들어 unconditionalExclude> 요소를 사용하여 컴퓨터의< 모든 MP3 파일을 제외하거나 에서 C:\UserData모든 파일을 제외할 수 있습니다.

일반

서로 다른 구성 요소 내에 있는 규칙 간의 관계는 무엇인가요?

unconditionalExclude> 규칙을 제외하고 동일한 구성 요소 내의< 규칙만 특이성에 따라 서로 영향을 줄 수 있습니다. 서로 다른 구성 요소에 있는 규칙은 서로 영향을 주지 않습니다. 한 구성 요소에 포함> 규칙이 있고 다른 구성 요소에 동일한 제외 규칙이 있는 경우 두 규칙이 서로 독립적이기 때문에 데이터가 마이그레이션됩니다.<<>

<포함> 규칙이 한 구성 요소에 있고 <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 파일의 우선 순위는 어떻게 작동하나요?

파일에서 Config.xml 지정하는 migrate="no" 것은 마이그레이션 .xml 파일에서 해당 구성 요소를 삭제하는 것과 같습니다. 그러나 이 Documents 폴더에 대해 설정되어 있지만 다음 규칙과 유사한 규칙이 마이그레이션 .xml 파일(Documents 폴더의 모든 .doc 파일 포함)에 있는 경우 migrate="no".doc 파일만 마이그레이션되고 다른 모든 파일은 제외됩니다.

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

USMT는 여러 구성 요소를 사용하여 .xml 파일의 각 구성 요소를 어떻게 처리하나요?

구성 요소의 순서는 중요하지 않습니다. 각 구성 요소는 다른 구성 요소와 독립적으로 처리됩니다. 예를 들어 포함> 규칙이 한 구성 요소에 있고 locationModify 규칙이 동일한 파일의 다른 구성 요소에 있는 경우< 파일은 두 위치에서 모두 마이그레이션됩니다.>< 즉, 파일은 포함> 규칙에 따라< 포함되며, 파일은 locationModify> 규칙에 따라< 마이그레이션됩니다.

규칙은 어떻게 처리되는가?

규칙의 두 가지 광범위한 범주가 있습니다.

  • ScanState 및 LoadState 도구의 동작에 영향을 주는 규칙입니다. 예를 들어 <include>, <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가 있는지 확인합니다.

<포함> 및 <제외> 규칙

충돌하는 <포함> 및 <제외> 규칙이 있으면 어떻게 되나요?

구성 요소 내에 충돌하는 규칙이 있는 경우 다른 모든 규칙보다 우선하는 unconditionalExclude> 규칙을 제외하고< 가장 구체적인 규칙이 적용됩니다. 규칙이 동일하게 특정한 경우 데이터는 마이그레이션되지 않습니다. 예를 들어 동일한 파일이 모두 제외되고 포함된 경우 파일은 마이그레이션되지 않습니다. 서로 다른 구성 요소 내에 충돌하는 규칙이 있는 경우 각 구성 요소가 독립적으로 처리되므로 규칙이 서로 영향을 주지 않습니다.

다음 예제에서는 mp3 파일이 마이그레이션에서 제외되지 않습니다. 디렉터리 이름이 파일 확장명보다 우선하기 때문에 mp3 파일은 제외되지 않습니다.

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

<규칙 우선 순위 예제 포함> 및 <제외>

이러한 예제에서는 USMT가 포함> 및 제외 규칙을 처리하는< 방법을 설명합니다.>< 규칙이 서로 다른 구성 요소에 있는 경우 구성 요소가 동일한지 또는 다른 마이그레이션 .xml 파일에 있는지 여부에 관계없이 결과 동작이 동일합니다.

파일 포함 및 제외

다음 코드가 동일한 구성 요소에 있는 경우 결과 동작 설명
  • 규칙 포함: <pattern type="File">C:\Dir1* []</pattern>
  • 제외 규칙: <패턴 type="File">C:* [.txt]</pattern>
Dir1의 모든 파일 및 하위 폴더를 마이그레이션합니다(C:의 모든 .txt 파일 포함). <제외> 규칙은 포함> 규칙이 더 구체적이기 때문에 마이그레이션에< 영향을 주지 않습니다.
  • 규칙 포함: <pattern type="File">C:\Dir1* []</pattern>
  • 제외 규칙: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>
C:\Dir1\Dir2의 .txt 파일과 하위 폴더를 제외하고 C:\Dir1의 모든 파일과 하위 폴더를 마이그레이션합니다. 두 규칙은 모두 의도한 대로 처리됩니다.
  • 규칙 포함: <pattern type="File">C:\Dir1* []</pattern>
  • 제외 규칙: <pattern type="File">C:\Dir1\ * [.txt]</pattern>
C:\Dir1의 .txt 파일과 해당 하위 폴더를 제외하고 C:\Dir1의 모든 파일 및 하위 폴더를 마이그레이션합니다. 두 규칙은 모두 의도한 대로 처리됩니다.
  • 규칙 포함: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>
  • 제외 규칙: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>
아무것도 마이그레이션되지 않습니다. 규칙은 동일하게 구체적이므로 <제외> 규칙이 포함> 규칙보다< 우선합니다.
  • 포함 규칙: C:\Dir1* [.txt]
  • 제외 규칙: C:\Dir1\Dir2* []
Dir1의 .txt 파일과 Dir2 이외의 하위 폴더에서 .txt 파일을 마이그레이션합니다.
Dir2 또는 하위 폴더에서 마이그레이션된 파일이 없습니다.
두 규칙은 모두 의도한 대로 처리됩니다.
  • 규칙 포함: C:\Dir1\Dir2* []
  • 제외 규칙: C:\Dir1* [.txt]
Dir1의 .txt 파일과 Dir1의 하위 폴더(Dir2 포함)를 제외한 Dir2의 모든 파일과 하위 폴더를 마이그레이션합니다. 두 규칙은 모두 의도한 대로 처리됩니다.
다음 코드가 다른 구성 요소에 있는 경우 결과 동작 설명
구성 요소 1:
  • 규칙 포함: <pattern type="File">C:\Dir1* []</pattern>
  • 제외 규칙: <pattern type="File">C:\Dir1\Dir2* [.txt]</pattern>

구성 요소 2:
  • 규칙 포함: <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:
  • 포함 규칙: C:\Dir1* [.txt]
Dir1의 모든 .txt 파일과 하위 폴더를 마이그레이션합니다. 구성 요소 1에는 포함> 규칙이 없<으므로 <제외> 규칙이 처리되지 않습니다.

레지스트리 개체 포함 및 제외

다음 코드가 동일한 구성 요소에 있는 경우 결과 동작 설명
  • 규칙 포함:
    HKLM\Software\Microsoft\Command Processor* []
  • 제외 규칙:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
DefaultColor를 제외한 HKLM\Software\Microsoft\Command Processor의 모든 키를 마이그레이션합니다. 두 규칙은 모두 의도한 대로 처리됩니다.
  • 규칙 포함:
    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에서 모든 키/값을 마이그레이션합니다. 서로 다른 구성 요소에 있는 규칙은 unconditionalExclude> 규칙을 제외하고< 서로 영향을 주지 않습니다. 이 예제에서는 구성 요소 1이 처리될 때 제외된 개체가 구성 요소 2를 처리할 때 포함되었습니다.

파일 충돌

파일 충돌이 있을 때의 기본 동작은 무엇인가요?

병합> 규칙이 없는< 경우 레지스트리의 기본 동작은 원본이 대상을 덮어쓰는 것입니다. 파일의 기본 동작은 원본 이름을 증분 방식으로 바꾸는 것입니다(예: OriginalFileName(1)). OriginalExtension, OriginalFileName(2). OriginalExtension 등.

<파일 충돌이 있을 때 병합> 규칙은 어떻게 작동하나요?

충돌이 감지되면 USMT는 가장 구체적인 <병합> 규칙을 선택하고 충돌을 resolve 적용합니다. 예를 들어 C:\* [*]에 대한 병합> 규칙이 sourcePriority()로 설정되고 C:\subfolder\* [*]에 대한 다른 병합 규칙이 destinationPriority() 로 설정된 경우< 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 참조입니다.