Библиотека XML-элементов
В этой статье описываются XML-элементы и вспомогательные функции, которые можно использовать для создания миграции .xml файлов для использования с помощью средства миграции пользовательской среды (USMT). В этой статье предполагается базовое знание XML.
В дополнение к XML-элементам и вспомогательным функциям, эта статья:
- Описывается указание закодированных расположений и шаблонов расположений.
- Функции, которые предназначены только для внутреннего USMT, используются только.
- Теги версий, которые можно использовать со вспомогательными функциями.
Элементы и вспомогательные функции
В следующей таблице описаны XML-элементы и вспомогательные функции, которые можно использовать с USMT.
<addObjects>
Элемент <addObjects> имитирует существование одного или нескольких объектов на исходном компьютере. Дочерние <элементы объекта> предоставляют сведения о эмулированных объектах. Если содержимое является элементом <скрипта> , результатом вызова является массив объектов.
Число вхождений: не ограничено
Родительские элементы:<правила>
Обязательные дочерние элементы:<object> . Кроме того, <расположение> и <атрибут> должны быть указаны в качестве дочерних элементов этого <элемента объекта> .
Необязательные дочерние элементы:<условия>, <условие>, <скрипт>
Синтаксис:
<addObjects>
</addObjects>
Следующий пример из MigApp.xml
файла:
<addObjects>
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [UpgradeVersion]</location>
<attributes>DWORD</attributes>
<bytes>0B000000</bytes>
</object>
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
<attributes>DWORD</attributes>
<bytes>00000000</bytes>
</object>
</addObjects>
<Атрибуты>
Элемент <attributes> определяет атрибуты для раздела реестра или файла.
Количество вхождений: один раз для каждого <объекта>
Родительские элементы:<object>
Дочерние элементы: none
Синтаксис:
<attributes>Content</attributes>
Параметр | Обязательно? | Значение |
---|---|---|
Содержимое | Да | Содержимое зависит от типа указанного объекта.
|
Следующий пример из MigApp.xml
файла:
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
<attributes>DWORD</attributes>
<bytes>00000000</bytes>
</object>
<Байт>
Элемент <bytes> можно указать только для файлов, так как если <расположение> соответствует разделу реестра или каталогу, <байты> игнорируются.
Количество вхождений: ноль или одно
Родительские элементы:<object>
Дочерние элементы: none
Синтаксис:
<bytes string="Yes|No" expand="Yes|No">Content</bytes>
Параметр | Обязательно? | Значение |
---|---|---|
string | Нет, по умолчанию — Нет. | Определяет, следует ли интерпретировать содержимое как строку или как байт. |
expand | Нет (по умолчанию = Да | Если параметр expand имеет значение Да, содержимое <элемента bytes> сначала разворачивается в контексте исходного компьютера, а затем интерпретируется. |
Содержимое | Да | Зависит от значения строки.
|
Следующий пример из MigApp.xml
файла:
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
<attributes>DWORD</attributes>
<bytes>00000000</bytes>
</object>
<commandLine>
Элемент <commandLine> можно использовать для запуска или остановки службы или приложения до или после запуска средств ScanState и LoadState .
Число вхождений: не ограничено
Родительские элементы:<externalProcess>
Дочерние элементы: none
Синтаксис:
<commandLine>CommandLineString</commandLine>
Параметр | Обязательно? | Значение |
---|---|---|
CommandLineString | Да | Допустимая командная строка. |
<компонент>
Элемент <компонента> является обязательным в пользовательском .xml файле. Этот элемент определяет основную конструкцию файла .xmlмиграции . Например, в MigApp.xml
файле Microsoft Office 2016 является компонентом, который содержит другой компонент, Microsoft Office Access 2016. Для определения компонента можно использовать дочерние элементы.
Компонент может быть вложен в другой компонент; то есть <элемент компонента> может быть дочерним элементом <элемента роли> в элементе <компонента> в двух случаях:
- Когда родительский <элемент компонента> является контейнером
- Значение , если дочерний <элемент компонента> имеет ту же роль, что и родительский <элемент компонента> .
Количество вхождений: Неограниченный
Родительские элементы:<миграция>, <роль>
Обязательные дочерние элементы:<role>, <displayName>
Необязательные дочерние элементы:<производитель>, <версия>, <описание>, <пути>, <значок>, <среда>, <расширения>
Синтаксис:
<component type="System|Application|Device|Documents" context="User|System|UserAndSystem" defaultSupported="TRUE|FALSE|YES|NO"
hidden="Yes|No">
</component>
Параметр | Обязательно? | Значение |
---|---|---|
type | Да | Следующие элементы можно использовать для группировки параметров и определения типа компонента.
|
контекст | Нет По умолчанию = UserAndSystem |
Определяет область этого параметра, т. е. следует ли обрабатывать этот компонент в контексте конкретного пользователя, во всей операционной системе или в обоих случаях. Наибольший возможный область задается элементом <компонента>. Например, если <элемент компонента> имеет контекст User , а <элемент rules> имеет контекст UserAndSystem, элемент <rules> будет действовать так, как будто он имеет контекст User. Если элемент rules> имеет контекст System, он будет действовать так, как будто элемента rules<>< нет.
|
defaultSupported | Нет (по умолчанию = TRUE) |
Может иметь значение TRUE, FALSE, ДА или НЕТ. Если этот параметр имеет значение FALSE (или NO), компонент не переносится, если на целевом компьютере нет эквивалентного компонента. Если type="System" и defaultSupported="FALSE", параметры не переносятся, если в .xml файлах, указанных LoadState.exe в командной строке, нет эквивалентного компонента. Например, файл по умолчанию MigSys.xml содержит компоненты с type="System" и defaultSupported="FALSE". Если этот файл указан в командной строке ScanState.exe , он также должен быть указан в командной LoadState.exe строке для переноса параметров. Файл должен быть указан в обеих командных строках, так как средство LoadState должно обнаружить эквивалентный компонент. То есть компонент должен иметь тот же URL-адрес миграции файла.xml и идентичное отображаемое имя, иначе средство LoadState не переносит эти параметры из хранилища. Этот параметр полезен, так как хранилище можно использовать для конечных компьютеров, которые имеют ту же или другую версию Windows, что и исходный компьютер. |
скрытый | Этот параметр предназначен только для внутреннего использования USMT. |
Пример см. в любом из файлов миграции по умолчанию.xml.
<состояние>
<Хотя элемент condition> в <элементах detect>, <objectSet> и <addObjects> по-прежнему поддерживается, корпорация Майкрософт рекомендует больше не использовать <элемент condition>, так как он может быть нерекомендуем в будущих версиях USMT. <Если элемент condition> является устаревшим, потребуется перезаписать все скрипты, использующие <элемент condition>. Вместо этого, если условие необходимо использовать в <элементах objectSet> и <addObjects> , корпорация Майкрософт рекомендует использовать более мощный <элемент conditions> . Элемент <conditions> позволяет формулировать сложные логические инструкции.
Элемент <condition> имеет логический результат. Этот элемент можно использовать для указания условий, в которых вычисляется родительский элемент. Если какое-либо из указанных условий возвращает значение FALSE, родительский элемент не вычисляется.
Число вхождений: неограниченно.
Родительские элементы:<conditions>, <detect>, <objectSet>, <addObjects>
Дочерние элементы: none
Вспомогательные функции: С этим элементом можно использовать следующие <функции условия>:
DoesOSMatch
, ,IsNative64Bit()
,IsOSLaterThan
,IsOSEarlierThan
DoesObjectExist
,DoesFileVersionMatch
,IsFileVersionAbove
, ,IsFileVersionBelow
,IsSystemContext
,DoesStringContentEqual
,DoesStringContentContain
,IsSameObject
,IsSameContent
иIsSameStringContent
.
Синтаксис:
<condition negation="Yes|No">ScriptName</condition>
Параметр | Обязательно? | Значение |
---|---|---|
отрицание | Нет По умолчанию = Нет |
Значение "Да" отменяет значение True или False условия. |
ScriptName | Да | Скрипт, определенный в этом разделе миграции. |
Например, в следующем примере <кода элементы условия>A и B объединяются оператором AND , так как находятся в отдельных <разделах условий> :
<detection>
<conditions>
<condition>A</condition>
</conditions>
<conditions operation="AND">
<condition>B</condition>
</conditions>
</detection>
Однако в следующем примере <кода элементы условия>A и B объединяются оператором OR , так как находятся в одном <разделе условий> .
<detection>
<conditions>
<condition>A</condition>
<condition>B</condition>
</conditions>
</detection>
<Функции условий>
Функции <условия> возвращают логическое значение. Эти элементы можно использовать в <условиях addObjects> .
Функции версии операционной системы
DoesOSMatch
Все совпадения не учитывают регистр.
Синтаксис:
DoesOSMatch("OSType","OSVersion")
Параметр Обязательно? Значение OSType Да Единственное допустимое значение для этого параметра — NT. Однако этот параметр необходимо задать, чтобы функции условий> работали< правильно. OSVersion Да Основная версия, дополнительная версия, номер сборки и исправленная версия дискеты службы разделены точками. Например, 5.0.2600.Service Pack 1
. Частичная спецификация версии также может быть указана с помощью шаблона,5.0.*
например .Пример
<condition>MigXmlHelper.DoesOSMatch("NT","\*")</condition>
IsNative64Bit
Функция IsNative64Bit возвращает значение TRUE , если процесс миграции выполняется как собственный 64-разрядный процесс; то есть процесс, выполняемый в 64-разрядной системе без Windows в Windows (WOW). В противном случае возвращается значение FALSE.
IsOSLaterThan
Все сравнения не учитывают регистр.
Синтаксис:
IsOSLaterThan("OSType","OSVersion")
Параметр Обязательно? Значение OSType Да Может быть 9x или NT. Если ТИП OSType не соответствует типу текущей операционной системы, возвращается значение FALSE. Например, если текущая операционная система основана на Windows NT, а osType — "9x", результатом будет ЛОЖЬ. OSVersion Да Основная версия, дополнительная версия, номер сборки и исправленная версия дискеты службы разделены точками. Например, 5.0.2600.Service Pack 1
. Можно также указать частичную спецификацию версии, но шаблон не допускается, например5.0
.
Функция IsOSLaterThan возвращает значение TRUE , если текущая операционная система позже или равна OSVersion.Пример
<condition negation="Yes">MigXmlHelper.IsOSLaterThan("NT","6.0")</condition>
IsOSEarlierThan
Все сравнения не учитывают регистр.
Синтаксис:
IsOSEarlierThan("OSType","OSVersion")
Параметр Обязательно? Значение OSType Да Может быть 9x или NT. Если ТИП OSType не соответствует типу текущей операционной системы, возвращается значение FALSE. Например, если текущая операционная система основана на Windows NT, а OSType — "9x", результатом будет FALSE. OSVersion Да Основная версия, дополнительная версия, номер сборки и исправленная версия дискеты службы разделены точками. Например, 5.0.2600.Service Pack 1
. Можно также указать частичную спецификацию версии, но шаблон не допускается, например5.0
.
Функция IsOSEarlierThan возвращает значение TRUE , если текущая операционная система находится раньше , чем OSVersion.
Функции содержимого объектов
DoesObjectExist
Функция DoesObjectExist возвращает значение TRUE , если существует какой-либо объект, соответствующий шаблону расположения. В противном случае возвращается значение FALSE. Шаблон расположения развертывается перед попыткой перечисления.
Синтаксис:
DoesObjectExist("ObjectType","EncodedLocationPattern")
Параметр Обязательно? Значение ObjectType Да Определяет тип объекта. Может быть файлом или реестром. EncodedLocationPattern Да Шаблон расположения. Переменные среды разрешены. Пример этого элемента см. в
MigApp.xml
файле .DoesFileVersionMatch
Шаблон проверка не учитывает регистр.
Синтаксис:
DoesFileVersionMatch("EncodedFileLocation","VersionTag","VersionValue")
Параметр Обязательно? Значение EncodedFileLocation Да Шаблон расположения для проверяемого файла. Переменные среды разрешены. VersionTag Да Значение тега версии , которое проверяется. VersionValue Да Шаблон строки. Например, "Microsoft*". Пример:
<condition>MigXmlHelper.DoesFileVersionMatch("%MSNMessengerInstPath%\\msnmsgr.exe","ProductVersion","6.\*")</condition> <condition>MigXmlHelper.DoesFileVersionMatch("%MSNMessengerInstPath%\\msnmsgr.exe","ProductVersion","7.\*")</condition>
IsFileVersionAbove
Функция IsFileVersionAbove возвращает значение TRUE , если версия файла выше VersionValue.
Синтаксис:
IsFileVersionAbove("EncodedFileLocation","VersionTag","VersionValue")
Параметр Обязательно? Значение EncodedFileLocation Да Шаблон расположения для проверяемого файла. Переменные среды разрешены. VersionTag Да Значение тега версии , которое проверяется. VersionValue Да Сравниваемое значение. Невозможно указать шаблон. IsFileVersionBelow
Синтаксис:
IsFileVersionBelow("EncodedFileLocation","VersionTag","VersionValue")
Параметр Обязательно? Значение EncodedFileLocation Да Шаблон расположения для проверяемого файла. Переменные среды разрешены. VersionTag Да Значение тега версии , которое проверяется. VersionValue Да Сравниваемое значение. Невозможно указать шаблон. IsSystemContext
Функция IsSystemContext возвращает значение TRUE , если текущий контекст имеет значение System. В противном случае возвращается значение FALSE.
Синтаксис:
IsSystemContext()
DoesStringContentEqual
Функция DoesStringContentEqual возвращает значение TRUE , если строковое представление данного объекта идентично
StringContent
.Синтаксис:
DoesStringContentEqual("ObjectType","EncodedLocation","StringContent")
Параметр Обязательно? Значение ObjectType Да Определяет тип объекта . Может быть файлом или реестром. EncodedLocationPattern Да Закодированное расположение проверяемого объекта. Переменные среды можно указать. StringContent Да Строка, с которым выполняется проверка. Пример
<condition negation="Yes">MigXmlHelper.DoesStringContentEqual("File","%USERNAME%","")</condition>
DoesStringContentContain
Функция DoesStringContentContain возвращает значение TRUE , если в строковом представлении объекта имеется хотя бы одно вхождение StrToFind .
Синтаксис:
DoesStringContentContain("ObjectType","EncodedLocation","StrToFind")
Параметр Обязательно? Значение ObjectType Да Определяет тип объекта . Может быть файлом или реестром. EncodedLocationPattern Да Закодированное расположение проверяемого объекта. Переменные среды можно указать. StrToFind Да Строка, которая выполняется в содержимом заданного объекта. IsSameObject
Функция IsSameObject возвращает значение TRUE , если заданные закодированные расположения разрешаются в один и тот же физический объект. В противном случае возвращается значение FALSE.
Синтаксис:
IsSameObject("ObjectType","EncodedLocation1","EncodedLocation2")
Параметр Обязательно? Значение ObjectType Да Определяет тип объекта . Может быть файлом или реестром. EncodedLocation1 Да Закодированное расположение для первого объекта. Переменные среды можно указать. EncodedLocation2 Да Закодированное расположение для второго объекта. Переменные среды можно указать. Пример:
<objectSet> <condition negation="Yes">MigXmlHelper.IsSameObject("File","%CSIDL_FAVORITES%","%CSIDL_COMMON_FAVORITES%")</condition> <pattern type="File">%CSIDL_FAVORITES%\* [*]</pattern> </objectSet>
IsSameContent
Функция IsSameContent возвращает значение TRUE , если заданные объекты имеют одинаковое содержимое. В противном случае возвращается значение FALSE. Содержимое сравнивается по байтам.
Синтаксис:
IsSameContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")
Параметр Обязательно? Значение ObjectType1 Да Определяет тип первого объекта. Может быть файлом или реестром. EncodedLocation1 Да Закодированное расположение для первого объекта. Переменные среды можно указать. ObjectType2 Да Определяет тип второго объекта. Может быть файлом или реестром. EncodedLocation2 Да Закодированное расположение для второго объекта. Переменные среды можно указать. IsSameStringContent
Функция IsSameStringContent возвращает значение TRUE , если заданные объекты имеют одинаковое содержимое. В противном случае возвращается значение FALSE. Содержимое интерпретируется как строка.
Синтаксис:
IsSameStringContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")
Параметр Обязательно? Значение ObjectType1 Да Определяет тип первого объекта. Может быть файлом или реестром. EncodedLocation1 Да Закодированное расположение для первого объекта. Переменные среды можно указать. ObjectType2 Да Определяет тип второго объекта. Может быть файлом или реестром. EncodedLocation2 Да Закодированное расположение для второго объекта. Переменные среды можно указать.
<условия>
Элемент <conditions> возвращает логический результат, который используется для указания условий, в которых вычисляется родительский элемент. USMT оценивает дочерние элементы, а затем объединяет их результаты с помощью операторов AND или OR в соответствии с параметром операции.
Количество вхождений: Неограниченный внутри другого <элемента условий> . Ограничено одним вхождением в <обнаружении>, <правилах>, <addObjects> и <objectSet>
Родительские элементы:<условия>, <обнаружение>, <среда>, <правила>, <addObjects> и <objectSet>
Синтаксис:
<conditions operation="AND|OR">
</conditions>
Параметр | Обязательно? | Значение |
---|---|---|
операция | Нет, по умолчанию = AND | Определяет логическую операцию, выполняемую с результатами, полученными из дочерних элементов. |
Следующий пример из MigApp.xml
файла:
<environment name="GlobalEnv">
<conditions>
<condition negation="Yes">MigXmlHelper.IsNative64Bit()</condition>
</conditions>
<variable name="HklmWowSoftware">
<text>HKLM\Software</text>
</variable>
</environment>
<содержание>
Элемент <content> можно использовать для указания списка шаблонов объектов для получения набора объектов с исходного компьютера. Вычисляется каждый <objectSet> в элементе <содержимого> . Для каждого результирующего списка шаблонов объектов перечисляются соответствующие ему объекты, а их содержимое фильтруется по параметру фильтра. Результирующий строковый массив является выходными данными для элемента содержимого<>. Скрипт фильтра возвращает массив расположений. Родительский <элемент objectSet> может содержать несколько дочерних <элементов содержимого> .
Число вхождений: не ограничено
Родительские элементы:<objectSet>
Дочерние элементы:<objectSet>
Вспомогательные функции: С этим элементом можно использовать следующие <функции содержимого>:
ExtractSingleFile
,ExtractMultipleFiles
иExtractDirectory
.
Синтаксис:
<content filter="ScriptInvocation">
</content>
Параметр | Обязательно? | Значение |
---|---|---|
filter | Да | Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например, MyScripts.AScript ("Arg1","Arg2") .Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле <включения> . Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. |
<функции содержимого>
Следующие функции создают шаблоны из содержимого объекта . Эти функции вызываются для каждого объекта, перечисляемого родительским <элементом ObjectSet> .
ExtractSingleFile
Если значение реестра — MULTI-SZ, обрабатывается только первый сегмент. Возвращаемый шаблон — это закодированное расположение для файла, который должен существовать в системе. Если спецификация указана правильно в значении реестра, но файл не существует, эта функция возвращает значение NULL.
Синтаксис:
ExtractSingleFile(Separators,PathHints)
Параметр Обязательно? Значение Разделители Да Список возможных разделителей, которые могут соответствовать спецификации файла в этом имени значения реестра. Например, если содержимое — "C:\Windows\Notepad.exe-2", разделитель — запятая. Можно указать значение NULL. PathHints Да Список дополнительных путей, разделенных двоеточием ( ;
), где функция ищет файл, соответствующий текущему содержимому. Например, если содержимое — "Notepad.exe", а путь — это переменная среды %Path%, функция находит Notepad.exe в%windir%
и возвращает "c:\Windows [Notepad.exe]". Можно указать значение NULL.Пример:
<content filter="MigXmlHelper.ExtractSingleFile(',','%system%')">
и
<content filter="MigXmlHelper.ExtractSingleFile(NULL,'%CSIDL_COMMON_FONTS%')">
ExtractMultipleFiles
Функция ExtractMultipleFiles возвращает несколько шаблонов, по одному для каждого файла, который находится в содержимом заданного значения реестра. Если значение реестра — MULTI-SZ, разделитель MULTI-SZ по умолчанию считается разделителем. Поэтому для MULTI-SZ<аргумент Разделители> должен иметь значение NULL.
Возвращаемые шаблоны — это закодированные расположения для файлов, которые должны существовать на исходном компьютере. Если спецификация указана правильно в значении реестра, но файл не существует, она не включается в результирующий список.
Синтаксис:
ExtractMultipleFiles(Separators,PathHints)
Параметр Обязательно? Значение Разделители Да Список возможных разделителей, которые могут соответствовать спецификации файла в этом имени значения реестра. Например, если содержимое — "C:\Windows\Notepad.exe-2", разделитель — запятая. Этот параметр должен иметь значение NULL при обработке значений реестра MULTI-SZ . PathHints Да Список дополнительных путей, разделенных двоеточием ( ;
), где функция ищет файл, соответствующий текущему содержимому. Например, если содержимое — "Notepad.exe", а путь — это переменная среды %Path%, функция находит Notepad.exe в%windir%
и возвращает "c:\Windows [Notepad.exe]". Можно указать значение NULL.ExtractDirectory
Функция ExtractDirectory возвращает шаблон, который является закодированным расположением для каталога, который должен существовать на исходном компьютере. Если спецификация указана правильно в значении реестра, но каталог не существует, эта функция возвращает значение NULL. При обработке значения реестра, которое является MULTI-SZ, обрабатывается только первый сегмент.
Синтаксис:
ExtractDirectory(Separators,LevelsToTrim,PatternSuffix)
Параметр Обязательно? Значение Разделители Нет Список возможных разделителей, которые могут соответствовать спецификации файла в этом имени значения реестра. Например, если содержимое — "C:\Windows\Notepad.exe-2", разделитель — запятая. При обработке значений реестра MULTI-SZ необходимо указать значение NULL. LevelsToTrim Да Количество уровней, удаляемых из конца спецификации каталога. Используйте эту функцию для извлечения корневого каталога при наличии значения реестра, указывающего внутри этого корневого каталога в известном расположении. PatternSuffix Да Шаблон, добавляемый в спецификацию каталога. Например, * [*]
.Пример:
<objectSet> <content filter='MigXmlHelper.ExtractDirectory (NULL, "1")'> <objectSet> <pattern type="Registry">%HklmWowSoftware%\Classes\Software\RealNetworks\Preferences\DT_Common []</pattern> </objectSet> </content> </objectSet>
<contentModify>
Элемент <contentModify> изменяет содержимое объекта перед записью объекта на целевой компьютер. Для каждого <элемента contentModify> может быть несколько <элементов objectSet> . Этот элемент возвращает новое содержимое обрабатываемого объекта.
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Обязательные дочерние элементы:<objectSet>
Вспомогательные функции. С этим элементом можно использовать следующие <функции contentModify>: ConvertToDWORD, ConvertToString, ConvertToBinary, KeepExisting, OffsetValue, SetValueByTable, MergeMultiSzContent и MergeDelimitedContent.
Синтаксис:
<contentModify script="ScriptInvocation">
</contentModify>
Параметр | Обязательно? | Значение |
---|---|---|
сценарий | Да | Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например MyScripts.AScript ("Arg1","Arg2"). Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле включения. Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. |
<функции contentModify>
Следующие функции изменяют содержимое объектов по мере их переноса. Эти функции вызываются для каждого объекта, перечисляемого родительским <элементом ObjectSet> .
ConvertToDWORD
Функция ConvertToDWORD преобразует содержимое значений реестра, перечисляемых родительским <элементом ObjectSet> , в DWORD. Например, ConvertToDWORD преобразует строку
"1"
в DWORD0x00000001
. Если преобразование завершается ошибкой, применяется значение DefaultValueOnError .Синтаксис:
ConvertToDWORD(DefaultValueOnError)
Параметр Обязательно? Значение DefaultValueOnError Нет Значение, которое записывается в имя значения в случае сбоя преобразования. Значение NULL можно указать, и 0
записывается в случае сбоя преобразования.ConvertToString
Функция ConvertToString преобразует содержимое значений реестра, которые соответствуют родительскому <элементу ObjectSet> , в строку. Например, он преобразует DWORD
0x00000001
в строку "1". Если преобразование завершается ошибкой, применяется значение DefaultValueOnError .Синтаксис:
ConvertToString(DefaultValueOnError)
Параметр Обязательно? Значение DefaultValueOnError Нет Значение, которое записывается в имя значения в случае сбоя преобразования. Значение NULL можно указать, и 0
записывается в случае сбоя преобразования.Пример:
<contentModify script="MigXmlHelper.ConvertToString('1')"> <objectSet> <pattern type="Registry">HKCU\Control Panel\Desktop [ScreenSaveUsePassword]</pattern> </objectSet> </contentModify>
ConvertToBinary
Функция ConvertToBinary преобразует содержимое значений реестра, которые соответствуют родительскому <элементу ObjectSet> , в двоичный тип.
Синтаксис:
ConvertToBinary ()
OffsetValue
Функция OffsetValue добавляет значение или вычитает значение из значения перенесенного объекта, а затем записывает результат обратно в значение реестра на конечном компьютере. Например, если перенесенный объект является DWORD со значением
14
, а значение — "-2", значение реестра будет находиться12
на конечном компьютере.Синтаксис:
OffsetValue(Value)
Параметр Обязательно? Значение Ценность Да Строковое представление числового значения. Он может быть положительным или отрицательным. Например, OffsetValue(2)
.SetValueByTable
Функция SetValueByTable сопоставляет значение исходного компьютера с исходной таблицей. Если значение имеется, применяется эквивалентное значение в целевой таблице. Если значение отсутствует или целевая таблица не имеет эквивалентного значения, применяется значение DefaultValueOnError .
Синтаксис:
SetValueByTable(SourceTable,DestinationTable,DefaultValueOnError)
Параметр Обязательно? Значение SourceTable Да Список значений, разделенных запятыми, которые возможны для исходных значений реестра. DestinationTable Нет Список переведенных значений, разделенных запятыми. DefaultValueOnError Нет Значение, применяемое к конечному компьютеру, если - Значение исходного компьютера не совпадает с SourceTable.
- DestinationTable не имеет эквивалентного значения.
Если defaultValueOnError имеет значение NULL, значение не изменяется на конечном компьютере.KeepExisting
Функцию KeepExisting можно использовать при возникновении конфликтов на конечном компьютере. Эта функция сохраняет (не перезаписывает) указанные атрибуты для объекта, который находится на конечном компьютере.
Синтаксис:
KeepExisting("OptionString","OptionString","OptionString",…)
Параметр Обязательно? Значение OptionString Да OptionString может иметь значение Security, TimeFields или FileAttrib:Letter. Можно указать один из каждого типа OptionStrings . Не указывайте несколько OptionStrings с одинаковым значением. Если указано несколько объектов OptionStrings с одинаковым значением, сохраняется самый правый параметр этого типа. Например, не указывайте ("FileAttrib:H", "FileAttrib:R"), так как вычисляется только для чтения. Вместо этого укажите ("FileAttrib:HR"), а на конечном компьютере хранятся как скрытые, так и только для чтения атрибуты. - Безопасность: сохраняет дескриптор безопасности целевого объекта, если он существует.
- TimeFields: сохраняет метки времени целевого объекта. Этот параметр предназначен только для файлов.
-
FileAttrib:<Letter>: сохраняет значение атрибута целевого объекта ( ON или OFF) для указанного набора атрибутов файла. Этот параметр предназначен только для файлов. Ниже приведены значения без учета регистра, но USMT игнорирует все значения, которые являются недопустимыми, повторяющимися или если после FileAttrib:есть пробел. Можно указать любое сочетание следующих атрибутов:
- A = Archive
- C = сжатый
- E = Зашифровано
- H = скрытый
- I = не индексировано содержимого
- O = в автономном режиме
- R = Read-Only
- S = System
- T = временный
MergeMultiSzContent
Функция MergeMultiSzContent объединяет содержимое MULTI-SZ значений реестра, перечисляемых родительским <элементом ObjectSet> , с содержимым эквивалентных значений реестра, которые уже существуют на конечном компьютере.
Instruction
иString
либо удалить, либо добавить содержимое в результирующий MULTI-SZ. Повторяющиеся элементы удаляются.Синтаксис:
MergeMultiSzContent (Instruction,String,Instruction,String,…)
Параметр Обязательно? Значение Инструкция Да Может иметь одно из следующих значений: - Добавить. Добавляет соответствующую строку в результирующий объект MULTI-SZ, если его еще нет.
- Удалить. Удаляет соответствующую строку из результирующего MULTI-SZ.
Строка Да Добавляемая или удаляемая строка. MergeDelimitedContent
Функция MergeDelimitedContent объединяет содержимое значений реестра, перечисленных родительским <элементом ObjectSet> , с содержимым эквивалентных значений реестра, которые уже существуют на конечном компьютере. Содержимое считается списком элементов, разделенных одним из символов в параметре Разделители. Повторяющиеся элементы удаляются.
Синтаксис:
MergeDelimitedContent(Delimiters,Instruction,String,…)
Параметр Обязательно? Значение Разделители Да Один символ, используемый для разделения содержимого обрабатываемого объекта. Содержимое рассматривается как список элементов, разделенных разделителями.
Например,"."
разделяет строку на основе точки.Инструкция Да Может иметь одно из следующих значений: - Добавить: добавляет string в результирующий MULTI-SZ, если он еще не существует.
- Удалить. Удаляет строку из полученного multi-SZ.
Строка Да Добавляемая или удаляемая строка.
<описание>
Элемент <description> определяет описание компонента, но не влияет на миграцию.
Количество вхождений: ноль или одно
Родительские элементы:<component>
Дочерние элементы: none
Синтаксис:
<description>ComponentDescription</description>
Параметр | Обязательно? | Значение |
---|---|---|
ComponentDescription | Да | Описание компонента. |
В следующем примере кода показано, как <элемент description> определяет описание "Мой настраиваемый компонент".
<description>My custom component<description>
<destinationCleanup>
Элемент <destinationCleanup> удаляет объекты, такие как файлы и разделы реестра, с конечного компьютера перед применением объектов с исходного компьютера. Этот элемент вычисляется только при запуске средства LoadState на конечном компьютере. То есть этот элемент игнорируется средством ScanState .
Важно.
Используйте этот параметр с особой осторожностью, так как он удалит объекты с конечного компьютера.
Для каждого <элемента destinationCleanup> может быть несколько <элементов objectSet> . Обычно этот элемент используется, если на исходном компьютере отсутствует раздел реестра, но компонент по-прежнему требуется перенести. В этом случае все разделы реестра компонента можно удалить перед переносом исходных разделов реестра. Удаление всех разделов реестра компонента гарантирует, что если на исходном компьютере отсутствует ключ, он также будет отсутствовать на конечном компьютере.
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Дочерние элементы:<objectSet> (конечный компьютер удаляет все дочерние элементы.)
Синтаксис:
<destinationCleanup filter=ScriptInvocation>
</destinationCleanup>
Параметр | Обязательно? | Значение |
---|---|---|
filter | Да | Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например, MyScripts.AScript ("Arg1","Arg2") .Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле включения. Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. |
Пример:
<destinationCleanup>
<objectSet>
<pattern type="Registry">HKCU\Software\Lotus\123\99.0\DDE Preferences\* [*]</pattern>
<pattern type="Registry">HKCU\Software\Lotus\123\99.0\Find Preferences\* [*]</pattern>
</objectSet>
</destinationCleanup>
<обнаруживать>
Хотя элемент detect> по-прежнему< поддерживается, корпорация Майкрософт рекомендует больше не использовать <элемент detect>, так как он может быть нерекомендуем в будущих версиях USMT. <Если элемент detect> является устаревшим, потребуется перезаписать все скрипты, использующие <элемент detect>. Вместо этого корпорация Майкрософт рекомендует использовать <элемент обнаружения> . Элемент <обнаружения> позволяет более четко сформулировать сложные логические инструкции.
Элемент <detect> можно использовать для определения наличия компонента в системе. Если все дочерние <элементы обнаружения> в элементе <обнаружения> разрешаются в TRUE, то <элемент detect> разрешается в TRUE. Если какие-либо дочерние <элементы обнаружения> разрешаются в FALSE, то их родительский <элемент обнаружения> разрешается в FALSE. Если раздел элемента обнаружения> отсутствует<, USMT предполагает наличие компонента.
Для каждого <элемента обнаружения> может быть несколько дочерних <элементов условия> или <objectSet> , которые логически соединены оператором OR . Если хотя бы один <элемент condition> или <objectSet> имеет значение TRUE, то <элемент detect> будет иметь значение TRUE.
Число вхождений: не ограничено
Родительские элементы:<detects>, <namedElements>
Обязательные дочерние элементы:<condition>
Необязательные дочерние элементы:<objectSet>
Синтаксис:
<detect name="ID" context="User|System|UserAndSystem">
</detect>
Параметр | Обязательно? | Значение |
---|---|---|
name | Да, если <свойство detect> является дочерним элементом для< именованныхЭлементов> Нет, если <обнаружение> является дочерним объектом для <обнаружения> |
Если указан идентификатор , все дочерние элементы не обрабатываются. Вместо этого обрабатываются любые другие <элементы обнаружения> с тем же именем, объявленные в элементе <namedElements> . |
контекст | Нет (по умолчанию = UserAndSystem) |
Определяет область этого параметра, который определяет, следует ли обрабатывать этот компонент в контексте конкретного пользователя, во всей операционной системе или в обоих случаях. Наибольший возможный область задается элементом компонента. Например, если <элемент компонента> имеет контекст User, а <элемент rules> имеет контекст UserAndSystem, то <элемент rules> будет действовать так, как если бы он имел контекст User. Если элемент rules> имеет контекст System, он будет действовать так, как если бы элемента rules не< было.><
|
Примеры см. в примерах для <обнаружения>.
<Обнаруживает>
Хотя элемент detects> по-прежнему< поддерживается, корпорация Майкрософт рекомендует больше не использовать <элемент detects>, так как он может быть нерекомендуем в будущих версиях USMT. <Если элемент detects> является устаревшим, потребуется перезаписать все скрипты, использующие <элемент detects>. Вместо этого корпорация Майкрософт рекомендует использовать <элемент обнаружения> , если родительский элемент является <role> или <namedElements>, или использовать <элемент conditions> , если родительский элемент является <rules>. Элемент <обнаружения> позволяет более четко формулировать сложные логические инструкции, а <элемент conditions> позволяет формулировать сложные логические инструкции.
Элемент <detects> — это контейнер для одного или нескольких <элементов обнаружения> . Если все дочерние <элементы обнаружения> в элементе< detect разрешаются> в TRUE, то <обнаруживает> разрешение в TRUE. Если какой-либо из дочерних <элементов обнаружения> разрешается в FALSE, то <обнаруживает> значение FALSE. Чтобы предотвратить <запись элемента detects> в компоненте, создайте <элемент detects> в элементе <namedElements> , а затем сослаться на него. Если раздел элемента detects> отсутствует<, USMT предполагает наличие компонента. Результаты каждого <элемента detects> объединяются оператором OR для формирования правила, используемого для обнаружения родительского элемента.
Синтаксис:
<detects name="ID" context="User|System|UserAndSystem">
</detects>
Количество вхождений: Неограниченный.
Родительские элементы:<role>, <rules>, <namedElements>
Обязательные дочерние элементы:<detect>
Параметр | Обязательно? | Значение |
---|---|---|
name | Да, если <определяет> является дочерним элементом для< namedElements> Нет, если <определяет> является дочерним элементом роли<> или <правил> |
При указании идентификатора дочерние <элементы обнаружения> не обрабатываются. Вместо этого обрабатываются любые другие <элементы обнаружения> с тем же именем, объявленные в элементе <namedElements> . |
контекст | Нет (по умолчанию = UserAndSystem) |
Определяет область этого параметра: следует ли обрабатывать этот компонент в контексте конкретного пользователя, во всей операционной системе или в обоих случаях. Наибольший возможный область задается элементом<> компонента. Например, если <элемент компонента> имеет контекст User , а <элемент rules> имеет контекст UserAndSystem, то <элемент rules> будет действовать так, как если бы он имел контекст User. Если элемент rules> имеет контекст System, он будет действовать так, как если бы элемента rules не< было.><
Параметр контекста игнорируется для <обнаружения> элементов, которые находятся внутри <элементов правил> . |
Следующий пример из MigApp.xml
файла.
<detects>
<detect>
<condition>MigXmlHelper.DoesFileVersionMatch("%Lotus123InstPath%\123w.exe","ProductVersion","9.*")</condition>
</detect>
<detect>
<condition>MigXmlHelper.DoesFileVersionMatch("%SmartSuiteInstPath%\smartctr.exe","ProductVersion","99.*")</condition>
</detect>
</detects>
<обнаружение>
Элемент <обнаружения> является контейнером для одного <элемента условий> . Результат дочерних <элементов условия> , расположенных под элементом <conditions> , определяет результат этого элемента. Например, если все дочерние <элементы> в элементе <обнаружения> разрешаются в TRUE, то <элемент обнаружения> разрешается в TRUE. Если какой-либо из дочерних< элементов условий> разрешается в FALSE, то <элемент обнаружения> разрешается в FALSE.
Кроме того, результаты каждого <раздела обнаружения> в элементе <role> объединяются оператором OR для формирования правила обнаружения родительского элемента. То есть, если один из <разделов обнаружения> разрешается в TRUE, то <обрабатывается элемент role> . В противном <случае элемент role> не обрабатывается.
<Используйте элемент обнаружения> в элементе <namedElements>, чтобы не записывать данные в компоненте. Затем добавьте раздел обнаружения> соответствия< в <элемент роли>, чтобы определить, переносится ли компонент. Если для компонента нет <раздела обнаружения> , USMT предполагает наличие компонента.
Количество вхождений: Неограниченный.
Родительские элементы:<role>, <namedElements>
Дочерние элементы:<условия>
Синтаксис:
<detection name="ID" context="User|System|UserAndSystem">
</detection>
Параметр | Обязательно? | Значение |
---|---|---|
name |
|
При объявлении содержимое <элемента обнаружения> игнорируется, а содержимое <элемента обнаружения> с тем же именем, которое объявлено в элементе <namedElements> , оценивается. |
контекст | Нет, по умолчанию = UserAndSystem | Определяет область этого параметра: следует ли обрабатывать этот компонент в контексте конкретного пользователя, во всей операционной системе или в обоих случаях.
|
Пример:
<detection name="AdobePhotoshopCS">
<conditions>
<condition>MigXmlHelper.DoesObjectExist("Registry","HKCU\Software\Adobe\Photoshop\8.0")</condition>
<condition>MigXmlHelper.DoesFileVersionMatch("%PhotoshopSuite8Path%\Photoshop.exe","FileVersion","8.*")</condition>
</conditions>
</detection>
и
<role role="Settings">
<detection>
<conditions>
<condition>MigXmlHelper.DoesFileVersionMatch("%QuickTime5Exe%","ProductVersion","QuickTime 5.*")</condition>
<condition>MigXmlHelper.DoesFileVersionMatch("%QuickTime5Exe%","ProductVersion","QuickTime 6.*")</condition>
</conditions>
</detection>
<displayName>
Элемент <displayName> является обязательным полем в каждом <элементе компонента> .
Количество вхождений: один раз для каждого компонента
Родительские элементы:<component>
Дочерние элементы: none
Синтаксис:
<displayName _locID="ID">ComponentName</displayName>
Параметр | Обязательно? | Значение |
---|---|---|
locID | Нет | Этот параметр предназначен для внутреннего использования USMT. Не используйте этот параметр. |
Имя компонента | Да | Имя компонента. |
Пример:
<displayName>Command Prompt settings</displayName>
<окружающая среда>
Элемент <среды> — это контейнер для <переменных> элементов, в котором переменные могут быть определены для использования в файле.xml . Все переменные среды, определенные таким образом, являются закрытыми. То есть они доступны только для своих дочерних компонентов и компонента, в котором они были определены. Два примера сценариев см. в разделе Примеры.
Число вхождений: не ограничено
Родительские элементы:<role>, <component>, <namedElements>
Обязательные дочерние элементы:<переменная>
Необязательные дочерние элементы:<conditions>
Синтаксис:
<environment name="ID" context="User|System|UserAndSystem">
</environment>
Параметр | Обязательно? | Значение |
---|---|---|
name | Да, если <среда> является дочерним элементом <объекта namedElements> Нет, если <среда> является дочерним <элементом роли> или <компонента> |
При объявлении в качестве дочернего <элемента роли> или <компонента> , если объявлен идентификатор , USMT игнорирует содержимое <элемента среды> и обрабатывается содержимое <элемента среды> с тем же именем, объявленным в <элементе nameElements> . |
контекст | Нет (по умолчанию = UserAndSystem) |
Определяет область этого параметра: следует ли обрабатывать этот компонент в контексте конкретного пользователя, во всей операционной системе или в обоих случаях. Наибольший возможный область задается элементом <компонента>. Например, если <элемент компонента> имеет контекст User , а <элемент rules> имеет контекст UserAndSystem, то <элемент rules> будет действовать так, как если бы он имел контекст User. Если бы элемент rules> имел контекст System, он действовал бы так, как будто правил там< нет.><
|
Примеры:
Пример сценария 1
В этом сценарии создайте расположение объектов во время выполнения в зависимости от конфигурации конечного компьютера. Например, если приложение записывает данные в каталог, в котором установлено приложение, и пользователи могут установить приложение в любом месте компьютера. Если приложение записывает значение hklm\software\companyname\install [path\]
реестра, а затем обновляет это значение с указанием расположения, в котором установлено приложение, то единственный способ правильно перенести необходимые данные — определить переменную среды. Пример:
<environment>
<variable name="INSTALLPATH">
<script>MigXmlHelper.GetStringContent("Registry","\software\companyname\install [path]")</script>
</variable>
</environment>
Затем правило включения можно использовать следующим образом. Для выполнения аналогичных задач можно использовать любую из функций скрипта>.<
<include>
<objectSet>
<pattern type="File">%INSTALLPATH%\ [*.xyz]</pattern>
</objectSet>
</include>
Во-вторых, значения реестра можно отфильтровать, чтобы они содержали необходимые данные. В следующем примере первая строка (перед разделителем ",
") извлекается из значения реестра Hklm\software\companyname\application\ [Path\]
.
<environment>
<variable name="APPPATH">
<objectSet>
<content filter='MigXmlHelper.ExtractDirectory (",", "1")'>
<objectSet>
<pattern type="Registry">Hklm\software\companyname\application\ [Path]</pattern>
</objectSet>
</content>
</objectSet>
</variable>
</environment>
Пример сценария 2
В этом сценарии пять файлов с именем File1.txt
, File2.txt
и т. д. необходимо перенести из %SYSTEMDRIVE%\data\userdata\dir1\dir2\
. Чтобы перенести эти файлы, в файле .xml должно быть следующее <правило включения>:
<include>
<objectSet>
<pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File1.txt]</pattern>
<pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File2.txt]</pattern>
<pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File3.txt]</pattern>
<pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File4.txt]</pattern>
<pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File5.txt]</pattern>
</objectSet>
</include>
Вместо того чтобы вводить путь пять раз, создайте переменную для расположения следующим образом:
<environment>
<variable name="DATAPATH">
<text>%SYSTEMDRIVE%\data\userdata\dir1\dir2 </text>
</variable>
</environment>
Затем укажите переменную в правиле <включения> следующим образом:
<include>
<objectSet>
<pattern type="File">%DATAPATH% [File1.txt]</pattern>
<pattern type="File">%DATAPATH% [File2.txt]</pattern>
<pattern type="File">%DATAPATH% [File3.txt]</pattern>
<pattern type="File">%DATAPATH% [File4.txt]</pattern>
<pattern type="File">%DATAPATH% [File5.txt]</pattern>
</objectSet>
</include>
<exclude>
Элемент <exclude> определяет, какие объекты не переносятся, если нет более конкретного <элемента include> , который переносит объект. Если для одного и того же объекта есть <элемент include> и <exclude> , объект включается. Для каждого <элемента exclude> может быть несколько дочерних <элементов objectSet> .
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Дочерние элементы:<objectSet>
Вспомогательные функции: С этим элементом можно использовать следующие <функции фильтра exclude>:
CompareStringContent
,IgnoreIrrelevantLinks
,AnswerNo
,NeverRestore
иSameRegContent
.
Синтаксис:
<exclude filter="ScriptInvocation">
</exclude>
Параметр | Обязательно? | Значение |
---|---|---|
filter | Нет (по умолчанию = Нет) |
Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например, MyScripts.AScript ("Arg1","Arg2") .Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле включения. Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. |
Например, из MigUser.xml
файла:
<exclude>
<objectSet>
<pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
<pattern type="File">%CSIDL_MYPICTURES%\* [*]</pattern>
<pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
</objectSet>
</exclude>
<excludeAttributes>
Элемент <excludeAttributes> можно использовать, чтобы определить, какие параметры, связанные с объектом, не переносятся. При наличии конфликтов между элементами <includeAttributes> и <excludeAttributes> наиболее конкретный шаблон определяет шаблоны, которые не переносятся. Если у объекта нет <элемента includeAttributes> или <excludeAttributes> , переносятся все его параметры.
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Дочерние элементы:<objectSet>
Синтаксис:
<excludeAttributes attributes="Security|TimeFields|Security,TimeFields">
</excludeAttributes>
Параметр | Обязательно? | Значение |
---|---|---|
Атрибуты | Да | Указывает атрибуты, которые необходимо исключить. Можно указать один из следующих вариантов или оба варианта. При указании обоих значений они должны быть разделены кавычками. Например, "Security","TimeFields" :
|
Пример.
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/miguser">
<!-- This component migrates the files in the Video folder -->
<component type="System" context="System">
<displayName>System Data</displayName>
<role role="Data">
<rules>
<!-- Include all of the text files, which are immediately in the drive where the operating system is installed -->
<include>
<objectSet>
<pattern type="File">%SYSTEMDRIVE%\ [*.txt]</pattern>
</objectSet>
</include>
<!-- Exclude the time stamps from the text file starting with the letter a -->
<excludeAttributes attributes="TimeFields">
<objectSet>
<pattern type="File">%SYSTEMDRIVE%\ [a*.txt]</pattern>
</objectSet>
</excludeAttributes>
<!-- include the time stamps from the text file aa.txt -->
<includeAttributes attributes="TimeFields">
<objectSet>
<pattern type="File">%SYSTEMDRIVE%\ [aa.txt]</pattern>
</objectSet>
</includeAttributes>
<!-- Logoff the user after LoadState successfully completed. -->
<externalProcess when="post-apply">
<commandLine>
logoff
</commandLine>
</externalProcess>
</rules>
</role>
<!-- Migrate
all doc files from the system
all power point files
all visio design files
all my c++ program files -->
<extensions>
<extension>DOC</extension>
<extension>PPT</extension>
<extension>VXD</extension>
<extension>PST</extension>
<extension>CPP</extension>
</extensions>
</component>
</migration>
<Расширения>
Элемент <extensions> — это контейнер для одного или нескольких <элементов расширения> .
Количество вхождений: ноль или одно
Родительские элементы:<component>
Обязательные дочерние элементы:<extension>
Синтаксис:
<extensions>
</extensions>
<расширение>
Элемент <extension> можно использовать для указания документов определенного расширения.
Число вхождений: не ограничено
Родительские элементы:<расширения>
Дочерние элементы: none
Синтаксис:
<extension>FilenameExtension</extension>
Параметр | Обязательно? | Значение |
---|---|---|
FilenameExtension | Да | Расширение имени файла. |
Например, чтобы перенести все файлы *.doc с исходного компьютера, указав следующий код в элементе <компонента> :
<extensions>
<extension>doc</extension>
<extensions>
аналогично указанию следующего кода под элементом <rules> :
<include>
<objectSet>
<script>MigXmlHelper.GenerateDrivePatterns ("* [*.doc]", "Fixed")</script>
</objectSet>
</include>
Еще один пример использования <элемента расширения> см. в примере для <excludeAttributes>.
<externalProcess>
Элемент <externalProcess> можно использовать для запуска командной строки во время процесса миграции. Например, после завершения процесса LoadState может потребоваться выполнить команду.
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Обязательные дочерние элементы:<commandLine>
Синтаксис:
<externalProcess when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">
</externalProcess>
Параметр | Обязательно? | Значение |
---|---|---|
когда | Да | Указывает, когда следует запустить командную строку. Это значение может быть одним из следующих значений:
|
Пример использования <элемента externalProcess> см. в примере для <excludeAttributes>.
<icon>
Этот элемент является внутренним элементом USMT. Не используйте этот элемент.
<include>
Элемент <include> определяет, что следует перенести, если нет более конкретного <правила исключения> . Можно указать скрипт, чтобы он был более конкретным, чтобы расширить определение того, что требуется собрать. Для каждого <элемента include> может быть несколько <элементов objectSet> .
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Обязательный дочерний элемент:<objectSet>
Вспомогательные функции: С этим элементом можно использовать следующие <> функции фильтра:
CompareStringContent
,IgnoreIrrelevantLinks
,AnswerNo
, иNeverRestore
.
Синтаксис:
<include filter="ScriptInvocation">
</include>
Параметр | Обязательно? | Значение |
---|---|---|
filter | Нет. Если этот параметр не указан, обрабатываются все шаблоны, которые находятся внутри дочернего <элемента objectSet> . |
Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например, MyScripts.AScript ("Arg1","Arg2") .Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле <включения> . Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. |
Следующий пример из MigUser.xml
файла:
<component type="Documents" context="User">
<displayName _locID="miguser.myvideo">My Video</displayName>
<paths>
<path type="File">%CSIDL_MYVIDEO%</path>
</paths>
<role role="Data">
<detects>
<detect>
<condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYVIDEO%")</condition>
</detect>
</detects>
<rules>
<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
<objectSet>
<pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
</objectSet>
</include>
<merge script="MigXmlHelper.DestinationPriority()">
<objectSet>
<pattern type="File">%CSIDL_MYVIDEO% [desktop.ini]</pattern>
</objectSet>
</merge>
</rules>
</role>
</component>
<включить> и <исключить> функции фильтрации
Следующие функции возвращают логическое значение. Их можно использовать для переноса определенных объектов в зависимости от того, когда выполняются определенные условия.
AnswerNo
Этот фильтр всегда возвращает значение FALSE.
Синтаксис:
AnswerNo ()
CompareStringContent
Синтаксис:
CompareStringContent("StringContent","CompareType")
Параметр Обязательно? Значение StringContent Да Строка для проверка. CompareType Да Строка. Используйте одно из следующих значений: -
Равно (без учета регистра). Функция возвращает значение TRUE , если строковое представление текущего объекта, обрабатываемого подсистемой миграции, идентично
StringContent
. -
NULLили любое другое значение. Функция возвращает значение TRUE , если строковое представление текущего объекта, обрабатываемого подсистемой миграции, не соответствует
StringContent
.
-
Равно (без учета регистра). Функция возвращает значение TRUE , если строковое представление текущего объекта, обрабатываемого подсистемой миграции, идентично
IgnoreIrrelevantLinks
Этот фильтр отображает файлы .lnk , указывающие на недопустимый объект на конечном компьютере. Проверка выполняется на конечном компьютере, поэтому все .lnk файлы сохраняются в хранилище во время ScanState. Затем они отображаются при запуске средства LoadState .
Синтаксис:
IgnoreIrrelevantLinks ()
Пример:
<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'> <objectSet> <pattern type="File">%CSIDL_COMMON_VIDEO%\* [*]</pattern> </objectSet> </include>
NeverRestore
Эту функцию можно использовать для сбора указанных объектов с исходного компьютера, но затем не переносить объекты на конечный компьютер. При запуске с помощью средства ScanState эта функция принимает значение TRUE. При запуске с помощью средства LoadState эта функция принимает значение FALSE. Эта функция может использоваться для проверка значения объекта на конечном компьютере, но перенос объекта в целевой объект не имеет намерения.
Синтаксис:
NeverRestore()
В следующем примере HKCU\панель управления\International [locale] включен в хранилище, но не переносится на конечный компьютер:
<include filter="MigXmlHelper.NeverRestore()"> <objectSet> <pattern type="Registry">HKCU\Control Panel\International [Locale]</pattern> </objectSet> </include>
<includeAttributes>
Элемент <includeAttributes> можно использовать для определения того, переносятся ли определенные параметры, связанные с объектом, вместе с самим объектом. При наличии конфликтов между элементами <includeAttributes> и <excludeAttributes> наиболее конкретный шаблон определяет, какие параметры переносятся. Если у объекта нет <элемента includeAttributes> или <excludeAttributes> , переносятся все его параметры.
Число вхождений: не ограничено
Родительские элементы:<правила>
Дочерние элементы:<objectSet>
Синтаксис:
<includeAttributes attributes="Security|TimeFields|Security,TimeFields">
</includeAttributes>
Параметр | Обязательно? | Значение |
---|---|---|
Атрибуты | Да | Указывает атрибуты, которые будут включены в перенесенный объект. Можно указать один из следующих вариантов или оба варианта. При указании обоих значений они должны быть разделены кавычками. Например, "Security","TimeFields" :
|
Пример использования <элемента includeAttributes> см. в примере для< excludeAttributes>.
<библиотека>
Этот элемент является внутренним элементом USMT. Не используйте этот элемент.
<местоположение>
Элемент <location> определяет расположение <элемента объекта> .
Количество вхождений: один раз для каждого <объекта>
Родительские элементы:<object>
Дочерние элементы:<script>
Синтаксис:
<location type="typeID">ObjectLocation</location>
Параметр | Обязательно? | Значение |
---|---|---|
type | Да | TypeID может быть реестром или файлом. |
Объектолокация | Да | Расположение объекта. |
Следующий пример из MigApp.xml
файла:
<addObjects>
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [UpgradeVersion]</location>
<attributes>DWORD</attributes>
<bytes>0B000000</bytes>
</object>
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
<attributes>DWORD</attributes>
<bytes>00000000</bytes>
</object>
</addObjects>
<locationModify>
Элемент <locationModify> можно использовать для изменения расположения и имени объекта перед переносом объекта на целевой компьютер. Элемент <locationModify> обрабатывается только при запуске средства LoadState на конечном компьютере. Другими словами, этот элемент игнорируется средством ScanState . Элемент <locationModify> создает соответствующую папку на конечном компьютере, если он еще не существует.
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Обязательный дочерний элемент:<objectSet>
Вспомогательные функции: С этим элементом можно использовать следующие <функции locationModify>:
ExactMove
,RelativeMove
иMove
.
Синтаксис:
<locationModify script="ScriptInvocation">
</locationModify>
Параметр | Обязательно? | Значение |
---|---|---|
сценарий | Да | Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например, MyScripts.AScript ("Arg1","Arg2") .Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле включения. Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. |
Следующий пример из MigApp.xml
файла:
<locationModify script="MigXmlHelper.RelativeMove('%CSIDL_APPDATA%\Microsoft\Office','%CSIDL_APPDATA%')">
<objectSet>
<pattern type="File">%CSIDL_APPDATA%\Microsoft\Office\ [Access10.pip]</pattern>
</objectSet>
</locationModify>
<Функции locationModify>
Следующие функции изменяют расположение объектов при их переносе <при использовании элемента locationModify> . Эти функции вызываются для каждого объекта, перечисляемого родительским <элементом objectSet> . Элемент <locationModify> создает соответствующую папку на конечном компьютере, если он еще не существует.
ExactMove
Функция ExactMove перемещает все объекты, соответствующие родительскому <элементу objectSet> , в заданное объект ObjectEncodedLocation. Эту функцию можно использовать для перемещения одного файла в другое расположение на конечном компьютере. Если конечным расположением является узел, все соответствующие исходные объекты записываются в узел без подкаталогов. Если целевое расположение является конечным, подсистема миграции переносит все соответствующие исходные объекты в одно и то же расположение. Если возникает конфликт, применяются обычные алгоритмы.
Синтаксис:
ExactMove(ObjectEncodedLocation)
Параметр Обязательно? Значение ObjectEncodedLocation Да Целевое расположение для всех исходных объектов. Пример:
<locationModify script="MigXmlHelper.ExactMove('HKCU\Keyboard Layout\Toggle [HotKey]')"> <objectSet> <pattern type="Registry">HKCU\Keyboard Layout\Toggle []</pattern> </objectSet> </locationModify>
Двигаться
Функция Переместить перемещает объекты в другое расположение на конечном компьютере. Кроме того, эта функция создает подкаталоги, которые были выше самого длинного CSIDL в имени исходного объекта.
Синтаксис:
Move(DestinationRoot)
Параметр Обязательно? Значение DestinationRoot Да Расположение, в котором перемещаются исходные объекты. При необходимости эта функция создает все подкаталоги, которые были выше самого длинного CSIDL в имени исходного объекта. RelativeMove
Функцию RelativeMove можно использовать для сбора и перемещения данных. Переменные среды можно использовать в исходных и целевых корнях, но они могут быть определены по-разному на исходном и целевом компьютерах.
Синтаксис:
RelativeMove(SourceRoot,DestinationRoot)
Параметр Обязательно? Значение SourceRoot Да Расположение, из которого перемещаются объекты. Все исходные объекты, перечисляемые родительским <элементом objectSet> , которые не находятся в этом расположении, не перемещаются. DestinationRoot Да Расположение, куда перемещаются исходные объекты на конечном компьютере. При необходимости эта функция создает все подкаталоги, которые были выше SourceRoot.
Пример:
<include>
<objectSet>
<pattern type="File">%CSIDL_COMMON_FAVORITES%\* [*]</pattern>
<objectSet>
</include>
<locationModify script="MigXmlHelper.RelativeMove('%CSIDL_COMMON_FAVORITES%','%CSIDL_COMMON_FAVORITES%')">
<objectSet>
<pattern type="File">%CSIDL_COMMON_FAVORITES%\* [*]</pattern>
</objectSet>
</locationModify>
<_locDefinition>
Этот элемент является внутренним элементом USMT. Не используйте этот элемент.
<изготовитель>
Элемент <manufacturer> определяет производителя компонента, но не влияет на миграцию.
Количество вхождений: ноль или одно
Родительские элементы:<component>
Дочерние элементы: none
Синтаксис:
<manufacturer>Name</manufacturer>
Параметр | Обязательно? | Значение |
---|---|---|
Имя | Да | Имя производителя компонента. |
<сливать>
Элемент <merge> определяет, что происходит при столкновении. Конфликт возникает, когда переносимый объект уже присутствует на конечном компьютере. Если этот элемент не указан, по умолчанию для реестра исходный объект перезаписывает целевой объект. Поведение по умолчанию для файлов — переименование исходного файла в OriginalFileName(1).OriginalExtension
. Этот элемент указывает только то, что следует сделать при возникновении конфликта. Он не включает объекты. Поэтому для миграции <объектов необходимо указать правила включения> вместе с элементом <merge> . При обработке объекта и обнаружении конфликта USMT выбирает наиболее конкретное правило слияния. Затем он применяет правило для разрешения конфликта. Например, если <для правила слияния> задано значение <sourcePriority>, а <для правила слияния> — <destinationPriority>, USMT будет использовать <правило destinationPriority>, так как оно является более конкретным.C:\subfolder\* [*]
C:\* [*]
Пример этого элемента см. в разделе Конфликты и приоритет.
Количество вхождений: Неограниченный
Родительские элементы:<правила>
Обязательный дочерний элемент:<objectSet>
Вспомогательные функции: С этим элементом можно использовать следующие <функции слияния>:
SourcePriority
, ,DestinationPriority
,FindFilePlaceByPattern
LeafPattern
,NewestVersion
,HigherValue()
иLowerValue()
.
Синтаксис:
<merge script="ScriptInvocation">
</merge>
Параметр | Обязательно? | Значение |
---|---|---|
сценарий | Да | Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например, MyScripts.AScript ("Arg1","Arg2") .Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле <включения> . Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. |
Следующий пример из MigUser.xml
файла:
<rules>
<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
<objectSet>
<pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
</objectSet>
</include>
<merge script="MigXmlHelper.DestinationPriority()">
<objectSet>
<pattern type="File">%CSIDL_MYVIDEO% [desktop.ini]</pattern>
</objectSet>
</merge>
</rules>
<Функции слияния>
Эти функции управляют разрешением конфликтов.
DestinationPriority
Указывает, что объект, который находится на конечном компьютере, не переносится с исходного компьютера.
Пример:
<merge script="MigXmlHelper.DestinationPriority()"> <objectSet> <pattern type="Registry">HKCU\Software\Microsoft\Office\16.0\PhotoDraw\ [MyPictures]</pattern> <pattern type="Registry">HKCU\Software\Microsoft\Office\16.0\PhotoDraw\Settings\ [PicturesPath]</pattern> <pattern type="Registry">HKCU\Software\Microsoft\Office\16.0\PhotoDraw\Settings\ [AdditionalPlugInPath]</pattern> </objectSet> </merge>
FindFilePlaceByPattern
Функция FindFilePlaceByPattern сохраняет файлы с добавочным счетчиком при возникновении конфликта. Это строка, которая содержит одну из каждой конструкции: <F>, <E>, <N> в любом порядке.
Синтаксис:
FindFilePlaceByPattern(FilePattern)
Параметр Обязательно? Значение FilePattern Да - <F> заменяется исходным именем файла.
- <N> заменяется добавочным счетчиком до тех пор, пока не будет конфликтов с объектами на конечном компьютере.
- <E> заменяется исходным расширением имени файла.
Например,<F> (<N>).<E>
измените исходный файлMyDocument.doc
MyDocument (1).doc
на на целевом компьютере.NewestVersion
Функция NewestVersion разрешает конфликты на конечном компьютере в зависимости от версии файла.
Синтаксис:
NewestVersion(VersionTag)
Параметр Обязательно? Значение VersionTag Да Поле версии, которое проверяется. Это поле может быть FileVersion
илиProductVersion
. Файл с наивысшей версией VersionTag определяет, какие конфликты разрешаются на основе версии файла. Например, еслиMyfile.txt
содержит FileVersion 1 и тот же файл на конечном компьютере содержит FileVersion 2, файл на целевом компьютере остается.HigherValue()
Эту функцию можно использовать для объединения значений реестра. Значения реестра оцениваются как числовые, а значения с более высоким значением определяют, какие значения реестра объединяются.
LowerValue()
Эту функцию можно использовать для объединения значений реестра. Значения реестра оцениваются как числовые значения, а одно с меньшим значением определяет, какие значения реестра объединяются.
SourcePriority
Указывает для переноса объекта с исходного компьютера и удаления объекта, который находится на конечном компьютере.
Пример:
<merge script="MigXmlHelper.SourcePriority()"> <objectSet> <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\14.0\Common\Migration\Publisher [UpgradeVersion]</pattern> <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\15.0\Common\Migration\Publisher [UpgradeVersion]</pattern> <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Publisher [UpgradeVersion]</pattern> </objectSet> </merge>
<миграция>
Элемент <миграции> является единственным корневым элементом файла .xml миграции и является обязательным. Каждый файл.xml должен иметь уникальный URL-адрес миграции. URL-идентификатор каждого файла, указанного в командной строке, должен быть уникальным. URL-идентификаторы должны быть уникальными, так как USMT использует urlid для определения компонентов в файле.
Количество вхождений: один
Родительские элементы: none
Обязательные дочерние элементы:<component>
Необязательные дочерние элементы:<library>, <namedElements>
Синтаксис:
<migration urlid="*UrlID/*Name">
</migration>
Параметр | Обязательно? | Значение |
---|---|---|
urlid | Да | UrlID — это строковый идентификатор, который однозначно идентифицирует этот .xml файл. Этот параметр должен быть без двоеточия, как определено в спецификации пространств имен XML. Каждый файл.xml миграции должен иметь уникальный url-идентификатор. Если два файла миграции.xml имеют одинаковый urlid, второй .xml файл, указанный в командной строке, не обрабатывается. Дополнительные сведения о пространствах имен XML см. в разделе Использование пространств имен XML. |
Имя | Нет | Хотя это не обязательно, рекомендуется использовать имя .xml файла. |
Следующий пример из MigApp.xml
файла:
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/migapp">
</migration>
MigXMLHelper.FileProperties
Эту вспомогательную функцию фильтра можно использовать для фильтрации миграции файлов по размеру файла и атрибутам даты.
Вспомогаемая функция | MigXMLHelper.FileProperties (property, operator, valueToCompare) |
---|---|
Свойство | filesize, dateCreated, dateModified, dateAccessed |
Оператор | range, neq, lte, lt, eq, gte, gt |
valueToCompare | Сравниваемое значение. Пример: Дата: "2023/05/15-2020/05/17", "2023/05/15" Размер: число с B, КБ, МБ или ГБ в конце. "5 ГБ", "1 КБ-1 МБ" |
<component context="System" type="Application">
<displayName>File_size</displayName>
<role role="Data">
<rules>
<include filter='MigXmlHelper.FileProperties("dateAccessed","range","2023/05/15-2020/05/17")'>
<objectSet>
<pattern type="File">%SYSTEMDRIVE%\DOCS\* [*]</pattern>
</objectSet>
</include>
</rules>
</role>
</component>
<namedElements>
Элемент <namedElements> можно использовать для определения именованных элементов. Эти элементы можно использовать в любом компоненте в файле.xml . Пример использования этого элемента см. в MigApp.xml
файле .
Синтаксис:
<namedElements>
</namedElements>
Количество вхождений: Неограниченный
Родительские элементы:<миграция>
Дочерние элементы:<среда>, <правила>, <условия>, <обнаружение>, <обнаружение, обнаружение>, <обнаружение>
Пример этого элемента см. в MigApp.xml
файле .
<объект>
Элемент <object> представляет файл или раздел реестра.
Количество вхождений: Неограниченный
Родительские элементы:<addObjects>
Обязательные дочерние элементы:<location>, <атрибуты>
Необязательные дочерние элементы:<байты>
Синтаксис:
<object>
</object>
Следующий пример из MigApp.xml
файла:
<addObjects>
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [UpgradeVersion]</location>
<attributes>DWORD</attributes>
<bytes>0B000000</bytes>
</object>
<object>
<location type="Registry">%HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang]</location>
<attributes>DWORD</attributes>
<bytes>00000000</bytes>
</object>
</addObjects>
<objectSet>
Элемент <objectSet> содержит список шаблонов объектов, например пути к файлам, расположения реестра и т. д. Все дочерние <элементы условий> оцениваются в первую очередь. Если все дочерние< элементы условий> возвращают значение FALSE, <элемент objectSet> вычисляется как пустой набор. Для каждого родительского элемента может быть только несколько <элементов objectSet> .
Количество вхождений: Неограниченный
Родительские элементы:<переменная>, <содержимое>, <include>, <exclude>, <merge>, <contentModify>, <locationModify>, <destinationCleanup>, <includeAttributes>, <excludeAttributes>, <unconditionalExclude>, <detect>
Обязательные дочерние<элементы: скрипт> или <шаблон>
Необязательные дочерние элементы:<содержимое>, <условия>, <условие>
Синтаксис:
<objectSet>
</objectSet>
Следующий пример из MigUser.xml
файла:
<component type="Documents" context="User">
<displayName _locID="miguser.mymusic">My Music</displayName>
<paths>
<path type="File">%CSIDL_MYMUSIC%</path>
</paths>
<role role="Data">
<detects>
<detect>
<condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%")</condition>
</detect>
</detects>
<rules>
<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
<objectSet>
<pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
</objectSet>
</include>
<merge script="MigXmlHelper.DestinationPriority()">
<objectSet>
<pattern type="File">%CSIDL_MYMUSIC%\ [desktop.ini]</pattern>
</objectSet>
</merge>
</rules>
</role>
</component>
<path>
Этот элемент является внутренним элементом USMT. Не используйте этот элемент.
<Пути>
Этот элемент является внутренним элементом USMT. Не используйте этот элемент.
<шаблон>
Этот элемент можно использовать для указания нескольких объектов. Для каждого <элемента objectSet> можно использовать несколько <элементов шаблона>, и они объединяются. При указании файлов корпорация Майкрософт рекомендует использовать GenerateDrivePatterns
вместо этого со< скриптом>.
GenerateDrivePatterns
в основном то же самое, что <и правило шаблона> , без спецификации букв диска. Например, следующие две строки кода похожи:
<pattern type="File">C:\Folder\* [Sample.doc]</pattern>
<script>MigXmlHelper.GenerateDrivePatterns("\Folder\* [Sample.doc]","Fixed"</script>
Количество вхождений: Неограниченный
Родительские элементы:<objectSet>
Дочерние элементы: только Path [объект] должен быть допустимым.
Синтаксис:
<pattern type="typeID">Path [object]</pattern>
Параметр | Обязательно? | Значение |
---|---|---|
type | Да |
typeID может иметь значение Registry, File или Ini. Если typeId имеет значение Ini, пробел между Path и объектом не допускается. Например, следующий формат является правильным, если type="Ini": <pattern type="Ini">%WinAmp5InstPath%\Winamp.ini|WinAmp[keeponscreen]</pattern> |
Путь [объект] | Да | Допустимый шаблон реестра или пути к файлу, за которым следует по крайней мере один пробел, а затем скобки [], содержащие переносимый объект.
|
Пример
Чтобы перенести один раздел реестра, выполните следующие действия:
<pattern type="Registry">HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent]</pattern>
Чтобы перенести папку
C:\EngineeringDrafts
и все вложенные папки с диска C::<pattern type="File">C:\EngineeringDrafts\* [*]</pattern>
Чтобы перенести с диска C: только
C:\EngineeringDrafts
папку, за исключением всех вложенных папок, выполните следующие действия.Sample.doc
Перенос файла изC:\EngineeringDrafts
:<pattern type="File"> C:\EngineeringDrafts\ [Sample.doc]</pattern>
Чтобы перенести
Sample.doc
файл из места, где он существует на диске C:, используйте шаблон следующим образом. Если на диске C: существует несколько файлов с одинаковыми именами, все эти файлы переносятся.<pattern type="File"> C:\* [Sample.doc] </pattern>
Дополнительные примеры использования этого элемента см. в разделах Исключение файлов и параметров, Перенаправка файлов и параметров, Включение файлов и параметров и Пользовательские примеры XML.
<обработка>
Этот элемент можно использовать для выполнения скрипта в определенной точке процесса миграции. Возвращаемые значения не ожидаются от указанных скриптов. Если есть возвращаемые значения, они игнорируются.
Число вхождений: не ограничено
Родительские элементы:<правила>
Обязательный дочерний элемент:<script>
Синтаксис:
<processing when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">
</processing>
Параметр | Обязательно? | Значение |
---|---|---|
когда | Да | Указывает, когда должен выполняться скрипт. Это значение может быть одним из следующих значений:
|
<подключаемый модуль>
Этот элемент является внутренним элементом USMT. Не используйте этот элемент.
<роль>
Элемент <role> является обязательным в пользовательском файле.xml . При указании <элемента роли> можно создать конкретный компонент. Компонент определяется параметрами, указанными на <уровне компонента> , и ролью, указанной здесь.
Количество вхождений: Каждый <компонент> может содержать один, два или три дочерних <элемента роли> .
Родительские элементы:<компонент>, <роль>
Обязательные дочерние элементы:<rules>
Необязательные дочерние элементы:<среда>, <обнаружение>, <компонент>, <роль>, <обнаружения>, <подключаемый модуль>
Синтаксис:
<role role="Container|Binaries|Settings|Data">
</role>
Параметр | Обязательно? | Значение |
---|---|---|
роль | Да | Определяет роль для компонента. Роль может быть одной из следующих:
|
Следующий пример из MigUser.xml
файла. Дополнительные примеры см. в MigApp.xml
файле:
<component type="System" context="User">
<displayName _locID="miguser.startmenu">Start Menu</displayName>
<paths>
<path type="File">%CSIDL_STARTMENU%</path>
</paths>
<role role="Settings">
<detects>
<detect>
<condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_STARTMENU%")</condition>
</detect>
</detects>
<rules>
<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
<objectSet>
<pattern type="File">%CSIDL_STARTMENU%\* [*]</pattern>
</objectSet>
</include>
<merge script="MigXmlHelper.DestinationPriority()">
<objectSet>
<pattern type="File">%CSIDL_STARTMENU% [desktop.ini]</pattern>
<pattern type="File">%CSIDL_STARTMENU%\* [*]</pattern>
</objectSet>
</merge>
</rules>
</role>
</component>
<правила>
Элемент <rules> является обязательным в пользовательском файле.xml . Этот элемент содержит правила, которые выполняются во время миграции, если выбран родительский <элемент компонента> , если дочерний <элемент условий> (если он имеется) не будет иметь значение FALSE. Для каждого <элемента rules> может быть несколько дочерних <элементов правил> .
Число вхождений: не ограничено
Родительские элементы:<role>, <rules>, <namedElements>
Обязательные дочерние элементы:<include>
Необязательные дочерние элементы:<rules>, <exclude>, <unconditionalExclude>, <merge>, <contentModify>, <locationModify>, <destinationCleanup>, <addObjects>, <externalProcess>, <processing>, <includeAttributes>, <excludeAttributes>, условия, <обнаружения>
Синтаксис:
<rules name="ID" context="User|System|UserAndSystem">
</rules>
Параметр | Обязательно? | Значение |
---|---|---|
name | Да, если <правила> являются дочерними для <именованныхЭлементов> Нет, если <правила> являются дочерними для любого другого элемента |
Если указан идентификатор , все дочерние элементы не обрабатываются. Вместо этого обрабатываются все другие <элементы правил> с тем же именем, объявленные в <nameElements> . |
контекст | Нет (по умолчанию = UserAndSystem) |
Определяет область этого параметра: следует ли обрабатывать этот компонент в контексте конкретного пользователя, во всей операционной системе или в обоих случаях. Наибольший возможный область задается элементом компонента. Например, если <элемент компонента> имеет контекст User , а <элемент rules> имеет контекст UserAndSystem, элемент <rules> будет действовать так, как будто он имеет контекст User. Если <бы правила> имели контекст System, он действовал бы так, как будто <правил> не было.
|
Следующий пример из MigUser.xml
файла:
<component type="Documents" context="User">
<displayName _locID="miguser.mymusic">My Music</displayName>
<paths>
<path type="File">%CSIDL_MYMUSIC%</path>
</paths>
<role role="Data">
<detects>
<detect>
<condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%")</condition>
</detect>
</detects>
<rules>
<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
<objectSet>
<pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
</objectSet>
</include>
<merge script="MigXmlHelper.DestinationPriority()">
<objectSet>
<pattern type="File">%CSIDL_MYMUSIC%\ [desktop.ini]</pattern>
</objectSet>
</merge>
</rules>
</role>
</component>
<сценарий>
Возвращаемое значение, необходимое для скрипта<>, зависит от родительского элемента.
Количество вхождений: Один раз для <переменной>, неограниченно для <objectSet> и <обработки>
Родительские элементы:<objectSet>, <переменная>, <обработка>
Дочерние элементы: none
Синтаксис и вспомогательные функции:
Общий синтаксис:
<script>ScriptWithArguments</script>
Метод GetStringContent можно использовать, если <скрипт> находится в переменной<>.
Синтаксис:
<script>MigXmlHelper.GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")</script>
Пример:
<script>MigXMLHelper.GetStringContent("Registry","HKLM\Software\MyApp\Installer [EXEPATH]")</script>
GenerateUserPatterns можно использовать, если <скрипт> находится в objectSet<>.
Синтаксис:
<script>MigXmlHelper.GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")</script>
Пример:
<script>MigXmlHelper.GenerateUserPatterns ("File","%USERPROFILE%\* [*.doc]", "FALSE")</script>
GenerateDrivePatterns можно использовать, если <скрипт> находится в <objectSet>.
Синтаксис:
<script>MigXmlHelper.GenerateDrivePatterns("PatternSegment","DriveType")</script>
Пример:
<script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script>
Простые исполняемые скрипты можно использовать с <элементами скриптов>, которые находятся в <элементах обработки>: AskForLogoff, ConvertToShortFileName, KillExplorer, RemoveEmptyDirectories, RestartExplorer, RegisterFonts, StartService, StopService, SyncSCM.
Синтаксис:
<script>MigXmlHelper.ExecutingScript</script>
Пример:
<script>MigXmlHelper.KillExplorer()</script>
Параметр | Обязательно? | Значение |
---|---|---|
ScriptWithArguments | Да | Скрипт, за которым следует любое количество строковых аргументов, разделенных запятой и заключенных в круглые скобки. Например, MyScripts.AScript ("Arg1","Arg2") .Скрипт вызывается для каждого объекта, который перечисляется наборами объектов в правиле <включения> . Скрипт фильтра возвращает логическое значение. Если возвращаемое значение равно TRUE, объект переносится. Если имеет значение FALSE, он не переносится. Возвращаемое значение, необходимое для скрипта<>, зависит от родительского элемента.
|
Примеры:
Чтобы перенести файл Sample.doc с любого диска на исходном компьютере, используйте <сценарий> , как показано ниже. Если существует несколько файлов с одинаковыми именами, все эти файлы переносятся.
<script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script>
Дополнительные примеры использования этого элемента см. в разделах Исключение файлов и параметров, Перенаправка файлов и параметров и Пользовательские примеры XML.
<функции скрипта>
Следующие функции можно использовать с элементом <script> .
Функции создания строк и шаблонов
Эти функции возвращают строку или шаблон.
GetStringContent
Метод GetStringContent можно использовать с <элементами скрипта> , которые находятся в <переменных> элементах. По возможности эта функция возвращает строковое представление заданного объекта. В противном случае возвращается значение NULL. Для файлового объекта эта функция всегда возвращает значение NULL.
Синтаксис:
GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")
Параметр Обязательно? Значение ObjectType Да Тип объекта . Может иметь значение Registry или Ini (для файла.ini ). EncodedLocationPattern Да - Если тип объекта — Registry, encodedLocationPattern должен быть допустимым путем к реестру. Например,
HKLM\SOFTWARE\MyKey[]
. - Если тип объекта — Ini, то encodedLocationPattern должен иметь следующий формат:
IniFilePath|SectionName[SettingName]
ExpandContent Нет (default=TRUE) Может иметь значение TRUE или FALSE. Если значение FALSE, указанное расположение не разворачивается перед возвратом. Пример
<variable name="MSNMessengerInstPath"> <script>MigXmlHelper.GetStringContent("Registry","%HklmWowSoftware%\Microsoft\MSNMessenger [InstallationDirectory]")</script> </variable>
- Если тип объекта — Registry, encodedLocationPattern должен быть допустимым путем к реестру. Например,
GenerateDrivePatterns
Функция
GenerateDrivePatterns
выполняет итерацию всех доступных дисков и выбирает те, которые соответствуют требуемому типу диска. Затем он объединяет выбранные диски с конечной частью PatternSegment , чтобы сформировать полнокодированный шаблон файла. Например, если PatternSegment имеет значениеPath [file.txt]
, а DriveType —Fixed
, то функция создаетC:\Path [file.txt]
и другие шаблоны, если есть фиксированные диски, отличные от C:. Переменные среды нельзя указать с помощью этой функции.GenerateDrivePatterns
может использоваться с <элементами скрипта> , которые находятся в <objectSet> и находятся в <include>/<exclude>.Синтаксис:
GenerateDrivePatterns("PatternSegment","DriveType")
Параметр Обязательно? Значение PatternSegment Да Суффикс закодированного шаблона. Значение объединяется со спецификацией диска, например "c:", чтобы сформировать полный шаблон закодированного файла. Например, "* [*.doc]". PatternSegment не может быть переменной среды. DriveType Да Тип диска, для которого должны быть созданы шаблоны. Можно указать один из следующих элементов: - Фиксированная
- CDROM
- Сменный
- Удаленный
Пример этого элемента см. в последнем компоненте
MigUser.xml
в файле.GenerateUserPatterns
Функция
GenerateUserPatterns
выполняет итерацию по всем пользователям, которые переносятся, за исключением текущего обработанного пользователя, если <ProcessCurrentUser> имеет значение FALSE, и расширяет указанный шаблон в контексте каждого пользователя. Например, если пользователи A, B и C имеют профили вC:\Users
, вызываяGenerateUserPattens('File','%userprofile% [*.doc]','TRUE')
, вспомогательная функция создает следующие три шаблона:"C:\Users\A\* [*.doc]"
"C:\Users\B\* [*.doc]"
"C:\Users\C\* [*.doc]"
Синтаксис:
GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")
Параметр Обязательно? Значение ObjectType Да Определяет тип объекта. Может быть файлом или реестром. EncodedLocationPattern Да Шаблон расположения. Переменные среды разрешены. ProcessCurrentUser Да Может иметь значение TRUE или FALSE. Указывает, должны ли быть созданы шаблоны для текущего пользователя.
Пример.
Если GenerateUserPattens('File','%userprofile% [*.doc]','FALSE')
вызывается, когда USMT обрабатывает пользователя A, то эта функция создает шаблоны только для пользователей B и C. Эту вспомогательную функцию можно использовать для создания сложных правил. Например, чтобы перенести все .doc
файлы с исходного компьютера, но если пользователь X не перенесен, не переносите файлы .doc
из профиля пользователя X.
В следующем примере приведен пример кода для этого сценария. Первый <элемент rules> переносит все .doc
файлы на исходном компьютере, за исключением файлов внутри C:\Users
. Вторые <элементы правил> переносятся из всех .doc
файлов C:\Users
, .doc
за исключением файлов в профилях других пользователей. Поскольку второй <элемент rules> обрабатывается в каждом контексте перенесенного пользователя, конечным результатом является требуемое поведение. Конечный результат — тот, который мы ожидали.
<rules context="System">
<include>
<objectSet>
<script>MigXmlHelper.GenerateDrivePatterns ("* [*.doc]", "Fixed")</script>
</objectSet>
</include>
<exclude>
<objectSet>
<pattern type="File">%ProfilesFolder%\* [*.doc]</pattern>
</objectSet>
</exclude>
</rules>
<rules context="User">
<include>
<objectSet>
<pattern type="File">%ProfilesFolder%\* [*.doc]</pattern>
</objectSet>
</include>
<exclude>
<objectSet>
<script>MigXmlHelper.GenerateUserPatterns ("File","%userprofile%\* [*.doc]", "FALSE")</script>
</objectSet>
</exclude>
</rules>
MigXmlHelper.GenerateDocPatterns
Вспомогающая MigXmlHelper.GenerateDocPatterns
функция вызывает средство поиска документов для проверки системы на наличие всех файлов, которые можно перенести. Его можно вызвать в контексте system или user для фокусировки сканирования.
Параметр | Обязательно? | Значение |
---|---|---|
ScanProgramFiles | Нет (по умолчанию = FALSE) | Может иметь значение TRUE или FALSE. Параметр ScanProgramFiles определяет, сканирует ли средство поиска документов каталог Program Files для сбора зарегистрированных расширений файлов для известных приложений. Например, если задано значение TRUE , он обнаруживает и переносит .jpg файлы в каталог Photoshop, если .jpg это расширение файла, зарегистрированное в Photoshop. |
IncludePatterns | Нет (по умолчанию = TRUE) | Может иметь значение TRUE или FALSE. Значение TRUE создает шаблоны включения и может быть добавлено в <элемент include> . FALSE создает шаблоны исключений и может быть добавлен в <элемент exclude> . |
SystemDrive | Нет (по умолчанию = FALSE) | Может иметь значение TRUE или FALSE. Если задано значение TRUE, все шаблоны ограничиваются системным диском. |
<!-- This component migrates data in user context -->
<component type="Documents" context="User">
<displayName>MigDocUser</displayName>
<role role="Data">
<rules>
<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
<objectSet>
<script>MigXmlHelper.GenerateDocPatterns ("false")</script>
</objectSet>
</include>
<exclude>
<objectSet>
<script>MigXmlHelper.GenerateDocPatterns ("false", "false", "false")</script>
</objectSet>
</exclude>
</rules>
</role>
</component>
Простое выполнение скриптов
Следующие скрипты не имеют возвращаемого значения. Следующие ошибки можно использовать с <элементами скрипта>, которые находятся в элементах< обработки>
AskForLogoff(). Запросы пользователя выйти из службы в конце миграции. Пример
<processing when="apply-success"> <script>MigXmlHelper.AskForLogoff()</script> </processing>
ConvertToShortFileName(RegistryEncodedLocation). Если RegistryEncodedLocation — это полный путь к существующему файлу, эта функция преобразует файл в его короткое имя, а затем обновляет значение реестра.
KillExplorer(). Останавливает Explorer.exe для текущего контекста пользователя. Остановка Explorer.exe позволяет получить доступ к определенным ключам и файлам, которые сохраняются открытыми при выполнении Explorer.exe. Пример:
<processing when="pre-apply"> <script>MigXmlHelper.KillExplorer()</script> </processing>
RegisterFonts(FileEncodedLocation). Регистрирует заданный шрифт или все шрифты в заданном каталоге. Пример
<processing when="apply-success">
<script>MigXmlHelper.RegisterFonts("%CSIDL_COMMON_FONTS%")</script>
</processing>
RemoveEmptyDirectories (DirectoryEncodedPattern). Удаляет все пустые каталоги, соответствующие DirectoryEncodedPattern на конечном компьютере.
RestartExplorer(). Перезапускает Explorer.exe в конце миграции. Пример:
<processing when="post-apply"> <script>MigXmlHelper.RestartExplorer()</script> </processing>
StartService (ServiceName, OptionalParam1, OptionalParam2,...). Запускает службу, определяемую с помощью ServiceName. ServiceName — это подраздел в
HKLM\System\CurrentControlSet\Services
, который содержит данные для данной службы. Необязательные параметры, если таковые есть, передаются в API StartService. Дополнительные сведения см. в статье о функции StartServiceA (winsvc.h).StopService (ServiceName). Останавливает службу, определяемую serviceName. ServiceName — это подраздел в
HKLM\System\CurrentControlSet\Services
, который содержит данные для данной службы.SyncSCM(ServiceShortName). Считывает значение начального типа из реестра
(HKLM\System\CurrentControlSet\Services\ServiceShortName [Start])
после изменения значения подсистемой миграции, а затем синхронизирует Service Control Manager (SCM) с новым значением.
<СМС>
Текстовый<> элемент можно использовать для задания значения для любых переменных среды, которые находятся в одном из файлов миграции.xml.
Количество вхождений: Один раз в каждом <элементе переменной> .
Родительские элементы:<переменная>
Дочерние элементы: Никакой.
Синтаксис:
<text>NormalText</text>
Параметр | Значение |
---|---|
NormalText | Этот текст интерпретируется как обычный текст. |
Пример
<variable name="QuickTime5or6DataSys">
<text>%CSIDL_COMMON_APPDATA%\QuickTime</text>
</variable>
<unconditionalExclude>
Элемент <unconditionalExclude> исключает указанные файлы и значения реестра из миграции, независимо от других правил включения в любом из файлов.xml миграции Config.xml
или в файле. Объекты, объявленные здесь, не переносятся, так как этот элемент имеет приоритет над всеми другими правилами. Например, даже если существуют явные <правила включения> файлов, если они исключены с помощью этого параметра, они не переносятся..mp3
Используйте этот элемент для исключения всех .mp3
файлов с исходного компьютера. Кроме того, при резервном копировании C:\UserData
с помощью другого метода можно исключить всю папку из миграции. Используйте этот элемент с осторожностью. Если приложению требуется исключенный файл, приложение может работать неправильно на конечном компьютере.
Количество вхождений: Неограниченный.
Родительские элементы:<правила>
Дочерние элементы:<objectSet>
Синтаксис:
<unconditionalExclude></unconditionalExclude>
Следующий файл.xml исключает все .mp3
файлы из миграции. Дополнительные примеры использования этого элемента см. в разделе Исключение файлов и параметров.
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/excludefiles">
<component context="System" type="Documents">
<displayName>Test</displayName>
<role role="Data">
<rules>
<unconditionalExclude>
<objectSet>
<script>MigXmlHelper.GenerateDrivePatterns ("* [*.mp3]", "Fixed")</script>
</objectSet>
</unconditionalExclude>
</rules>
</role>
</component>
</migration>
<переменная>
Элемент <переменной> является обязательным в элементе <среды> . Для каждого <элемента переменной> должен быть один <objectSet>, <скрипт> или <текстовый> элемент. Содержимое элемента переменной<> присваивает текстовое значение переменной среды. Этот элемент имеет следующие три варианта:
Если элемент переменной<> содержит текстовый<> элемент, значение элемента переменной является значением текстового<> элемента.
Если элемент переменной<><содержит элемент script>, а вызов скрипта создает строку, не содержащую null, то значение элемента переменной<> является результатом вызова скрипта.
Если элемент переменной<> содержит <элемент objectSet> и при вычислении <элемента objectSet> создается по крайней мере один шаблон объекта, то значение первого объекта, соответствующего результирующему шаблону объекта, является значением элемента переменной.
Количество вхождений: Неограниченный
Родительские элементы:<среда>
Обязательные дочерние<элементы: text>, <script> или <objectSet>
Синтаксис:
<variable name="ID" remap=TRUE|FALSE>
</variable>
Параметр | Обязательно? | Значение |
---|---|---|
name | Да |
Id — это строковое значение, которое является именем, используемым для ссылки на переменную среды. Корпорация Майкрософт рекомендует начинать идентификатор с имени компонента, чтобы избежать конфликтов пространства имен. Например, если имя компонента — MyComponent и требуется переменная, которая является путем установки компонента, MyComponent.InstallPath можно указать. |
Переназначить | Нет, по умолчанию = FALSE | Указывает, следует ли оценивать эту переменную среды как переменную среды для повторного сопоставления. Объекты, расположенные по пути, который находится под значением этой переменной среды, автоматически перемещаются в место, где переменная среды указывает на целевой компьютер. |
Следующий пример из MigApp.xml
файла:
<environment>
<variable name="HklmWowSoftware">
<text>HKLM\Software</text>
</variable>
<variable name="WinZip8or9or10Exe">
<script>MigXmlHelper.GetStringContent("Registry","%HklmWowSoftware%\Microsoft\Windows\CurrentVersion\App Paths\winzip32.exe []")</script>
</variable>
</environment>
<version>
Элемент <version> определяет версию компонента, но не влияет на миграцию.
Количество вхождений: ноль или одно
Родительские элементы:<component>
Дочерние элементы: none
Синтаксис:
<version>ComponentVersion</version>
Параметр | Обязательно? | Значение |
---|---|---|
ComponentVersion | Да | Версия компонента, которая может содержать шаблоны. |
Пример:
<version>4.*</version>
<windowsObjects>
Элемент <windowsObjects> предназначен только для внутреннего использования USMT. Не используйте этот элемент.
Приложение
Указание расположений
Указание закодированных расположений. Закодированное расположение, используемое во всех вспомогательных функциях, является однозначным строковым представлением для имени объекта. Закодированное расположение состоит из части узла, за которой при необходимости следует конечный элемент, заключенный в квадратные скобки. В этом формате делается четкое различие между узлами и листьями.
Например, укажите файл
C:\Windows\Notepad.exe
следующим образом:c:\Windows[Notepad.exe]
. Аналогичным образом укажите каталогC:\Windows\System32
следующим образом:c:\Windows\System32
. (Обратите внимание на отсутствие[]
конструкции.)Представляет реестр аналогично. Значение по умолчанию раздела реестра представлено в виде пустой
[]
конструкции. Например, значение по умолчанию дляHKLM\SOFTWARE\MyKey
раздела реестра —HKLM\SOFTWARE\MyKey[]
.Указание шаблонов расположения. Указание шаблона расположения аналогично указанию фактического расположения. Исключение заключается в том, что и узел, и конечная часть принимают шаблоны. Однако шаблон из узла не распространяется на конечный элемент.
Например, шаблон
c:\Windows\*
соответствует каталогу Windows и всем подкаталогам, но не соответствует ни одному из файлов в этих каталогах. Чтобы также соответствовать файлам,c:\Windows\*[*]
необходимо указать значение .
Внутренние функции USMT
Следующие функции предназначены только для внутреннего использования USMT. Не используйте их в файле.xml .
AntiAlias
ConvertScreenSaver
ConvertShowIEOnDesktop
ConvertToOfficeLangID
MigrateActiveDesktop
MigrateAppearanceUPM
MigrateDisplayCS
MigrateDisplayss
MigrateIEAutoSearch
MigrateMouseUPM
MigrateSoundSysTray
MigrateTaskBarss
SetPstPathInMapiStruc
Допустимые теги версий
Следующие теги версий можно использовать с различными вспомогательными функциями:
"CompanyName"
"FileDescription"
FileVersion
InternalName
"LegalCopyright"
"OriginalFilename"
"ProductName"
"ProductVersion"
Следующие теги версий содержат значения, которые можно сравнить:
FileVersion
"ProductVersion"