Конфликты и приоритет
Когда вы включаете, исключаете и перенаправляете файлы и параметры, важно знать, как средство миграции пользовательской среды (USMT) 10.0 работает с конфликтами и приоритетом. Во время работы со средством USMT наиболее важными конфликтами и рекомендациями в отношении приоритета являются следующие.
Если в компоненте есть конфликтующие правила, применяется наиболее точное правило. Однако правило <unconditionalExclude> является исключением и имеет приоритет над всеми остальными правилами. Имена каталогов имеют приоритет перед расширениями файлов. Примеры см. далее в этом разделе в подразделе Что происходит, если совместить конфликтующие правила включения и исключения? и первый пример в подразделе Примеры приоритета при включении и исключении.
Только правила внутри одного компонента влияют друг на друга, в зависимости от характера правила. Правила, которые находятся в разных компонентах, не влияют друг на друга, за исключением правила <unconditionalExclude>.
Если правила одинаково частные, <exclude> имеет приоритет над <include>. Например, если вы используете правило <exclude> для исключения какого-либо файла и правило <include> для включения того же файла, то файл будет исключен.
Порядок компонентов не имеет значения. Не имеет значения, в каком XML-файле перечисляются компоненты, потому что каждый компонент обрабатывается независимо от других компонентов во всех XML-файлах.
Порядок правил <include> и <exclude> в компоненте не имеет значения.
Можно использовать элемент <unconditionalExclude> для глобального исключения данных. Этот элемент исключает объекты независимо от любых других правил <include> в XML-файлах. Например, можно использовать элемент <unconditionalExclude> для исключения всех имеющихся на компьютере MP3-файлов или для исключения всех файлов из папки C:\UserData.
В этом разделе
Общие вопросы
Как соотносятся между собой правила в разных компонентах?
Как работают приоритеты для файла Config.xml?
Как средство миграции пользовательской среды обрабатывает каждый компонент в XML-файле с несколькими компонентами?
Как обрабатываются правила?
Как средство миграции пользовательской среды объединяет все XML-файлы, указанные в командной строке?
Правила <include> и <exclude>
Что происходит при конфликте правил включения и исключения?
Примеры приоритетности правил <include> и <exclude>
Конфликты файлов
Поведение по умолчанию при конфликте файлов
Как действует правило <merge> при наличии конфликтов файлов?
Общие вопросы
Как соотносятся между собой правила в разных компонентах?
Взаимное влияние, основанное на приоритете более частного, возможно только для правил в одном компоненте, кроме правила <unconditionalExclude>. Правила в разных компонентах не влияют друг на друга. Если в одном компоненте присутствует правило <include>, а в другом компоненте — идентичное правило <exclude>, данные будут перенесены, так как эти два правила взаимно независимы.
Если у вас для одного и того же файла есть правило <include> в одном компоненте и правило <locationModify> в другом компоненте, файл будет перенесен в обоих расположениях. То есть он будет включен в соответствии с правилом <include> и будет перенесен в соответствии с правилом <locationModify>.
Следующий XML-файл переносит все файлы из каталога C:\Userdocs, включая MP3-файлы, так как правило <exclude> определено в отдельном компоненте.
<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?
Определение migrate="no"
в файле Config.xml равносильно удалению соответствующего компонента из XML-файла переноса. Тем не менее, если вы задали migrate="no"
для папки "Мои документы", но в XML-файле переноса у вас есть правило, аналогичное одному из показанных ниже (включающее все DOC-файлы из папки "Мои документы"), будут перенесены только DOC-файлы, а все остальные файлы будут исключены.
<include>
<objectSet>
<pattern type="File">%CSIDL_PERSONAL%\* [*.doc] </pattern>
</objectSet>
</include>
Как средство миграции пользовательской среды обрабатывает каждый компонент в XML-файле с несколькими компонентами?
Порядок компонентов не имеет значения. Каждый компонент обрабатывается независимо от остальных компонентов. Например, если у вас для одного и того же файла есть правило <include> в одном компоненте и правило <locationModify> в другом компоненте, файл будет перенесен в обоих расположениях. То есть он будет включен в соответствии с правилом <include> и будет перенесен в соответствии с правилом <locationModify>.
Как обрабатываются правила?
Существует две обширных категории правил.
Правила, которые влияют на поведение средств ScanState и LoadState. Например, правила <include>, <exclude> и <unconditionalExclude> в XML-файлах обрабатываются для каждого компонента. Для каждого компонента средство USMT создает список включений и список исключений. Некоторые правила в компоненте могут быть отменены из-за приоритета более частного, но все остальные правила будут обработаны. Для каждого правила <include> средство USMT выполняет итерацию элементов, чтобы проверить, нет ли в них расположений, которые нужно исключить. Средство USMT перечисляет все объекты и создает список объектов, которые оно будет собирать для каждого пользователя. После создания списка каждый объект сохраняется или переносится на целевой компьютер.
Правила, которые влияют на поведение только средства LoadState. По умолчанию правила <locationModify>, <contentModify> и <destinationCleanup> не влияют на ScanState. Они обрабатываются только LoadState. Сначала средство LoadState определяет содержимое и расположение каждого компонента, основываясь на правилах <locationModify> и <contentModify>. Затем LoadState обрабатывает все правила <destinationCleanup> и удаляет данные с целевого компьютера. В завершение LoadState применяет компоненты к компьютеру.
Как средство миграции пользовательской среды объединяет все XML-файлы, указанные в командной строке?
Средство USMT не различает XML-файлы по именам или содержимому. Каждый компонент в файлах обрабатывается отдельно. Средство USMT поддерживает несколько XML-файлов только для упрощения обслуживания и организации компонентов в них. Поскольку средство USMT использует идентификатор URL, чтобы отличить один компонент от другого, убедитесь, что каждый XML-файл, указанный в командной строке, имеет уникальный идентификатор URL.
Правила <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-файлах переноса.
Включение и исключение файлов
Включение и исключение объектов реестра
Включение и исключение файлов
Если следующий код присутствует в одном компоненте | Итоговое поведение | Объяснение |
---|---|---|
|
Переносит все файлы и вложенные папки в Dir1 (включая все TXT-файлы в корневом каталоге диска C:). |
Правило <exclude> не оказывает влияния на результат переноса, потому что правило <include> более частное. |
|
Переносит все файлы и вложенные папки в C:\Dir1, кроме TXT-файлов в C:\Dir1\Dir2 и его вложенных папках. |
Обрабатываются оба правила, как и планировалось. |
|
Переносит все файлы и вложенные папки в C:\Dir1, кроме TXT-файлов в C:\Dir1\ и его вложенных папках. |
Обрабатываются оба правила, как и планировалось. |
|
Ни один элемент не будет перенесен. |
Правила одинаково частные, поэтому правило <exclude> имеет приоритет перед правилом <include>. |
|
Переносит все TXT-файлы в Dir1 и TXT-файлы из вложенных папок, кроме Dir2. Из каталога Dir2 или его вложенных папок не переносится ни одного файла. |
Обрабатываются оба правила, как и планировалось. |
|
Переносит все файлы и вложенные папки из Dir2 за исключением TXT-файлов Dir1 и всех вложенных папок Dir1 (включая Dir2). |
Обрабатываются оба правила, как и планировалось. |
Если следующий код присутствует в разных компонентах | Итоговое поведение | Объяснение |
---|---|---|
Компонент 1:
Компонент 2:
|
Переносит все файлы и вложенные папки из C:\Dir1\ (включая C:\Dir1\Dir2\). |
Правила в разных компонентах не влияют друг на друга, кроме правила <unconditionalExclude>. Таким образом, несмотря на то, что в данном примере некоторые TXT-файлы были исключены при обработке компонента 1, они были включены при обработке компонента 2. |
Компонент 1:
Компонент 2:
|
Переносит все файлы и вложенные папки из C:\Dir1, кроме TXT-файлов в C:\Dir1\ и его вложенных папках. |
Обрабатываются оба правила, как и планировалось. |
Компонент 1:
Компонент 2:
|
Переносит все TXT-файлы из Dir1 и любых вложенных папок. |
Компонент 1 не содержит правила <include>, поэтому правило <exclude> не обрабатывается. |
Включение и исключение объектов реестра
Если следующий код присутствует в одном компоненте | Итоговое поведение | Объяснение |
---|---|---|
|
Переносит все разделы в HKLM\Software\Microsoft\Command Processor кроме DefaultColor. |
Обрабатываются оба правила, как и планировалось. |
|
Переносит только DefaultColor в HKLM\Software\Microsoft\Command Processor. |
DefaultColor переносится потому, что правило <include> более частное, чем правило <exclude>. |
|
Не переносит DefaultColor. |
Правила одинаково частные, поэтому правило <exclude> имеет приоритет перед правилом <include>. |
Если следующий код присутствует в разных компонентах | Итоговое поведение | Объяснение |
---|---|---|
Компонент 1:
Компонент 2:
|
Переносит все разделы и значения в HKLM\Software\Microsoft\Command Processor. |
Правила в разных компонентах не влияют друг на друга, кроме правила <unconditionalExclude>. Следовательно, в этом примере объекты, которые были исключены при обработке компонента 1, были включены при обработке компонента 2. |
Конфликты файлов
Поведение по умолчанию при конфликте файлов
Если не определено правило <merge>, то поведение по умолчанию для реестра заключается в том, что данные с исходного компьютера перезаписывают данные на целевом компьютере. Поведение по умолчанию для файлов заключается в том, что файлы на исходном компьютере получают имена с приращением, например: Исходное_имя_файла(1).Исходное_расширение, Исходное_имя_файла(2).Исходное_расширение и т. д.
Как действует правило <merge> при наличии конфликтов файлов?
Если конфликт обнаружен, средство миграции пользовательской среды выбирает наиболее строгое правило <merge> и применяет его, чтобы устранить конфликт. Например, если правило <merge> для C:\* [*] имеет значение sourcePriority(), а другое правило <merge> для C:\subfolder\* [*] имеет значение destinationPriority(), то средство 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-файла.
Если вы указываете следующий код | Итоговое поведение |
---|---|
|
При выполнении команды ScanState все файлы будут добавлены в хранилище. При выполнении команды LoadState будет восстановлен только файл C:\Data\SampleA.txt. |
|
При выполнении команды ScanState все файлы будут добавлены в хранилище. При выполнении команды LoadState будут восстановлены все файлы с перезаписью файлов на целевом компьютере. |
|
При выполнении команды ScanState все файлы будут добавлены в хранилище. При выполнении команды LoadState произойдет следующее.
|
Связанные разделы
Справочник по XML для средства миграции пользовательской среды