XML 要素ライブラリ

概要

このトピックでは、ユーザー状態移行ツール (User State Migration Tool) で使う移行 .xml ファイルを作るために利用できる XML 要素とヘルパー関数について説明します。XML の基本について理解していることが前提となります。

このトピックの内容

このトピックでは、XML 要素とヘルパー関数の他に、エンコードされた場所と場所のパターンを指定する方法、USMT の内部だけで使われる関数、ヘルパー関数と共に使えるバージョン タグについても説明します。

  • 要素とヘルパー関数

  • 付録

    • 場所の指定

    • 内部 USMT 関数

    • 有効なバージョン タグ

要素とヘルパー関数

次の表は、USMT で使うことができる XML 要素とヘルパー関数を示しています。

要素 A ~ K 要素 L ~ Z ヘルパー関数

<addObjects>

<attributes>

<bytes>

<commandLine>

<component>

<condition>

<conditions>

<content>

<contentModify>

<description>

<destinationCleanup>

<detect>

<detects>

<detection>

<displayName>

<environment>

<exclude>

<excludeAttributes>

<extensions>

<extension>

<externalProcess>

<icon>

<include>

<includeAttributes>

<library>

<location>

<locationModify>

<_locDefinition>

<manufacturer>

<merge>

<migration>

<namedElements>

<object>

<objectSet>

<path>

<paths>

<pattern>

<processing>

<plugin>

<role>

<rules>

<script>

<text>

<unconditionalExclude>

<variable>

<version>

<windowsObjects>

<condition> の関数

<content> の関数

<contentModify> の関数

<include> と <exclude> のフィルター関数

<locationModify> の関数

<merge> の関数

<script> の関数

内部 USMT 関数

<addObjects>

<addObjects> 要素は、移行元コンピューター上の 1 つまたは複数のオブジェクトの存在をエミュレートします。子 <object> 要素は、エミュレートされたオブジェクトの詳細を表します。内容が <script> 要素である場合、呼び出しの結果はオブジェクトの配列になります。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 必須の子要素: <object> また、この <object> 要素の子要素として、<location> と <attributes> を指定する必要があります。

  • 省略可能な子要素: <conditions>、<condition>、<script>

構文:

<addObjects>

</addObjects>

次の例は、MigApp.xml ファイルからのものです。

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
   </object>
</addObjects>

<attributes>

<attributes> 要素は、レジストリ キーまたはファイルの属性を定義します。

  • 出現の回数: 各 <object> で 1 回

  • 親要素: <object>

  • 子要素: なし

構文:

<attributes>Content</attributes>

設定 必須かどうか

Content

必須

content は、指定されるオブジェクトの種類によって異なります。

  • ファイルの場合、content はコンマで区切られた以下の任意の属性を含む文字列にすることができます。

    • Archive

    • Read-only

    • System

    • Hidden

  • レジストリ キーの場合、content は次のいずれかの種類にすることができます。

    • None

    • String

    • ExpandString

    • Binary

    • Dword

    • REG_SZ

次の例は、MigApp.xml ファイルからのものです。

<object>
   <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
   <attributes>DWORD</attributes>
   <bytes>00000000</bytes>
</object> 

<bytes>

<location> がレジストリ キーまたはディレクトリに対応している場合、<bytes> は無視されるので、<bytes> 要素はファイルに対してだけ指定する必要があります。

  • 出現の回数: 0 または 1 回

  • 親要素: <object>

  • 子要素: なし

構文:

<bytes string="Yes|No" expand="Yes|No">Content</bytes>

設定 必須かどうか

string

省略可能、既定値は No

Content を文字列として解釈するか、バイトとして解釈するかを指定します。

expand

省略可能 (既定値 = Yes)

expand パラメーターが Yes の場合、<bytes> 要素の内容は移行元コンピューターのコンテキストで展開されてから解釈されます。

Content

必須

string の値によって異なります。

  • string が Yes の場合: <bytes> 要素の内容は文字列として解釈されます。

  • string が No の場合: <bytes> 要素の内容はバイトとして解釈されます。2 文字ずつで、バイトの 16 進数値を表します。たとえば、"616263" は、ANSI 文字列の "abc" を表します。UNICODE 文字列の "abc" (文字列終端文字を含む) の完全な表現は、"6100620063000000" です。

次の例は、MigApp.xml ファイルからのものです。

<object>
   <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
   <attributes>DWORD</attributes>
   <bytes>00000000</bytes>
</object> 

<commandLine>

<commandLine> 要素は、ScanState や LoadState ツールを実行する前または後に、サービスやアプリケーションを開始したり停止したりする場合などに使います。

  • 出現の回数: 無制限

  • 親要素: <externalProcess>

  • 子要素: なし

構文:

<commandLine>CommandLineString</commandLine>

設定 必須かどうか

CommandLineString

必須

有効なコマンド ライン。

<component>

<component> 要素は、custom .xml ファイルで必要です。この要素は、移行 .xml ファイルの最も基本的な構造を定義します。たとえば、MigApp.xml ファイルでは、"Microsoft(R) Office 2003" というコンポーネントが、他のコンポーネント "Microsoft Office Access(R) 2003" を含んでいます。子エレメントを使って、このコンポーネントを定義できます。

コンポーネントは、他のコンポーネント内に入れ子にできます。つまり、<component> 要素は次の 2 つの場合に、<component> 要素内の <role> 要素の子にできます。1) 親 <component> 要素がコンテナーである場合。2) 子 <component> 要素が親 <component> 要素と同じロールを持っている場合。

  • 出現の回数: 無制限

  • 親要素: <migration>、<role>

  • 必須の子要素: <role>、<displayName>

  • 省略可能な子要素: <manufacturer>、<version>、<description>、<paths>、<icon>、<environment>、<extensions>

構文:

<component type="System|Application|Device|Documents" context="User|System|UserAndSystem" defaultSupported="TRUE|FALSE|YES|NO"

hidden="Yes|No">

</component>

設定 必須かどうか

type

必須

以下のものを使って、設定をグループ化したり、コンポーネントの種類を定義したりすることができます。

  • System: オペレーティング システムの設定。すべての Windows(R) コンポーネントは、この種類で定義されています。

    type="System" で defaultSupported="FALSE" の場合、LoadState のコマンド ラインで指定される .xml ファイル内に同じコンポーネントがなければ、設定は移行されません。たとえば、既定の MigSys.xml ファイルには、type="System" で defaultSupported="FALSE" のコンポーネントが含まれています。このファイルを ScanState コマンド ラインで指定した場合、設定を移行するには、LoadState コマンド ラインでもこのファイルを指定する必要があります。これは、LoadState ツールが同じコンポーネントを検出する必要があるためです。つまり、コンポーネントは .xml ファイルの同じ移行 urlid と、同一の表示名を持っている必要があります。そうでない場合、LoadState ツールはこれらの設定をストアから移行しません。このことは、移行元コンピューターが Windows XP を実行していて、Windows Vista(R) と Windows XP の両方に移行する場合に役立ちます。両方の移行先コンピューターのために、同じストアを使えるためです。

  • Application: アプリケーションの設定。

  • Device: デバイスの設定。

  • Documents: ファイルを指定します。

context

省略可能

既定値 = UserAndSystem

このパラメーターのスコープを定義します。つまり、このコンポーネントを処理するコンテキストを、特定のユーザー、オペレーティング システム全体、その両方のいずれかに指定します。

指定できる最大のスコープは、<component> 要素によって設定されます。たとえば、<component> 要素が User のコンテキストを持ち、<rules> 要素が UserAndSystem のコンテキストを持っている場合、<rules> 要素は User のコンテキストを持っているかのように動作します。<rules> 要素が System のコンテキストを持っている場合は、<rules> 要素が存在しないかのように動作します。

  • User。コンポーネントをユーザーごとに評価します。

  • System。コンポーネントをシステム全体で 1 回だけ評価します。

  • UserAndSystem。コンポーネントをオペレーティング システム全体とユーザーごとに評価します。

defaultSupported

省略可能

(既定値 = TRUE)

TRUE、FALSE、YES、NO のいずれかです。このパラメーターが FALSE (または NO) の場合、コンポーネントは、同じコンポーネントが移行先コンピューター上にないと、移行されません。

type="System" で defaultSupported="FALSE" の場合、LoadState のコマンド ラインで指定される .xml ファイル内に同じコンポーネントがなければ、設定は移行されません。たとえば、既定の MigSys.xml ファイルには、type="System" で defaultSupported="FALSE" のコンポーネントが含まれています。このファイルを ScanState コマンド ラインで指定した場合、設定を移行するには、LoadState コマンド ラインでもこのファイルを指定する必要があります。これは、LoadState ツールが同じコンポーネントを検出する必要があるためです。つまり、コンポーネントは .xml ファイルの同じ移行 urlid と、同一の表示名を持っている必要があります。そうでない場合、LoadState ツールはこれらの設定をストアから移行しません。このことは、移行元コンピューターが Windows XP を実行していて、Windows Vista と Windows XP の両方に移行する場合に役立ちます。両方の移行先コンピューターのために、同じストアを使えるためです。

hidden

 

このパラメーターは、USMT で内部的にだけ使われます。

例については、いずれかの既定の移行 .xml ファイルをご覧ください。

<condition>

<detect>、<objectSet>、<addObjects> の各要素に属する <condition> 要素はサポートされていますが、使わないことをお勧めします。この要素は、今後のバージョンの USMT では使われなくなり、スクリプトの書き換えが必要になる場合があります。<objectSet> と <addObjects> 要素内で条件を使う必要がある場合は、より強力な <conditions> 要素を使うことをお勧めします。この要素を使うと、複雑なブール ステートメントを作ることができます。

<condition> 要素の結果は、ブール型になります。この要素を使って、親要素が評価される条件を指定できます。指定されている条件のいずれかが FALSE を返す場合、親要素は評価されません。

  • 出現の回数: 無制限。

  • 親要素: <conditions>、<detect>、<objectSet>、<addObjects>

  • 子要素: なし

  • ヘルパー関数: この要素で使用できる <condition> の関数は、DoesOSMatch、IsNative64Bit()、IsOSLaterThan、IsOSEarlierThan、DoesObjectExist、DoesFileVersionMatch、IsFileVersionAbove、IsFileVersionBelow、IsSystemContext、DoesStringContentEqual、DoesStringContentContain、IsSameObject、IsSameContent、IsSameStringContent です。

構文:

<condition negation="Yes|No">ScriptName</condition>

設定 必須かどうか

negation

省略可能

既定値 = No

"Yes" にすると、条件の True/False 値が反転されます。

ScriptName

必須

この移行セクション内で定義されたスクリプト。

例:

以下のコード例では、<condition> 要素の A と B が個別の <conditions> セクションにあるので、AND 演算子で結合されます。次に例を示します。

<detection>
   <conditions>
      <condition>A</condition>
   </conditions>
   <conditions operation="AND">
      <condition>B</condition>
   </conditions>
</detection>

ただし、以下のコード例では、<condition> 要素の A と B が同じ <conditions> セクションにあるので、OR 演算子で結合されます。

<detection>
   <conditions>
      <condition>A</condition>
      <condition>B</condition>
   </conditions>
</detection>

<condition> の関数

<condition> の関数は、ブール値を返します。これらの要素は、<addObjects> 条件で使えます。

  • オペレーティング システムのバージョンの関数

  • オブジェクトのコンテンツの関数

オペレーティング システムのバージョンの関数

  • DoesOSMatch

    すべての一致で、大文字と小文字は区別されません。

    構文: DoesOSMatch("OSType","OSVersion")

    設定 必須かどうか

    OSType

    必須

    この設定の有効な値は NT だけです。ただし、<condition> の関数を正しく機能させるには、この設定を指定する必要があります。

    OSVersion

    必須

    ピリオドで区切られた、メジャー バージョン、マイナー バージョン、ビルド番号、サービス パックのバージョン。たとえば、5.0.2600.Service Pack 1 のように指定します。パターンを使って、バージョンを部分的に指定することもできます。たとえば、5.0.* のように指定します。

    例:

    <condition>MigXmlHelper.DoesOSMatch("NT","*")</condition>

  • IsNative64Bit

    IsNative64Bit 関数は、移行プロセスがネイティブ 64 ビット プロセスとして実行されている場合 (つまり、プロセスが 64 ビット システム上で Windows on Windows (WOW) なしで実行されている場合) に TRUE を返します。そうでない場合は、FALSE を返します。

  • IsOSLaterThan

    すべての比較で、大文字と小文字が区別されません。

    構文: IsOSLaterThan("OSType","OSVersion")

    設定 必須かどうか

    OSType

    必須

    9x または NT を指定できます。OSType が現在のオペレーティング システムの種類と一致しない場合は、FALSE を返します。たとえば、現在のオペレーティング システムが Windows NT ベースで、OSType が "9x" の場合、結果は FALSE になります。

    OSVersion

    必須

    ピリオドで区切られた、メジャー バージョン、マイナー バージョン、ビルド番号、サービス パックのバージョン。たとえば、5.0.2600.Service Pack 1 のように指定します。バージョンを部分的に指定することもできますが、パターンは使えません。たとえば、5.0 のように指定します。

    IsOSLaterThan 関数は、現在のオペレーティング システムが OSVersion 以降である場合に TRUE を返します。

    例:

    <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 関数は、現在のオペレーティング システムが OSVersion より前のバージョンである場合に TRUE を返します。

オブジェクトのコンテンツの関数

  • DoesObjectExist

    DoesObjectExist 関数は、場所のパターンに一致するオブジェクトが存在する場合に TRUE を返します。そうでない場合は、FALSE を返します。場所のパターンは、列挙を行う前に展開されます。

    構文: DoesObjectExist("ObjectType","EncodedLocationPattern")

    設定 必須かどうか

    ObjectType

    必須

    オブジェクトの種類を定義します。File または Registry を指定できます。

    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 関数は、ファイルのバージョンが VersionValue よりも大きい値である場合に TRUE を返します。

    構文: IsFileVersionAbove("EncodedFileLocation","VersionTag","VersionValue")

    設定 必須かどうか

    EncodedFileLocation

    必須

    チェックされるファイルの場所の指定。環境変数を使うことができます。

    VersionTag

    必須

    チェックされる有効なバージョン タグの値。

    VersionValue

    必須

    比較する値。パターンを指定することはできません。

  • IsFileVersionBelow

    構文: IsFileVersionBelow("EncodedFileLocation","VersionTag","VersionValue")

    設定 必須かどうか

    EncodedFileLocation

    必須

    チェックされるファイルの場所の指定。環境変数を使うことができます。

    VersionTag

    必須

    チェックされる有効なバージョン タグの値。

    VersionValue

    必須

    比較する値。パターンを指定することはできません。

  • IsSystemContext

    IsSystemContext 関数は、現在のコンテキストが "System" である場合に TRUE を返します。そうでない場合は、FALSE を返します。

    構文: IsSystemContext()

  • DoesStringContentEqual

    DoesStringContentEqual 関数は、対象のオブジェクトの文字列表現が StringContent と同一である場合に TRUE を返します。

    構文: DoesStringContentEqual("ObjectType","EncodedLocation","StringContent")

    設定 必須かどうか

    ObjectType

    必須

    オブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocationPattern

    必須

    対象のオブジェクトの場所の指定。環境変数を指定できます。

    StringContent

    必須

    チェック対象の文字列。

    例:

    <condition negation="Yes">MigXmlHelper.DoesStringContentEqual("File","%USERNAME%","")</condition>
    
  • DoesStringContentContain

    DoesStringContentContain 関数は、オブジェクトの文字列表現中に StrToFind と一致する個所が少なくとも 1 つはある場合に TRUE を返します。

    構文: DoesStringContentContain("ObjectType","EncodedLocation","StrToFind")

    設定 必須かどうか

    ObjectType

    必須

    オブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocationPattern

    必須

    対象のオブジェクトの場所の指定。環境変数を指定できます。

    StrToFind

    必須

    対象のオブジェクトのコンテンツ内で検索される文字列。

  • IsSameObject

    IsSameObject 関数は、指定された 2 つのエンコードされた場所が、同じ物理オブジェクトに解決される場合に TRUE を返します。そうでない場合は、FALSE を返します。

    構文: IsSameObject("ObjectType","EncodedLocation1","EncodedLocation2")

    設定 必須かどうか

    ObjectType

    必須

    オブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocation1

    必須

    1 つ目のオブジェクトの場所の指定。環境変数を指定できます。

    EncodedLocation2

    必須

    2 つ目のオブジェクトの場所の指定。環境変数を指定できます。

    例:

    <objectSet>
         <condition negation="Yes">MigXmlHelper.IsSameObject("File","%CSIDL_FAVORITES%","%CSIDL_COMMON_FAVORITES%")</condition>
         <pattern type="File">%CSIDL_FAVORITES%\* [*]</pattern>
    </objectSet>
    
  • IsSameContent

    IsSameContent 関数は、指定された 2 つのオブジェクトが同じコンテンツを持っている場合に TRUE を返します。そうでない場合は、FALSE を返します。コンテンツはバイトごとに比較されます。

    構文: IsSameContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")

    設定 必須かどうか

    ObjectType1

    必須

    1 つ目のオブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocation1

    必須

    1 つ目のオブジェクトの場所の指定。環境変数を指定できます。

    ObjectType2

    必須

    2 つ目のオブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocation2

    必須

    2 つ目のオブジェクトの場所の指定。環境変数を指定できます。

  • IsSameStringContent

    IsSameStringContent 関数は、指定された 2 つのオブジェクトが同じコンテンツを持っている場合に TRUE を返します。そうでない場合は、FALSE を返します。コンテンツは文字列として解釈されます。

    構文: IsSameStringContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")

    設定 必須かどうか

    ObjectType1

    必須

    1 つ目のオブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocation1

    必須

    1 つ目のオブジェクトの場所の指定。環境変数を指定できます。

    ObjectType2

    必須

    2 つ目のオブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocation2

    必須

    2 つ目のオブジェクトの場所の指定。環境変数を指定できます。

<conditions>

<conditions> 要素は、親要素が評価される条件を指定するために使われる、ブール型の結果を返します。USMT は子要素を評価してから、operation パラメーターに応じて AND または OR 演算子を使って結果を結合します。

  • 出現の回数: 他の <conditions> 要素内で無制限。<detection>、<rules>、<addObjects>、<objectSet> では 1 回のみ

  • 親要素: <conditions>、<detection>、<environment>、<rules>、<addObjects>、<objectSet>

  • 子要素: <conditions>、<condition>

構文:

<conditions operation="AND|OR">

</conditions>

設定 必須かどうか

operation

省略可能、既定値 = AND

子要素から取得された結果に対して行われるブール演算を定義します。

次の例は、MigApp.xml ファイルからのものです。

<environment name="GlobalEnv">
   <conditions>
      <condition negation="Yes">MigXmlHelper.IsNative64Bit()</condition>
   </conditions>
   <variable name="HklmWowSoftware">
   <text>HKLM\Software</text>
   </variable>
</environment>

<content>

<content> 要素を使うと、オブジェクト パターンのリストを指定して、移行元コンピューターからオブジェクトのセットを取得できます。<content> 要素内の各 <objectSet> が評価されます。結果のオブジェクト パターンのリストごとに、一致するオブジェクトが列挙され、そのコンテンツが filter パラメーターによってフィルター処理されます。結果の文字列配列が、<content> 要素の出力になります。フィルター スクリプトは、場所の配列を返します。親 <objectSet> 要素には、複数の子 <content> 要素を含めることができます。

  • 出現の回数: 無制限

  • 親要素: <objectSet>

  • 子要素: <objectSet>

  • ヘルパー関数: この要素で使用できる <content> の関数は、ExtractSingleFile、ExtractMultipleFiles、ExtractDirectory です。

構文:

<content filter="ScriptInvocation">

</content>

設定 必須かどうか

filter

必須

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2") のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が TRUE の場合、オブジェクトは移行されます。FALSE の場合は、移行されません。

<content> の関数

以下の関数は、オブジェクトのコンテンツからパターンを生成します。これらの関数は、親 <ObjectSet> 要素が列挙しているすべてのオブジェクトで呼び出されます。

  • ExtractSingleFile

    レジストリ値が MULTI-SZ である場合は、最初のセグメントだけが処理されます。返されるパターンは、ファイルのエンコードされた場所であり、ファイルはシステム上に存在する必要があります。レジストリ値での指定が正しくても、ファイルが存在しない場合、この関数は NULL を返します。

    構文: ExtractSingleFile(Separators,PathHints)

    設定 必須かどうか

    Separators

    必須

    このレジストリ値の名前で、ファイル指定の後に続ける場合がある区切り記号の候補のリスト。たとえば、コンテンツが "C:\Windows\Notepad.exe,-2" である場合、区切り記号はコンマです。NULL を指定できます。

    PathHints

    必須

    セミコロン (;) で区切られた、追加のパスのリスト。関数は、現在のコンテンツと一致するファイルをこのパスで検索します。たとえば、コンテンツが "Notepad.exe" で、パスが %Path% 環境変数である場合、関数は %windir% から Notepad.exe を探し、"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 では、<Separators> 引数は NULL である必要があります。

    返されるパターンは、ファイルのエンコードされた場所であり、ファイルは移行元コンピューター上に存在する必要があります。レジストリ値での指定が正しくても、ファイルが存在しない場合は、結果のリストに含まれません。

    構文: ExtractMultipleFiles(Separators,PathHints)

    設定 必須かどうか

    Separators

    必須

    このレジストリ値の名前で、ファイル指定の後に続ける場合がある区切り記号の候補のリスト。たとえば、コンテンツが "C:\Windows\Notepad.exe,-2" である場合、区切り記号はコンマです。MULTI-SZ レジストリ値を処理する場合、このパラメーターは NULL である必要があります。

    PathHints

    必須

    セミコロン (;) で区切られた、追加のパスのリスト。関数は、現在のコンテンツと一致するファイルをこのパスで検索します。たとえば、コンテンツが "Notepad.exe" で、パスが %Path% 環境変数である場合、関数は %windir% から Notepad.exe を探し、"c:\Windows [Notepad.exe]" を返します。NULL を指定できます。

  • ExtractDirectory

    ExtractDirectory 関数は、移行元コンピューター上に存在するディレクトリのエンコードされた場所であるパターンを返します。レジストリ値での指定が正しくても、ディレクトリが存在しない場合、この関数は NULL を返します。MULTI-SZ であるレジストリ値を処理している場合は、最初のセグメントだけが処理されます。

    構文: ExtractDirectory(Separators,LevelsToTrim,PatternSuffix)

    設定 必須かどうか

    Separators

    省略可能

    このレジストリ値の名前で、ファイル指定の後に続ける場合がある区切り記号の候補のリスト。たとえば、コンテンツが "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> 要素を含めることができます。この要素は、処理されているオブジェクトの新しいコンテンツを返します。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 必須の子要素: <objectSet>

  • ヘルパー関数: この要素で使用できる <contentModify> の関数は、ConvertToDWORD、ConvertToString、ConvertToBinary、KeepExisting、OffsetValue、SetValueByTable、MergeMultiSzContent、MergeDelimitedContent です。

構文:

<contentModify script="ScriptInvocation">

</contentModify>

設定 必須かどうか Value

script

必須

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2"). のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が TRUE の場合、オブジェクトは移行されます。FALSE の場合は、移行されません。

<contentModify> の関数

以下の関数は、移行時にオブジェクトのコンテンツを変更します。これらの関数は、親 <ObjectSet> 要素が列挙しているすべてのオブジェクトで呼び出されます。

  • ConvertToDWORD

    ConvertToDWORD 関数は、親 <ObjectSet> 要素によって列挙されるレジストリ値のコンテンツを DWORD に変換します。たとえば、ConvertToDWORD は文字列の "1" を DWORD の 0x00000001 に変換します。変換が失敗した場合は、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 関数は、移行されるオブジェクトの値に対して Value を加算または減算し、結果を移行先コンピューターのレジストリ値に書き戻します。たとえば、移行されるオブジェクトが DWORD で値が 14 の場合、Value が "-2" であれば、移行先コンピューターでのレジストリ値は 12 になります。

    構文: OffsetValue(Value)

    設定 必須かどうか

    必須

    数値の文字列表現。正の値も負の値も指定できます。たとえば、OffsetValue(2) のように指定します。

  • SetValueByTable

    SetValueByTable 関数は、移行元コンピューターの値を移行元テーブルと照合します。値があった場合は、移行先テーブルでの対応する値が適用されます。値がなかった場合、または移行先テーブルに対応する値がなかった場合は、DefaultValueOnError が適用されます。

    構文: SetValueByTable(SourceTable,DestinationTable,DefaultValueOnError)

    設定 必須かどうか

    SourceTable

    必須

    コンマで区切られた、移行元レジストリ値である可能性がある値のリスト。

    DestinationTable

    省略可能

    コンマで区切られた、翻訳された値のリスト。

    DefaultValueOnError

    省略可能

    1) 移行元コンピューターの値が SourceTable にマッチしないか、2) DestinationTable に対応する値がない場合に、移行先コンピューターに適用される値。

    DefaultValueOnError が NULL の場合、移行先コンピューターでは値が変更されません。

  • KeepExisting

    移行先コンピューター上で競合が発生する場合に、KeepExisting 関数を使うことができます。この関数は、移行先コンピューター上のオブジェクト用に指定された属性を上書きせずに保持します。

    構文: KeepExisting("OptionString","OptionString","OptionString",…)

    設定 必須かどうか

    OptionString

    必須

    OptionString には、SecurityTimeFieldsFileAttrib:Letter を指定できます。OptionStrings は、種類ごとに 1 つだけ指定できます。同じ値の複数の OptionStrings を指定しないでください。指定した場合は、その種類の最も右側のオプションが保持されます。たとえば、("FileAttrib:H", "FileAttrib:R") のようには指定しないでください。このようにすると、読み取り専用のみが評価されます。代わりに、("FileAttrib:HR") のように指定すると、隠し属性と読み取り専用属性が移行先コンピューター上で保持されます。

    • Security。移行先オブジェクトのセキュリティ記述子がある場合、それを保持します。

    • TimeFields。移行先オブジェクトのタイム スタンプを保持します。このパラメーターは、ファイル専用です。

    • FileAttrib:Letter。移行先オブジェクトの、指定されたファイル属性のセットの属性値 (On または OFF) を保持します。このパラメーターは、ファイル専用です。以下のものは大文字と小文字が区別されませんが、無効な値、重複する値や、"FileAttrib:" の後にスペースが入っている指定は無視されます。以下の属性を自由に組み合わせて指定できます。

      • A = アーカイブ

      • C = 圧縮

      • E = 暗号化

      • H = 隠しファイル

      • I = コンテンツにインデックスを付けない

      • O = オフライン

      • R = 読み取り専用

      • S = システム ファイル

      • T = 一時ファイル

  • MergeMultiSzContent

    MergeMultiSzContent 関数は、親 <ObjectSet> 要素によって列挙されるレジストリ値の MULTI-SZ コンテンツを、移行先コンピューター上の対応する既存のレジストリ値のコンテンツとマージします。Instruction String は、結果の MULTI-SZ に対してコンテンツの削除または追加を行います。重複する要素は削除されます。

    構文: MergeMultiSzContent (Instruction,String,Instruction,String,…)

    設定 必須かどうか

    Instruction

    必須

    以下のいずれかを指定できます。

    • Add。対応する String が MULTI-SZ になければ、結果の MULTI-SZ に追加します。

    • Remove。対応する String を結果の MULTI-SZ から削除します。

    String

    必須

    追加または削除する文字列。

  • MergeDelimitedContent

    MergeDelimitedContent 関数は、親 <ObjectSet> 要素によって列挙されるレジストリ値のコンテンツを、移行先コンピューター上の対応する既存のレジストリ値のコンテンツとマージします。コンテンツは、Delimiters パラメーターの文字のいずれかで区切られた要素のリストと見なされます。重複する要素は削除されます。

    構文: MergeDelimitedContent(Delimiters,Instruction,String,…)

    設定 必須かどうか

    Delimiters

    必須

    処理されているオブジェクトのコンテンツを区切るために使われる 1 文字。コンテンツは、Delimiters によって区切られた要素のリストと見なされます。

    たとえば、"." はピリオドで文字列を区切ります。

    Instruction

    必須

    次のいずれかを指定できます。

    • Add。String が MULTI-SZ になければ、結果の MULTI-SZ に追加します。

    • Remove。String を結果の MULTI-SZ から削除します。

    String

    必須

    追加または削除する文字列。

<description>

<description> 要素は、コンポーネントの説明を定義しますが、移行には影響しません。

  • 出現の回数: 0 または 1 回

  • 親要素: <component>

  • 子要素: なし

構文:

<description>ComponentDescription</description>

設定 必須かどうか

ComponentDescription

必須

コンポーネントの説明。

次のコード サンプルは、<description> 要素で "My custom component" の説明を定義する方法を示しています。

<description>My custom component<description>

<destinationCleanup>

<destinationCleanup> 要素は、移行元コンピューターのオブジェクトを適用する前に、移行先コンピューターからファイル、レジストリ キーなどのオブジェクトを削除します。この要素は、LoadState ツールが移行先コンピューター上で実行されるときだけに評価されます。つまり、この要素は ScanState ツールでは無視されます。

重要

このオプションは、移行先コンピューターのオブジェクトを削除するので、使うときは十分に注意してください。

各 <destinationCleanup> 要素には、複数の <objectSet> 要素を含めることができます。一般的には、移行元コンピューター上に失われたレジストリ キーがあり、コンポーネントが確実に移行されるようにしたい場合に、この要素を使います。この場合、移行元のレジストリ キーを移行する前に、コンポーネントのすべてのレジストリ キーを削除できます。そうすることで、移行元コンピューター上で失われたキーがある場合に、移行先コンピューター上でもそのキーがないようにすることができます。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 子要素: <objectSet> (移行先コンピューターですべての子要素が削除されることに注意してください)

構文:

<destinationCleanup filter=ScriptInvocation>

</destinationCleanup>

設定 必須かどうか

filter

必須

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2"). のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が 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 の今後のバージョンで使われなくなる可能性があります。その場合、スクリプトを書き直さなければならなくなります。代わりに、<detection>要素を使うことをお勧めします。

<detect> 要素を使うと、コンポーネントがシステム上にあるかどうかを調べることができます。<detect> 要素内のすべての子 <detect> 要素が TRUE に解決されると、<detect> 要素が TRUE に解決されます。いずれかの子 <detect> 要素が FALSE に解決されると、その親 <detect> 要素は FALSE に解決されます。<detect> 要素セクションがない場合、USMT はコンポーネントが存在すると想定します。

各 <detect> 要素には、複数の子 <condition> 要素または <objectSet> 要素を含めることができ、それらは OR 演算子で論理的に結合されます。少なくとも 1 つの <condition> または <objectSet> 要素が TRUE に評価されると、<detect> 要素は TRUE に評価されます。

  • 出現の回数: 無制限

  • 親要素: <detects>、<namedElements>

  • 必須の子要素: <condition>

  • 省略可能な子要素: <objectSet>

構文:

<detect name="ID" context="User|System|UserAndSystem">

</detect>

設定 必須かどうか

name

<detect> が <namedElements> の子の場合は必須

<detect> が <detects> の子の場合は省略可能

ID が指定されると、子要素は処理されません。代わりに、<namedElements> 要素内で宣言された、同じ名前の他の <detect> 要素が処理されます。

context

省略可能

(既定値 = UserAndSystem)

このパラメーターのスコープを定義します。つまり、このコンポーネントを処理するコンテキストを、特定のユーザー、オペレーティング システム全体、その両方のいずれかに指定します。

指定できる最大のスコープは、<component> 要素によって設定されます。たとえば、<component> 要素が User のコンテキストを持ち、<rules> 要素が UserAndSystem のコンテキストを持っている場合、<rules> 要素は User のコンテキストを持っているかのように動作します。<rules> 要素が System のコンテキストを持っている場合は、<rules> 要素が存在しないかのように動作します。

  • User。変数をユーザーごとに評価します。

  • System。変数をシステム全体で 1 回だけ評価します。

  • UserAndSystem。変数をオペレーティング システム全体とユーザーごとに評価します。

詳しくは、<detection> の例をご覧ください。

<detects>

<detects> 要素はまだサポートされていますが、USMT の今後のバージョンでは使われなくなる可能性があり、そうなるとスクリプトを書き直さなければならなくなるため、使わないことをお勧めします。代わりに、親要素が <role> または <namedElements> である場合は、<detection> 要素を使うことをお勧めします。親要素が <rules> である場合は、<conditions> 要素を使うことをお勧めします。<detection> を使うと、複雑なブール ステートメントをより明確に指定できます。

<detects> 要素は、1 つまたは複数の <detect> 要素のコンテナーです。<detects> 要素内のすべての子 <detect> 要素が TRUE に解決されると、<detects> が TRUE に解決されます。いずれかの子 <detect> 要素が FALSE に解決されると、<detects> は FALSE に解決されます。コンポーネント内に <detects> 要素を記述したくない場合は、<namedElements> 要素の下に <detects> 要素を作り、それを参照することができます。<detects> 要素セクションがない場合、USMT はコンポーネントが存在すると想定します。各 <detects> 要素の結果は OR 演算子によって結合され、親要素を検出するために使われる規則を形成します。

構文:

<detects name="ID" context="User|System|UserAndSystem">

</detects>

  • 出現の回数: 無制限。

  • 親要素: <role>、<rules>、<namedElements>

  • 必須の子要素: <detect>

設定 必須かどうか

name

<detects> が <namedElements> の子の場合は必須

<detects> が <role> または <rules> の子の場合は省略可能

ID が指定されると、子 <detect> 要素は処理されません。代わりに、<namedElements> 要素内で宣言された、同じ名前の他の <detects> 要素が処理されます。

context

省略可能

(既定値 = UserAndSystem)

このパラメーターのスコープを定義します。つまり、このコンポーネントを処理するコンテキストを、特定のユーザー、オペレーティング システム全体、その両方のいずれかに指定します。

指定できる最大のスコープは、<component> 要素によって設定されます。たとえば、<component> 要素が User のコンテキストを持ち、<rules> 要素が UserAndSystem のコンテキストを持っている場合、<rules> 要素は User のコンテキストを持っているかのように動作します。<rules> 要素が System のコンテキストを持っている場合は、<rules> 要素が存在しないかのように動作します。

  • User。変数をユーザーごとに評価します。

  • System。変数をシステム全体で 1 回だけ評価します。

  • UserAndSystem。変数をオペレーティング システム全体とユーザーごとに評価します。

<rules> 要素内にある <detects> 要素の context パラメーターは無視されます。

次の例は、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>

<detection>

<detection> 要素は、1 つの <conditions> 要素のコンテナーです。<conditions> 要素の下にある子 <condition> 要素の結果が、<conditions> 要素の結果を決めます。たとえば、<detection> 要素内のすべての子 <conditions> 要素が TRUE に解決される場合、<detection> 要素は TRUE に解決されます。いずれかの子 <conditions> 要素が FALSE に解決されると、<detection> 要素は FALSE に解決されます。

また、<role> 要素内の各 <detection> セクションの結果は、OR 演算子によって結合され、親要素の検出規則を形成します。つまり、いずれかの <detection> セクションが TRUE に解決されると、<role> 要素が処理されます。そうでない場合、<role> 要素は処理されません。

コンポーネント内に <detection> 要素を記述したくない場合は、<namedElements> 要素の下で <detection> 要素を使ってください。その後、<role> 要素の下に一致する <detection> セクションを作って、コンポーネントを移行するかどうかを制御します。コンポーネントの <detection> 要素セクションがない場合、USMT はコンポーネントが存在すると想定します。

  • 出現の回数: 無制限。

  • 親要素: <role>、<namedElements>

  • 子要素: <conditions>

構文:

<detection name="ID" context="User|System|UserAndSystem">

</detection>

設定 必須かどうか

name

  • <detection> が <namedElements> の下で宣言されている場合は必須

  • <role> の下で宣言されている場合は省略可能

宣言されている場合、<detection> 要素のコンテンツは無視され、<namedElements> 要素で宣言されている同じ名前の <detection> 要素のコンテンツが評価されます。

context

省略可能、既定値 = UserAndSystem

このパラメーターのスコープを定義します。つまり、このコンポーネントを処理するコンテキストを、特定のユーザー、オペレーティング システム全体、その両方のいずれかに指定します。

  • User。コンポーネントをユーザーごとに評価します。

  • System。コンポーネントをシステム全体で 1 回だけ評価します。

  • 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> 要素内で必須のフィールドです。

  • 出現の回数: コンポーネントごとに 1 回

  • 親要素: <component>

  • 子要素: なし

構文:

<displayName _locID="ID">ComponentName</displayName>

設定 必須かどうか

locID

省略可能

このパラメーターは、USMT で内部的に使われます。このパラメーターを使わないでください。

ComponentName

必須

コンポーネントの名前。

例:

<displayName>Command Prompt settings</displayName>

<environment>

<environment> 要素は、.xml ファイルで使う変数を定義できる <variable> 要素のコンテナーです。この方法で定義されるすべての環境変数は、プライベートになります。つまり、それらの子コンポーネントと、それらが定義されているコンポーネントだけで使えます。例については、2 つのシナリオ例をご覧ください。

  • 出現の回数: 無制限

  • 親要素: <role>、<component>、<namedElements>

  • 必須の子要素: <variable>

  • 省略可能な子要素: <conditions>

構文:

<environment name="ID" context="User|System|UserAndSystem">

</environment>

設定 必須かどうか

name

<environment> が <namedElements> の子の場合は必須

<environment> が <role> または <component> の子の場合は省略可能

<role> または <component> 要素の子として宣言されている場合、ID が宣言されていると、USMT は <environment> 要素のコンテンツを無視し、<namedElements> 要素で宣言されている同じ名前の <environment> 要素のコンテンツを処理します。

context

省略可能

(既定値 = UserAndSystem)

このパラメーターのスコープを定義します。つまり、このコンポーネントを処理するコンテキストを、特定のユーザー、オペレーティング システム全体、その両方のいずれかに指定します。

指定できる最大のスコープは、<component> 要素によって設定されます。たとえば、<component> 要素が User のコンテキストを持ち、<rules> 要素が UserAndSystem のコンテキストを持っている場合、<rules> 要素は User のコンテキストを持っているかのように動作します。<rules> 要素が System のコンテキストを持っている場合は、<rules> が存在しないかのように動作します。

  • User。変数をユーザーごとに評価します。

  • System。変数をシステム全体で 1 回だけ評価します。

  • UserAndSystem。変数をオペレーティング システム全体とユーザーごとに評価します。

シナリオ例 1

このシナリオでは、実行時に移行先コンピューターの構成に基づいて、オブジェクトの場所を生成します。たとえば、アプリケーションのデータがアプリケーションのインストールされたディレクトリに書き込まれ、ユーザーはアプリケーションをコンピューター上のどこにでもインストールできる場合に、このようにする必要があります。アプリケーションがレジストリ値 hklm\software\companyname\install [path] を書き込み、その後、この値をアプリケーションがインストールされた場所に更新した場合、必要なデータを正しく移行する唯一の方法は、環境変数を定義することです。たとえば、次のようにします。

<environment>
   <variable name="INSTALLPATH">
      <script>MigXmlHelper.GetStringContent("Registry","\software\companyname\install [path]")</script>
   </variable>
</environment>

その後、次のように、<include> 規則を使うことができます。同じようなタスクを行うために、いずれかの <script> の関数を使うことができます。

<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 などの名前の 5 つのファイルを %SYSTEMDRIVE%\data\userdata\dir1\dir2\ に移行します。そのためには、.xml ファイル内に次の <include> 規則がある必要があります。

<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>

パスを 5 回入力する代わりに、次のように、場所の変数を作ることができます。

<environment>
   <variable name="DATAPATH">
      <text>%SYSTEMDRIVE%\data\userdata\dir1\dir2 </text>
      </variable>
</environment>

その後、次のように、<include> 規則内で変数を指定できます。

<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> 要素を含めることができます。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 子要素: <objectSet>

  • ヘルパー関数: この要素で使用できる <include> と <exclude> のフィルター関数は、CompareStringContent、IgnoreIrrelevantLinks、AnswerNo、NeverRestore、SameRegContent です。

構文:

<exclude filter="ScriptInvocation">

</exclude>

設定 必須かどうか

filter

省略可能

(既定値 = No)

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2"). のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が 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> 要素がない場合は、そのすべてのパラメーターが移行されます。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 子要素: <objectSet>

構文:

<excludeAttributes attributes="Security|TimeFields|Security,TimeFields">

</excludeAttributes>

パラメーター 必須かどうか

attributes

必須

除外する属性を指定します。次のいずれかを指定できます。または、"Security","TimeFields" のように引用符で区切って、両方を指定できます。

  • Security は、Owner、Group、DACL、SACL のいずれかです。

  • TimeFields は、CreationTime、LastAccessTime、LastWrittenTime のいずれかです。

例:

<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/miguser">
<!-- This component migrates My Video files -->
   <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>

<extensions> 要素は、1 つまたは複数の <extension> 要素のコンテナーです。

  • 出現の回数: 0 または 1 回

  • 親要素: <component>

  • 必須の子要素: <extension>

構文:

<extensions>

</extensions>

<extension>

<extension> 要素を使うと、特定の拡張子のドキュメントを指定できます。

  • 出現の回数: 無制限

  • 親要素: <extensions>

  • 子要素: なし

構文:

<extension>FilenameExtension</extension>

設定 必須かどうか

FilenameExtension

必須

ファイル名拡張子。

たとえば、すべての *.doc ファイルを移行元コンピューターから移行する場合、以下のコードを <component> 要素の下に指定します。

<extensions> 
        <extension>doc</extension> 
<extensions> 

これは、以下のコードを <rules> 要素の下に指定するのと同じです。

<include> 
        <objectSet> 
                <script>MigXmlHelper.GenerateDrivePatterns ("* [*.doc]", "Fixed")</script> 
        </objectSet> 
</include>

<extension> 要素の使い方を示す他の例については、<excludeAttributes> の例をご覧ください。

<externalProcess>

<externalProcess> 要素を使うと、移行プロセス中にコマンド ラインを実行できます。たとえば、LoadState プロセスの完了後にコマンドを実行したい場合があります。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 必須の子要素: <commandLine>

構文:

<externalProcess when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">

</externalProcess>

設定 必須かどうか

when

必須

コマンド ラインをいつ実行するかを示します。この値は、次のいずれかです。

  • pre-scan スキャン プロセスが始まる前。

  • scan-success スキャン プロセスが正常に終了した後。

  • post-scan スキャン プロセスが正常に、または失敗で終了した後。

  • pre-apply 適用プロセスが始まる前。

  • apply-success 適用プロセスが正常に終了した後。

  • post-apply 適用プロセスが正常に、または失敗で終了した後。

<externalProcess> 要素の使い方の例については、<excludeAttributes> の例をご覧ください。

<icon>

これは内部 USMT 要素です。この要素を使わないでください。

<include>

<include> 要素は、移行するものを決めます。ただし、より限定的な <exclude> 規則がある場合は例外です。スクリプトを指定して、収集対象をより詳しく定義できます。各 <include> 要素には、複数の <objectSet> 要素を含めることができます。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 必須の子要素: <objectSet>

  • ヘルパー関数: この要素で使用できる <include> と <exclude> のフィルター関数は、CompareStringContent、IgnoreIrrelevantLinks、AnswerNo、NeverRestore です。

構文:

<include filter="ScriptInvocation">

</include>

設定 必須かどうか

filter

省略可能。

このパラメーターを指定しないと、子 <ObjectSet> 要素内にあるすべてのパターンが処理されます。

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2"). のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が 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>

<include> と <exclude> のフィルター関数

以下の関数は、ブール値を返します。これらを使うと、特定の条件が満たされるかどうかに基づいて、特定のオブジェクトを移行できます。

  • AnswerNo

    このフィルターは常に FALSE を返します。

    構文: AnswerNo ()

  • CompareStringContent

    構文: CompareStringContent("StringContent","CompareType")

    設定 必須かどうか

    StringContent

    必須

    チェック対象の文字列。

    CompareType

    必須

    文字列。以下のいずれかの値を使います。

    • Equal (大文字と小文字は区別されません)。移行エンジンによって処理される現在のオブジェクトの文字列表現が StringContent と同一である場合、関数は TRUE を返します。

    • NULLまたは他の任意の値。移行エンジンによって処理される現在のオブジェクトの文字列表現が StringContent と一致しない場合、関数は TRUE を返します。

  • IgnoreIrrelevantLinks

    このフィルターは、移行先コンピューター上で有効ではないオブジェクトを指す .lnk ファイルを除外します。スクリーン処理は移行先コンピューターで行われるため、ScanState 時にはすべての .lnk ファイルがストアに保存されます。その後、LoadState ツールを実行するときに除外されます。

    構文: IgnoreIrrelevantLinks ()

    例:

    <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
              <pattern type="File">%CSIDL_COMMON_VIDEO%\* [*]</pattern>
         </objectSet>
    </include>
    
  • NeverRestore

    この関数を使うと、指定したオブジェクトを移行元コンピューターから収集しますが、そのオブジェクトは移行先コンピューターに移行されません。この関数は、ScanState ツールと共に実行されると、TRUE に評価されます。この関数は、LoadState ツールと共に実行されると、FALSE に評価されます。この関数は、移行先コンピューター上のオブジェクトの値を調べるだけで、オブジェクトの移行はしない場合などに使います。

    構文: NeverRestore()

    次の例では、HKCU\Control Panel\International [Locale] がストアに含められますが、移行先コンピューターには移行されません。

    <include filter="MigXmlHelper.NeverRestore()">
       <objectSet>
          <pattern type="Registry">HKCU\Control Panel\International [Locale]</pattern>
       </objectSet>
    </include>
    

<includeAttributes>

<includeAttributes> 要素を使って、オブジェクトに関連付けられている特定のパラメーターをオブジェクト自体と共に移行するかどうかを決めることができます。<includeAttributes> 要素と <excludeAttributes> 要素が競合する場合は、最も限定的なパターンによって、どのパラメーターが移行されるかが決まります。オブジェクトに <includeAttributes> 要素または <excludeAttributes> 要素がない場合は、そのすべてのパラメーターが移行されます。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 子要素: <objectSet>

構文:

<includeAttributes attributes="Security|TimeFields|Security,TimeFields">

</includeAttributes>

設定 必須かどうか

attributes

必須

オブジェクトと共に移行される属性を指定します。次のいずれかを指定できます。または、"Security","TimeFields" のように引用符で区切って、両方を指定できます。

  • Security は、以下のいずれかの値になります。

    • Owner。オブジェクトの所有者 (SID)。

    • Group。オブジェクトのプライマリ グループ (SID)。

    • DACL (随意アクセス制御リスト)。オブジェクトの所有者によって制御され、特定のユーザーまたはグループがオブジェクトに対して持つアクセス権を指定するアクセス制御リスト。

    • SACL (システム アクセス制御リスト)。セキュリティ保護できるオブジェクトへのアクセス試行に対する監査メッセージの生成を制御する ACL。オブジェクトの SACL を取得または設定する能力は、通常はシステム管理者だけが持つ特権によって制御されます。

  • TimeFields は、以下のいずれかになります。

    • CreationTime。ファイルまたはディレクトリが作成された日時を示します。

    • LastAccessTime。ファイルが最後に読み取られた日時、書き込まれた日時、または実行された日時 (実行可能ファイルの場合) を示します。

    • LastWrittenTime。ファイルが最後に書き込まれた日時、切り詰められた日時、または上書きされた日時を示します。

<includeAttributes> 要素の使い方の例については、<excludeAttributes> の例をご覧ください。

<library>

これは内部 USMT 要素です。この要素を使わないでください。

<location>

<location> 要素は、<object> 要素の場所を定義します。

  • 出現の回数: 各 <object> で 1 回

  • 親要素: <object>

  • 子要素: <script>

構文:

<location type="typeID">ObjectLocation</location>

設定 必須かどうか

type

必須

typeID には Registry または File を指定できます。

ObjectLocation

必須

オブジェクトの場所。

次の例は、MigApp.xml ファイルからのものです。

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
   </object>
</addObjects>

<locationModify>

<locationModify> 要素を使うと、オブジェクトの場所と名前を、移行先コンピューターに移行する前に変更できます。<locationModify> 要素は、LoadState ツールが移行先コンピューター上で実行されるときだけに処理されます。つまり、この要素は ScanState ツールでは無視されます。<locationModify> 要素は、移行先コンピューター上に適切なフォルダーがない場合は、フォルダーを作ります。

出現の回数: 無制限

  • 親要素: <rules>

  • 必須の子要素: <objectSet>

  • ヘルパー関数: この要素で使用できる <locationModify> の関数は、ExactMove、RelativeMove、Move です。

構文:

<locationModify script="ScriptInvocation">

</locationModify>

設定 必須かどうか

script

必須

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2"). のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が 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 に移動します。この関数は、1 つのファイルを移行先コンピューター上の別の場所に移動したい場合に使うことができます。移動先の場所がノードである場合は、一致するすべての移行元オブジェクトがそのノードにサブディレクトリなしで書き込まれます。移動先の場所がリーフである場合は、移行エンジンによって、一致するすべての移行元オブジェクトが同じ場所に移行されます。競合が発生した場合は、通常の競合アルゴリズムが適用されます。

    構文: ExactMove(ObjectEncodedLocation)

    設定 必須かどうか

    ObjectEncodedLocation

    必須

    すべての移行元オブジェクトの移動先の場所の指定。

    例:

    <locationModify script="MigXmlHelper.ExactMove('HKCU\Keyboard Layout\Toggle [HotKey]')">
         <objectSet>
              <pattern type="Registry">HKCU\Keyboard Layout\Toggle []</pattern>
         </objectSet>
    </locationModify>
    
  • Move

    Move 関数は、オブジェクトを移行先コンピューター上の別の場所に移動します。また、この関数は、移行元オブジェクト名で最長の 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>

<manufacturer> 要素は、コンポーネントの製造元を定義しますが、移行には影響しません。

  • 出現の回数: 0 または 1 回

  • 親要素: <component>

  • 子要素: なし

構文:

<manufacturer>Name</manufacturer>

設定 必須かどうか

Name

必須

コンポーネントの製造元の名前です。

<merge>

<merge> 要素は、競合が発生したときにどうなるかを決めます。競合するのは、移行されるオブジェクトが既に移行先コンピューター上に存在する場合です。この要素を指定しないと、レジストリの場合の既定の動作では、移行元オブジェクトが移行先オブジェクトを上書きします。ファイルの場合の既定の動作では、移行元ファイルが "OriginalFileName(1).OriginalExtension" という形式の名前に変えられます。この要素は、競合が発生したときにどうするかを決めるだけです。オブジェクトを移行対象にするわけではありません。そのため、オブジェクトを移行するには、<merge> 要素と共に <include> 規則を指定する必要があります。オブジェクトが処理され、競合が検出されると、USMT は最も限定的な <merge> 規則を選び、競合を解決するために適用します。たとえば、<sourcePriority> に設定された <merge> 規則の C:\* [*] と、<destinationPriority> に設定された <merge> 規則の C:\subfolder\* [*] がある場合、<destinationPriority> 規則の方が限定的なので、USMT はこの規則を使います。

この要素の例については、「競合と優先度」をご覧ください。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 必須の子要素: <objectSet>

  • ヘルパー関数: この要素で使用できる <merge> の関数は、SourcePriority、DestinationPriority、FindFilePlaceByPattern、LeafPattern、NewestVersion、HigherValue()、LowerValue() です。

構文:

<merge script="ScriptInvocation">

</merge>

設定 必須かどうか

script

必須

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2"). のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が 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>

<merge> の関数

これらの関数は、競合の解決方法を制御します。

  • DestinationPriority

    移行先コンピューター上のオブジェクトを保持し、移行元コンピューターのオブジェクトを移行しないように指定します。

    例:

    <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\9.0\PhotoDraw\ [MyPictures]</pattern>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\9.0\PhotoDraw\Settings\ [PicturesPath]</pattern>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\9.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\12.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\11.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\10.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
     </objectSet>
    </merge>
    

<migration>

<migration> 要素は、移行 .xml ファイルの単一のルート要素であり、必須です。各 .xml ファイルは、一意の移行 urlid を持つ必要があります。コマンド ラインで指定する各ファイルの urlid は、一意である必要があります。USMT では、urlid を使ってファイル内のコンポーネントが定義されます。たとえば、各ファイルの先頭で、次のように指定する必要があります。<CustomFileName> はファイル名です (たとえば "CustomApp")。

  • 出現の回数: 1

  • 親要素: なし

  • 必須の子要素: <component>

  • 省略可能な子要素: <library>、<namedElements>

構文:

<migration urlid="*UrlID/*Name">

</migration>

設定 必須かどうか

urlid

必須

UrlID は、この .xml ファイルを一意に識別する文字列識別子です。このパラメーターは、XML 名前空間仕様で定義されているように、コロンを含まない名前である必要があります。各移行 .xml ファイルは、一意の urlid を持つ必要があります。同じ urlid を持つ 2 つの移行 .xml ファイルをコマンド ラインに指定した場合、2 つ目の .xml ファイルは処理されません。XML 名前空間について詳しくは、XML 名前空間に関するページをご覧ください。

Name

省略可能

必須ではありませんが、.xml ファイルの名前を使うことをお勧めします。

次の例は、MigApp.xml ファイルからのものです。

<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/migapp">
</migration>

MigXMLHelper.FileProperties

このフィルター ヘルパー関数は、ファイルの移行をファイルのサイズと日付属性に基づいてフィルター処理するために使うことができます。

ヘルパー関数 MigXMLHelper.FileProperties (property, operator, valueToCompare)

Property

filesize、dateCreated、dateModified、dateAccessed。

Operator

range、neq、lte、lt、eq、gte、gt

valueToCompare

比較している値。次に例を示します。

日付: "2008/05/15-2005/05/17"、"2008/05/15"

サイズ: 末尾に B、KB、MB、GB を付けた数値。 "5GB"、"1KB-1MB"

<component context="System"  type="Application">
<displayName>File_size</displayName>
<role role="Data">

   <rules>
        <include filter='MigXmlHelper.FileProperties("dateAccessed","range","2008/05/15-2008/05/17")'>
         <objectSet>
         <pattern type="File">%SYSTEMDRIVE%\DOCS\* [*]</pattern>
         </objectSet>
      </include>
   </rules>
</role>
</component>

<namedElements>

<namedElements> 要素を使うと、名前付き要素を定義できます。それらの要素は、.xml ファイル全体で、任意のコンポーネントで使うことができます。この要素を使う方法の例については、MigApp.xml ファイルをご覧ください。

構文:

<namedElements>

</namedElements>

  • 出現の回数: 無制限

  • 親要素: <migration>

  • 子要素: <environment>、<rules>、<conditions>、<detection>、<detects>、<detect>

この要素の例については、MigApp.xml ファイルをご覧ください。

<object>

<object> 要素は、ファイルまたはレジストリ キーを表します。

  • 出現の回数: 無制限

  • 親要素: <addObjects>

  • 必須の子要素: <location>、<attributes>

  • 省略可能な子要素: <bytes>

構文:

<object>

</object>

次の例は、MigApp.xml ファイルからのものです。

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
      </object>
</addObjects>

<objectSet>

<objectSet> 要素には、ファイル パス、レジストリの場所など、オブジェクト パターンのリストが含まれます。子 <conditions> 要素は、最初に評価されます。すべての子 <conditions> 要素が FALSE を返すと、<objectSet> 要素は空のセットに評価されます。各親要素には、複数の <objectSet> 要素だけを含めることができます。

  • 出現の回数: 無制限

  • 親要素: <variable>、<content>、<include>、<exclude>、<merge>、<contentModify>、<locationModify>、<destinationCleanup>、<includeAttributes>、<excludeAttributes>、<unconditionalExclude>、<detect>

  • 必須の子要素: <script> または <pattern>

  • 省略可能な子要素: <content>、<conditions>、<condition>

構文:

<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 要素です。この要素を使わないでください。

<paths>

これは内部 USMT 要素です。この要素を使わないでください。

<pattern>

この要素を使って、複数のオブジェクトを指定できます。各 <objectSet> 要素に複数の <pattern> 要素を指定でき、それらは結合されます。ファイルを指定している場合は、代わりに GenerateDrivePatterns と <script> を使うこともできます。GenerateDrivePatterns は、基本的には <pattern> 規則と同じですが、ドライブ文字の指定がありません。たとえば、次の 2 つのコード行は同じように機能します。

<pattern type="File">C:\Folder\* [Sample.doc]</pattern>
<script>MigXmlHelper.GenerateDrivePatterns("\Folder\* [Sample.doc]","Fixed"</script>
  • 出現の回数: 無制限

  • 親要素: <objectSet>

  • 子要素: なし。ただし、Path [object] が有効である必要があります。

構文:

<pattern type="typeID">Path [object]</pattern>

設定 必須かどうか

type

必須

typeID には Registry、File、Ini を指定できます。typeId が Ini の場合は、Pathobject の間にスペースを入れることはできません。たとえば、type="Ini" の場合、次の記述は適切です。

<pattern type="Ini">%WinAmp5InstPath%\Winamp.ini|WinAmp[keeponscreen]</pattern>

Path [object]

必須

有効なレジストリまたはファイル パスのパターンの後に 1 つ以上のスペースを挟んで、移行するオブジェクトを角かっこ ([]) で囲んで指定します。

  • Path にはアスタリスク (*) ワイルドカード文字を含めることができ、環境変数にすることもできます。ワイルドカード文字として疑問符を使うことはできません。HKEY_CURRENT_USER と HKEY_LOCAL_MACHINE を参照するために、それぞれ HKCU と HKLM を使うことができます。

  • Object には、アスタリスク (*) ワイルドカード文字含めることができます。ただし、疑問符をワイルドカード文字として使うことはできません。次に例を示します。

    C:\Folder\ [*] は、C:\Path のすべてのファイルを列挙しますが、C:\Folder のサブフォルダーは列挙しません。

    C:\Folder\* [*] は、C:\Folder のすべてのファイルとサブフォルダーを列挙します。

    C:\Folder\ [*.mp3] は、C:\Folder のすべての .mp3 ファイルを列挙します。

    C:\Folder\ [Sample.doc] は、C:\Folder にある Sample.doc ファイルだけを列挙します。

    > [!NOTE] > ファイル名に角かっこ ([ または ]) が含まれているファイルを移行している場合は、角かっこを有効にするために、角かっこの直前にキャレット (^) 文字を挿入する必要があります。たとえば、ファイル名が "file].txt" の場合、<pattern type="File">c:\documents\mydocs [file].txt]</pattern> ではなく <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> と指定する必要があります。 >

例:

  • 1 つのレジストリ キーを移行するには:

    <pattern type="Registry">HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent]</pattern>
    
  • C: ドライブの EngineeringDrafts フォルダーとすべてのサブフォルダーを移行するには:

    <pattern type="File">C:\EngineeringDrafts\* [*]</pattern>
    
  • C: ドライブの EngineeringDrafts フォルダーだけを、サブフォルダーは含めずに移行するには:

    <pattern type="File"> C:\EngineeringDrafts\ [*]</pattern>
    
  • C:\EngineeringDrafts の Sample.doc ファイルを移行するには:

    <pattern type="File"> C:\EngineeringDrafts\ [Sample.doc]</pattern>
    
  • C: ドライブ上のどこかに存在する Sample.doc ファイルを移行するには、次のようなパターンを使います。C: ドライブに同じ名前のファイルが複数ある場合は、それらのファイルがすべて移行されます。

    <pattern type="File"> C:\* [Sample.doc] </pattern>
    
  • この要素の使い方のその他の例については、「ファイルと設定の除外」、「ファイルと設定の経路を変更する」、「ファイルと設定を含める」、「カスタム XML の例」をご覧ください。

<processing>

この要素を使うと、移行プロセスの特定の時点でスクリプトを実行できます。指定するスクリプトからの戻り値は想定されておらず、戻り値がある場合は無視されます。

  • 出現の回数: 無制限

  • 親要素: <rules>

  • 必須の子要素: <script>

構文:

<processing when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">

</processing>

設定 必須かどうか

when

必須

スクリプトをいつ実行するかを示します。この値は、次のいずれかです。

  • pre-scan はスキャン プロセスが始まる前を意味します。

  • scan-success は、スキャン プロセスが正常に終了した後を意味します。

  • post-scan は、スキャン プロセスが正常に、または失敗で終了した後を意味します。

  • pre-apply は、適用プロセスが始まる前を意味します。

  • apply-success は、適用プロセスが正常に終了した後を意味します。

  • post-apply は、適用プロセスが正常に、または失敗で終了した後を意味します。

<plugin>

これは内部 USMT 要素です。この要素を使わないでください。

<role>

<role> 要素は、custom .xml ファイルで必要です。<role> 要素を指定すると、具体的なコンポーネントを作ることができます。コンポーネントは、<component> レベルで指定されるパラメーターと、ここで指定されるロールによって定義されます。

  • 出現の回数: 各 <component> に 1 ~ 3 個の子 <role> 要素を含めることができます。

  • 親要素: <component>、<role>

  • 必須の子要素: <rules>

  • 省略可能な子要素: <environment>、<detection>、<component>、<role>、<detects>、<plugin>、

構文:

<role role="Container|Binaries|Settings|Data">

</role>

設定 必須かどうか

role

必須

コンポーネントのロールを定義します。ロールは次のいずれかです。

  • Container

  • Binaries

  • Settings

  • Data

次の指定ができます。

  1. <component> 内に最大で 3 つの <role> 要素 (1 つの "Binaries" ロール要素、1 つの "Settings" ロール要素、1 つの "Data" ロール要素) を指定します。これらのパラメーターは、移行の動作を変えません。移行する設定を分類しやすくすることだけが目的です。これらの <role> 要素は入れ子にできますが、入れ子になった各要素は同じロール パラメーターのものである必要があります。

  2. <component> 要素内に 1 つの "Container" <role> 要素を指定します。この場合、指定できるのは他の <component> 要素だけで、子 <rules> 要素は指定できません。また、各子 <component> 要素は、親 <component> 要素と同じ種類である必要があります。次に例を示します。

<component context="UserAndSystem" type="Application">
  <displayName _locID="migapp.msoffice2003">Microsoft Office 2003</displayName> 
  <environment name="GlobalEnv" /> 
  <role role="Container">
    <detection name="AnyOffice2003Version" /> 
    <detection name="FrontPage2003" /> 
    <!-- 
 Office 2003 Common Settings 
  --> 
    <component context="UserAndSystem" type="Application">

次の例は、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>

<rules> 要素は、custom .xml ファイルで必要です。この要素には、親 <component> 要素が選ばれていて、子 <conditions> 要素がある場合にはそれが FALSE に評価されなければ、移行中に実行される規則が含まれます。各 <rules> 要素には、複数の子 <rules> 要素を含めることができます。

  • 出現の回数: 無制限

  • 親要素: <role>、<rules>、<namedElements>

  • 必須の子要素: <include>

  • 省略可能な子要素: <rules>、<exclude>、<unconditionalExclude>、<merge>、<contentModify>、<locationModify>、<destinationCleanup>、<addObjects>、<externalProcess>、<processing>、<includeAttributes>、<excludeAttributes>、<conditions>、<detects>

構文:

<rules name="ID" context="User|System|UserAndSystem">

</rules>

設定 必須かどうか

name

<rules> が <namedElements> の子の場合は必須

<rules> が他の要素の子の場合は省略可能

ID が指定されると、子要素は処理されません。代わりに、<namedElements> 内で宣言された、同じ名前の他の <rules> 要素が処理されます。

context

省略可能

(既定値 = UserAndSystem)

このパラメーターのスコープを定義します。つまり、このコンポーネントを処理するコンテキストを、特定のユーザー、オペレーティング システム全体、その両方のいずれかに指定します。

指定できる最大のスコープは、<component> 要素によって設定されます。たとえば、<component> 要素が User のコンテキストを持ち、<rules> 要素が UserAndSystem のコンテキストを持っている場合、<rules> 要素は User のコンテキストを持っているかのように動作します。<rules> が System のコンテキストを持っている場合は、<rules> が存在しないかのように動作します。

  • User。変数をユーザーごとに評価します。

  • System。変数をシステム全体で 1 回だけ評価します。

  • UserAndSystem。変数をオペレーティング システム全体とユーザーごとに評価します。

次の例は、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>

<script>

<script> が必要とする戻り値は、親要素によって異なります。

出現の回数: <variable> では 1 回、<objectSet>、<processing> では無制限

親要素: <objectSet>、<variable>、<processing>

子要素: なし

構文とヘルパー関数:

  • 一般的な構文: <script>ScriptWithArguments</script>

  • <script> が <variable> 内にある場合は、<script> の関数 を使うことができます。

    構文: <script>MigXmlHelper.GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")</script>

    例: <script>MigXMLHelper.GetStringContent("Registry","HKLM\Software\MyApp\Installer [EXEPATH]")</script>

  • <script> が <objectSet> 内にある場合は、<script> の関数 を使うことができます。

    構文: <script>MigXmlHelper.GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")</script>

    例: <script>MigXmlHelper.GenerateUserPatterns ("File","%USERPROFILE%\* [*.doc]", "FALSE")</script>

  • <script> が <objectSet> 内にある場合は、<script> の関数 を使うことができます。

    構文: <script>MigXmlHelper.GenerateDrivePatterns("PatternSegment","DriveType")</script>

    例: <script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script>

  • <script> 要素が <processing> 要素内にある場合は、<script> の関数 (AskForLogoff、ConvertToShortFileName、KillExplorer、RemoveEmptyDirectories、RestartExplorer、RegisterFonts、StartService、StopService、SyncSCM) を使うことができます。

    構文: <script>MigXmlHelper.ExecutingScript</script>

    例: <script>MigXmlHelper.KillExplorer()</script>

設定 必須かどうか

ScriptWithArguments

必須

スクリプトと、任意の数の文字列引数 (かっこで囲み、コンマで区切ります)。たとえば、, MyScripts.AScript ("Arg1","Arg2"). のように指定します。

スクリプトは、<include> 規則内のオブジェクトのセットによって列挙されるオブジェクトごとに呼び出されます。フィルター スクリプトは、ブール値を返します。戻り値が TRUE の場合、オブジェクトは移行されます。FALSE の場合は、移行されません。

<script> が必要とする戻り値は、親要素によって異なります。

  • <variable> 内で使われる場合、戻り値は文字列である必要があります。

  • <objectSet> 内で使われる場合、戻り値は文字列の 2 次元配列である必要があります。

  • <location> 内で使われる場合、戻り値は <location> の type 属性に合った有効な場所である必要があります。たとえば、<location type="File"> の場合、指定される子 script 要素は、有効なファイルの場所である必要があります。

    > [!NOTE] > ファイル名に角かっこ ([ または ]) が含まれているファイルを移行している場合は、角かっこを有効にするために、角かっこの直前にキャレット (^) 文字を挿入してください。たとえば、ファイル名が "file].txt" の場合、<pattern type="File">c:\documents\mydocs [file].txt]</pattern> ではなく <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> と指定します。 >

例:

移行元コンピューター上の任意のドライブの Sample.doc ファイルを移行するには、次のように <script> を使います。同じ名前のファイルが複数ある場合は、それらのファイルがすべて移行されます。

<script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script> 

この要素の使い方のその他の例については、「ファイルと設定の除外」、「ファイルと設定の経路を変更する」、「ファイルと設定の経路を変更する」、「カスタム XML の例」をご覧ください。

<script> の関数

<script> 要素では、以下の関数を使うことができます。

  • 文字列とパターンの生成関数

  • 単純実行スクリプト

文字列とパターンの生成関数

これらの関数は、文字列かパターンを返します。

  • GetStringContent

    <variable> 要素内にある <script> 要素では、GetStringContent を使うことができます。可能な場合は、この関数は対象のオブジェクトの文字列表現を返します。そうでない場合は、NULL を返します。ファイル オブジェクトの場合、この関数は常に NULL を返します。

    構文: GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")

    設定 必須かどうか

    ObjectType

    必須

    オブジェクトの種類。Registry または Ini (.ini ファイルの場合) を指定します。

    EncodedLocationPattern

    必須

    • オブジェクトの種類が Registry の場合、EncodedLocationPattern は有効なレジストリ パスである必要があります。たとえば、HKLM\SOFTWARE\MyKey[] のように指定します。

    • オブジェクトの種類が Ini の場合、EncodedLocationPattern は次の形式である必要があります。

      IniFilePath|SectionName[SettingName]

    ExpandContent

    省略可能 (既定値 = TRUE)

    TRUE または FALSE を指定できます。FALSE の場合、指定された場所は戻される前に展開されません。

    例:

    <variable name="MSNMessengerInstPath">
    <script>MigXmlHelper.GetStringContent("Registry","%HklmWowSoftware%\Microsoft\MSNMessenger [InstallationDirectory]")</script>
    </variable>
    
  • GenerateDrivePatterns

    GenerateDrivePatterns 関数は、使えるすべてのドライブを反復処理して、要求されたドライブの種類と一致するものを選びます。次に、選んだドライブと、PatternSegment の末尾の部分を連結して、エンコードされた完全なファイル パターンを作ります。たとえば、PatternSegmentPath [file.txt] で、DriveType が Fixed の場合、関数は C:\Path [file.txt] を生成し、C: 以外にも固定ドライブがある場合には、他のパターンも生成します。この関数では、環境変数は指定できません。<include>/<exclude> 内にある <objectSet> 内の <script> 要素で、GenerateDrivePatterns を使うことができます。

    構文: GenerateDrivePatterns("PatternSegment","DriveType")

    設定 必須かどうか

    PatternSegment

    必須

    エンコードされたパターンのサフィックス。これは、完全な場所の指定を作るために、"c:\" などのドライブ指定と連結されます。たとえば、"* [*.doc]" のように指定します。PatternSegment を環境変数にすることはできません。

    DriveType

    必須

    パターンを生成する対象のドライブの種類。次のいずれかを指定できます。

    • Fixed

    • CDROM

    • Removable

    • Remote

    この要素の例については、MigUser.xml ファイルの最後のコンポーネントをご覧ください。

  • GenerateUserPatterns

    この関数は、移行するすべてのユーザーを反復処理し (<ProcessCurrentUser> が FALSE の場合は現在処理中のユーザーを除く)、指定されたパターンを各ユーザーのコンテキストで展開します。たとえば、ユーザー A、B、C のプロファイルが C:\Documents and Settings にある場合、GenerateUserPattens('File','%userprofile% [*.doc]','TRUE') を呼び出すと、次の 3 つのパターンが生成されます。

    • "C:\Documents and Settings\A\* [*.doc]"

    • "C:\Documents and Settings\B\* [*.doc]"

    • "C:\Documents and Settings\C\* [*.doc]"

    構文: GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")

    設定 必須かどうか

    ObjectType

    必須

    オブジェクトの種類を定義します。File または Registry を指定できます。

    EncodedLocationPattern

    必須

    場所の指定。環境変数を使うことができます。

    ProcessCurrentUser

    必須

    TRUE または FALSE を指定できます。現在のユーザーに対してパターンを生成するかどうかを示します。

    例:

    USMT がユーザー A を処理しているときに GenerateUserPattens('File','%userprofile% [*.doc]','FALSE') が呼び出された場合、この関数はユーザー B と C のパターンだけを生成します。このヘルパー関数を使うと、複雑な規則を作ることができます。たとえば、すべての .doc ファイルを移行元コンピューターから移行する場合に、ユーザー X が移行されなければユーザー X のプロファイルの .doc ファイルは移行しないとします。

    次のコードは、このシナリオの例です。最初の <rules> 要素は、移行元コンピューター上のすべての .doc ファイルを、C:\Documents and Settings 内にあるものを除いて移行します。2 番目の <rules> 要素は、C:\Documents and Settings のすべての .doc ファイルを、他のユーザーのプロファイル内の .doc ファイルを除いて移行します。2 番目の <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

このヘルパー関数は、ドキュメント検索を起動して、システム内の移行できるすべてのファイルをスキャンします。スキャンの範囲を限定するために、System または User のコンテキストで起動できます。

設定 必須かどうか

ScanProgramFiles

省略可能 (既定値 = FALSE)

TRUE または FALSE を指定できます。ScanProgramFiles パラメーターは、ドキュメント検索が既知のアプリケーションの登録済みのファイル拡張子を収集するために Program Files ディレクトリをスキャンするかどうかを決めます。たとえば、これを TRUE に設定すると、.jpg が Photoshop に登録されたファイル拡張子である場合、Photoshop ディレクトリの .jpg ファイルが検出されて移行されます。

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>

単純実行スクリプト

以下のスクリプトは、戻り値がありません。<processing> 要素内にある <script> 要素では、以下のエラーを使うことができます。

  • AskForLogoff()。移行の最後にログオフすることをユーザーに求めるメッセージを表示します。次に例を示します。

         <processing when="apply-success">
              <script>MigXmlHelper.AskForLogoff()</script>
         </processing>
    
  • ConvertToShortFileName(RegistryEncodedLocation)RegistryEncodedLocation が既存のファイルの完全パスである場合、この関数はファイルを短いファイル名に変換し、レジストリ値を更新します。

  • KillExplorer()。現在のユーザーのコンテキストで 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 のサブキーです。オプションのパラメーターがある場合は、StartService API に渡されます。詳しくは、この Microsoft Web サイトをご覧ください。

  • StopService (ServiceName)ServiceName によって特定されるサービスを停止します。ServiceName は、対象のサービスのデータを保持する、HKLM\System\CurrentControlSet\Services のサブキーです。

  • **SyncSCM(ServiceShortName)。**レジストリ (HKLM\System\CurrentControlSet\Services\ServiceShortName [Start]) の Start 型の値を移行エンジンによる変更後に読み取り、新しい値でサービス コントロール マネージャー (SCM) を同期させます。

<text>

<text> 要素を使うと、いずれかの移行 .xml ファイル内にある任意の環境変数の値を設定できます。

  • 出現の回数: <variable> 要素ごとに 1 回。

  • 親要素: <variable>

  • 子要素: なし。

構文:

<text>NormalText</text>

設定

NormalText

通常のテキストとして解釈されます。

例:

<variable name="QuickTime5or6DataSys">
  <text>%CSIDL_COMMON_APPDATA%\QuickTime</text> 
</variable>

<unconditionalExclude>

<unconditionalExclude> 要素は、移行 .xml ファイルや Config.xml ファイル内の他の <include> 規則にかかわらず、指定されたファイルとレジストリ値を移行から除外します。ここで宣言されたオブジェクトは、この要素が他のすべての規則よりも優先されるため、移行されません。たとえば、.mp3 ファイルを移行対象に含めるという明示的な <include> 規則があっても、このオプションで除外するように指定すると、それらのファイルは移行されません。

移行元コンピューターのすべての .mp3 ファイルを除外する場合に、この要素を使います。また、別の方法で C:\UserData をバックアップする場合に、フォルダー全体を移行対象から除外することができます。除外したファイルを必要とするアプリケーションがある場合は、移行先コンピューターでそのアプリケーションが適切に機能しなくなる可能性があるため、この要素を使う場合は注意してください。

  • 出現の回数: 無制限。

  • 親要素: <rules>

  • 子要素: <objectSet>

構文:

<unconditionalExclude></unconditionalExclude>

次の .xml ファイルは、すべての .mp3 ファイルを移行から除外します。この要素の使い方のその他の例については、「ファイルと設定の除外」をご覧ください。

<migration urlid="https://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>

<variable>

<variable> 要素は、<environment> 要素で必要です。1 つの <variable> 要素には、<objectSet> 要素、<script> 要素、または <text> 要素が 1 つのみ含まれている必要があります。<variable> 要素の内容によって、環境変数にテキスト値が割り当てられます。この要素には、次の 3 つのオプションがあります。

  1. <variable> 要素に <text> 要素が含まれている場合、<variable> 要素の値は <text> 要素の値になります。

  2. <variable> 要素に <script> 要素が含まれていて、スクリプトの呼び出しが null でない文字列を生成する場合、<variable> 要素の値はスクリプト呼び出しの結果になります。

  3. <variable> 要素に <objectSet> 要素が含まれていて、<objectSet> 要素の評価が少なくとも 1 つのオブジェクト パターンを生成する場合、結果のオブジェクト パターンに最初に一致したオブジェクトの値が <variable> 要素の値になります。

  • 出現の回数: 無制限

  • 親要素: <environment>

  • 必須の子要素: <text>、<script>、<objectSet> のいずれか

構文:

<variable name="ID" remap=TRUE|FALSE>

</variable>

設定 必須かどうか

name

必須

ID は、環境変数を参照するために使われる名前の文字列値です。名前空間の競合を避けるために、ID をコンポーネントの名前で始めることをお勧めします。たとえば、コンポーネントの名前が MyComponent で、コンポーネントのインストール パスの変数が必要な場合は、MyComponent.InstallPath という名前を指定します。

remap

省略可能、既定値 = 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> 要素は、コンポーネントのバージョンを定義しますが、移行には影響しません。

  • 出現の回数: 0 または 1 回

  • 親要素: <component>

  • 子要素: なし

構文:

<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"

関連項目

他のリソース

USMT XML リファレンス