Конфликты и приоритет
При включении, исключении и изменении перенаправления файлов и параметров важно знать, как средство миграции пользовательской среды (USMT) справляется с конфликтами и приоритетом. Ниже приведены наиболее важные конфликты и рекомендации по приоритету, которые следует учитывать при работе с USMT.
Если в компоненте есть конфликтующие правила, применяется наиболее конкретное правило. Однако правило безусловного< исключения> является исключением, так как оно имеет приоритет над всеми остальными. Имена каталогов имеют приоритет над расширениями файлов. Примеры см. в разделе Что происходит при наличии конфликтующих <правил включения> и <исключения>? и первый пример в <примерах приоритета правил включения> и <исключения> далее в этой статье.
Только правила внутри одного компонента могут влиять друг на друга в зависимости от специфики. Правила, которые находятся в разных компонентах, не влияют друг на друга, за исключением правила безусловного< исключения>.
Если правила одинаково специфичны, <исключение> имеет приоритет над <включением>. Например, если <правило исключения> используется для исключения файла, а <правило включения> используется для включения одного и того же файла, файл исключается.
Порядок компонентов не имеет значения. Не имеет значения, какие компоненты перечислены в каком .xml файле, так как каждый компонент обрабатывается независимо от других компонентов во всех .xml файлах.
Порядок <правил включения> и <исключения> в компоненте не имеет значения.
Элемент <unconditionalExclude> можно использовать для глобального исключения данных. Этот элемент исключает объекты, независимо от других <правил включения> , которые находятся в файлах.xml . Например, <элемент unconditionalExclude> можно использовать для исключения всех MP3-файлов на компьютере или для исключения всех файлов из
C:\UserData
.
Общее
Какова связь между правилами, расположенными в разных компонентах?
Только правила внутри одного компонента могут влиять друг на друга в зависимости от специфики, за исключением правила безусловного< включения>. Правила, которые находятся в разных компонентах, не влияют друг на друга. При наличии <правила включения> в одном компоненте и идентичного <правила исключения> в другом компоненте данные переносятся, так как эти два правила не зависят друг от друга.
<Если правило включения> находится в одном компоненте<, а правило locationModify> находится в другом компоненте для того же файла, файл переносится в обоих местах. То есть файл включается на <основе правила включения> , а файл переносится на <основе правила locationModify> .
Следующий файл.xml переносит все файлы из C:\Userdocs, включая файлы.mp3 , так как <правило исключения> указывается в отдельном компоненте.
<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 миграции. Однако если migrate="no"
для папки Документы задано правило, аналогичное следующему, существует в файле миграции.xml (который содержит все .doc файлы из папки Документы ), то переносятся только файлы.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 файл, указанный в командной строке, имеет уникальный URL-код миграции.
Правила <включения> и <исключения>
Что происходит при наличии конфликтующих <правил включения> и <исключения> ?
Если в компоненте есть конфликтующие правила, применяется наиболее конкретное правило, за исключением правила безусловного< исключения>, которое имеет приоритет над всеми другими правилами. Если правила одинаково специфичны, данные не переносятся. Например, если один и тот же файл исключен и включен, файл не переносится. Если в разных компонентах есть конфликтующие правила, они не влияют друг на друга, так как каждый компонент обрабатывается независимо.
В следующем примере mp3-файлы не исключаются из миграции. Mp3-файлы не исключаются, так как имена каталогов имеют приоритет над расширениями файлов.
<include>
<objectSet>
<pattern type="File">C:\Data\* [*]</pattern>
</objectSet>
</include>
<exclude>
<objectSet>
<pattern type="File"> C:\* [*.mp3]</pattern>
</objectSet>
</exclude>
<Примеры приоритета правил включения> и <исключения>
В этих примерах объясняется, как USMT работает с <правилами включения> и <исключения> . Если правила находятся в разных компонентах, результирующее поведение будет одинаковым независимо от того, находятся ли компоненты в одном или в разных файлах.xmlмиграции .
Включение и исключение файлов
Если следующий код существует в том же компоненте | Результирующее поведение | Объяснение |
---|---|---|
|
Переносит все файлы и вложенные папки в Dir1 (включая все .txt файлы в C:). | Правило <исключения> не влияет на миграцию, так как <правило включения> является более конкретным. |
|
Переносит все файлы и вложенные папки в C:\Dir1, за исключением .txt файлов в C:\Dir1\Dir2 и его вложенных папок. | Оба правила обрабатываются по назначению. |
|
Переносит все файлы и вложенные папки в C:\Dir1, за исключением .txt файлов в C:\Dir1 и его вложенных папок. | Оба правила обрабатываются по назначению. |
|
Ничего не переносится. | Правила одинаково специфичны, поэтому <правило исключения> имеет приоритет над правилом <включения> . |
|
Переносит файлы.txt в Dir1 и файлы.txt из вложенных папок, отличных от Dir2. Файлы не переносятся из Dir2 или его вложенных папок. |
Оба правила обрабатываются по назначению. |
|
Переносит все файлы и вложенные папки Dir2, за исключением .txt файлов из Dir1 и всех вложенных папок Dir1 (включая Dir2). | Оба правила обрабатываются по назначению. |
Если следующий код существует в разных компонентах | Результирующее поведение | Объяснение |
---|---|---|
Компонент 1.
Компонент 2.
|
Переносит все файлы и вложенные папки C:\Dir1\ (включая C:\Dir1\Dir2). | Правила, которые находятся в разных компонентах, не влияют друг на друга, за исключением правила безусловного< исключения>. Таким образом, в этом примере, хотя некоторые .txt файлы были исключены при обработке компонента 1, они были включены при обработке компонента 2. |
Компонент 1.
Компонент 2.
|
Переносит все файлы и вложенные папки из Dir2, кроме файлов.txt в C:\Dir1 и его вложенных папок. | Оба правила обрабатываются по назначению. |
Компонент 1.
Компонент 2.
|
Переносит все .txt файлы в Dir1 и все вложенные папки. | Компонент 1 не содержит <правила включения> , поэтому <правило исключения> не обрабатывается. |
Включение и исключение объектов реестра
Если следующий код существует в том же компоненте | Результирующее поведение | Объяснение |
---|---|---|
|
Переносит все ключи в HKLM\Software\Microsoft\Command Processor, кроме DefaultColor. | Оба правила обрабатываются по назначению. |
|
Переносит только DefaultColor в HKLM\Software\Microsoft\Command Processor. | DefaultColor переносится, так как <правило включения> является более конкретным, чем <правило исключения> . |
|
Не переносит DefaultColor. | Правила одинаково специфичны, поэтому <правило исключения> имеет приоритет над правилом <включения> . |
Если следующий код существует в разных компонентах | Результирующее поведение | Объяснение |
---|---|---|
Компонент 1.
Компонент 2.
|
Переносит все ключи и значения в HKLM\Software\Microsoft\Command Processor. | Правила, которые находятся в разных компонентах, не влияют друг на друга, за исключением правила безусловного< исключения>. В этом примере объекты, исключенные при обработке компонента 1, были включены при обработке компонента 2. |
Конфликты файлов
Каково поведение по умолчанию при возникновении конфликтов файлов?
Если правила слияния> нет<, по умолчанию для реестра источник перезаписывает назначение. Поведение по умолчанию для файлов — постепенное переименование источника: например, OriginalFileName(1). OriginalExtension, OriginalFileName(2). OriginalExtension и т. д.
Как работает <правило слияния> при наличии конфликтов файлов?
При обнаружении конфликта USMT выбирает наиболее конкретное <правило слияния> и применяет его для разрешения конфликта. Например, если для 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
не восстанавливаются.