共用方式為


衝突和優先順序

包含、排除及重新路由檔案和設定時,請務必瞭解用戶狀態移轉工具 (USMT) 如何處理衝突和優先順序。 以下是使用 USMT 時要牢記的最重要衝突和優先順序指導方針。

  • 如果元件內有衝突的規則,則會套用最特定的規則。 不過,無<條件排除>規則是例外狀況,因為它的優先順序高於所有其他規則。 目錄名稱的優先順序高於擴展名。 如需範例,請參閱有衝突的<包含>和<排除>規則時會發生什麼情況?以及本文稍後包含和<排除>規則優先順序範例中<>的第一個範例。

  • 根據特定性,只有相同元件內的規則可以彼此影響。 不同元件中的規則不會互相影響,但無條件的Exclude> 規則除外<

  • 如果規則同樣特定, <則排除> 優先於 <include>。 例如,如果 <使用排除> 規則來排除檔案,並使用 <include> 規則來包含相同的檔案,則會排除檔案。

  • 元件的排序並不重要。 列出哪些元件 .xml 檔案並不重要,因為每個元件會獨立處理所有 .xml 檔案中的其他元件。

  • 元件內包含<>和<排除>規則的順序並不重要。

  • 無 <條件Exclude> 元素可用來全域排除數據。 不論 .xml檔案中的任何其他 <include> 規則為何,這個專案都會排除 物件。 例如,無 <條件Exclude> 元素可用來排除計算機上的所有MP3檔案,或從 C:\UserData中排除所有檔案。

一般

位於不同元件內的規則之間有何關聯性?

只有相同元件內的規則可以根據特定性彼此影響,但無條件的排除>規則除外<。 不同元件中的規則不會互相影響。 如果一個元件中有 include 規則,而另一個元件中有相同的<排除>規則,則會移轉數據,因為這兩個<>規則彼此獨立。

如果包含<>規則位於一個元件中,而locationModify>規則位於相同檔案的另一個<元件中,則會在這兩個位置移轉檔案。 也就是說,檔案會根據 <include> 規則包含,而檔案會根據 <locationModify> 規則進行移轉。

下列 .xml 檔案會從 C:\Userdocs 移轉所有檔案,包括 .mp3 檔案,因為 <排除> 規則是在個別元件中指定。

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/UserDocs">
<component type="Documents" context="System">
<displayName>User Documents</displayName>
        <role role="Data">
            <rules>
                <exclude>
                    <objectSet>
                        <pattern type="File">C:\Userdocs\* [*.mp3]</pattern>
                    </objectSet>
                </exclude>
          </rules>
        </role>
</component>

<component type="Documents" context="System">
<displayName> User documents to include </displayName>
        <role role="Data">
            <rules>
                <include>
                    <objectSet>
                        <pattern type="File"> C:\Userdocs\ [*]</pattern>
                    </objectSet>
                </include>
          </rules>
        </role>
</component>
</migration>

優先順序如何與 Config.xml 檔案搭配運作?

migrate="no"在檔案中Config.xml指定 與從移轉檔案中刪除對應的元件 .xml 相同。 不過,如果migrate="no"已針對 Documents 檔夾設定,但移轉 .xml 檔案 (中存在類似下列規則的規則,其中包含 Documents 資料夾) 的所有 .doc 檔案,則只會移轉 .doc 檔案,並排除所有其他檔案:

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

USMT 如何處理具有多個元件的 .xml 檔案中的每個元件?

元件的排序並不重要。 每個元件會獨立處理其他元件。 例如,如果 include> 規則位於一個<元件中,而locationModify>規則位於相同檔案的另一個<元件中,則會在這兩個位置移轉檔案。 也就是說,檔案會根據 <include> 規則包含,而檔案會根據 <locationModify> 規則進行移轉。

規則的處理方式為何?

規則有兩種廣泛的類別。

  • 會影響 ScanState 和 LoadState 工具行為的規則。 例如,會<>針對.xml 檔案中的每個元件處理 include、<exclude><無條件的Exclude> 規則。 針對每個元件,USMT 會建立包含清單和排除清單。 元件中的某些規則可能會因為特定性而捨棄,但會處理其餘所有規則。 針對每個 <包含> 規則,USMT 會逐一查看元素,以查看是否需要排除任何位置。 USMT 會列舉所有物件,並建立要為每個使用者收集的物件清單。 清單完成後,每個物件都會儲存或移轉至目的地計算機。

  • 只影響 LoadState 工具行為的規則。 例如, <locationModify><contentModify><destinationCleanup> 規則不會影響 ScanState。 它們只會使用LoadState處理。 首先,LoadState 工具會根據<locationModify和 contentModify>>規則來決定每個元件的內容和<位置。 然後, LoadState 會處理所有 <destinationCleanup> 規則,並從目的地計算機刪除數據。 最後, LoadState 會 將元件套用至計算機。

USMT 如何結合我在命令行上指定的所有 .xml 檔案?

USMT 不會根據檔案的名稱或內容來區分 .xml 檔案。 它會個別處理檔案內的每個元件。 USMT 僅支援多個 .xml 檔案,以便更輕鬆地維護和組織其中的元件。 由於 USMT 使用 urlid 來區別每個元件與其他元件,因此請確定命令行上指定的每個 .xml 檔案都有唯一的移轉 urlid。

>包含<和<排除>規則

當有衝突的 <包含> 和 <排除> 規則時,會發生什麼事?

如果元件內有衝突的規則,則會套用最特定的規則,但無條件>排除規則除外<,該規則的優先順序高於所有其他規則。 如果規則同樣特定,則不會移轉數據。 例如,如果同時排除並包含相同的檔案,則不會移轉檔案。 如果不同元件內有衝突的規則,則規則不會互相影響,因為每個元件都會獨立處理。

在下列範例中,不會從移轉中排除 mp3 檔案。 不會排除 mp3 檔案,因為目錄名稱優先於擴展名。

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

<包含> 和 <排除> 規則優先順序範例

這些範例說明 USMT 如何處理 <包含><排除> 規則。 當規則位於不同的元件時,無論元件位於相同或不同的移轉 .xml 檔案中,產生的行為都相同。

包含和排除檔案

如果下列程式代碼存在於相同的元件中 產生的行為 說明
  • 包含規則: <模式類型=“檔案”>C:\Dir1* []</pattern>
  • 排除規則: <pattern type=“File”>C:* [.txt]</pattern>
移轉 Dir1 中的所有檔案和子資料夾 (包括 C: ) 中的所有.txt檔案。 排除<>規則不會影響移轉,<因為 include> 規則更明確。
  • 包含規則: <模式類型=“檔案”>C:\Dir1* []</pattern>
  • 排除規則: <pattern type=“File”>C:\Dir1\Dir2* [.txt]</pattern>
移轉 C:\Dir1 中的所有檔案和子資料夾,但 C:\Dir1\Dir2 及其子資料夾中的 .txt 檔案除外。 這兩個規則都會如預期般處理。
  • 包含規則: <模式類型=“檔案”>C:\Dir1* []</pattern>
  • 排除規則: <pattern type=“File”>C:\Dir1\ * [.txt]</pattern>
移轉 C:\Dir1 中的所有檔案和子資料夾,但 C:\Dir1 及其子資料夾中的 .txt 檔案除外。 這兩個規則都會如預期般處理。
  • 包含規則: <pattern type=“File”>C:\Dir1\Dir2* [.txt]</pattern>
  • 排除規則: <pattern type=“File”>C:\Dir1\Dir2* [.txt]</pattern>
不會移轉任何專案。 規則同樣特定,因此 <排除> 規則的優先順序高於 <include> 規則。
  • 包含規則:C:\Dir1* [.txt]
  • 排除規則:C:\Dir1\Dir2* []
從 Dir2 以外的 子資料夾 移轉 Dir1 中的.txt檔案和 .txt 檔案。
不會從 Dir2 或其子資料夾移轉任何檔案。
這兩個規則都會如預期般處理。
  • 包含規則:C:\Dir1\Dir2* []
  • 排除規則:C:\Dir1* [.txt]
移轉 Dir2 的所有檔案和子資料夾,但 Dir1 的 .txt 檔案和 Dir1 的任何子資料夾除外 (包括 Dir2) 。 這兩個規則都會如預期般處理。
如果下列程式代碼存在於不同的元件中 產生的行為 說明
元件 1:
  • 包含規則: <模式類型=“檔案”>C:\Dir1* []</pattern>
  • 排除規則: <pattern type=“File”>C:\Dir1\Dir2* [.txt]</pattern>

元件 2:
  • 包含規則: <pattern type=“File”>C:\Dir1\Dir2* [.txt]</pattern>
  • 排除規則: <pattern type=“File”>C:\Dir1* []</pattern>
移轉 C:\Dir1\ (的所有檔案和子資料夾,包括 C:\Dir1\Dir2) 。 不同元件中的規則不會互相影響,但無條件的Exclude> 規則除外<。 因此,在此範例中,雖然在處理元件 1 時已排除某些 .txt 檔案,但在處理元件 2 時會包含這些檔案。
元件 1:
  • 包含規則:C:\Dir1\Dir2* []

元件 2:
  • 排除規則:C:\Dir1* [.txt]
從 Dir2 移轉所有檔案和子資料夾,但 C:\Dir1 及其子資料夾中的 .txt 檔案除外。 這兩個規則都會如預期般處理。
元件 1:
  • 排除規則:C:\Dir1\Dir2* []

元件 2:
  • 包含規則:C:\Dir1* [.txt]
移轉 Dir1 和任何子資料夾中的所有 .txt 檔案。 元件 1 不包含 include<> 規則,因此<不會處理排除>規則。

包含和排除登錄物件

如果下列程式代碼存在於相同的元件中 產生的行為 說明
  • 包含規則:
    HKLM\Software\Microsoft\Command Processor* []
  • 排除規則:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
移轉 HKLM\Software\Microsoft\Command Processor 中的所有密鑰,DefaultColor 除外。 這兩個規則都會如預期般處理。
  • 包含規則:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • 排除規則:
    HKLM\Software\Microsoft\Command Processor* []
僅移轉 HKLM\Software\Microsoft\Command Processor 中的 DefaultColor。 DefaultColor 會移轉, <因為 include> 規則比 <排除> 規則更明確。
  • 包含規則:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • 排除規則:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
不會移轉 DefaultColor。 規則同樣特定,因此 <排除> 規則的優先順序高於 <include> 規則。
如果下列程式代碼存在於不同的元件中 產生的行為 說明
元件 1:
  • 包含規則:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
  • 排除規則:
    HKLM\Software\Microsoft\Command Processor* []

元件 2:
  • 包含規則:
    HKLM\Software\Microsoft\Command Processor* []
  • 排除規則:
    HKLM\Software\Microsoft\Command Processor [DefaultColor]
移轉 HKLM\Software\Microsoft\Command Processor 下的所有索引鍵/值。 不同元件中的規則不會互相影響,但無條件的Exclude> 規則除外<。 在此範例中,處理元件 2 時,會包含處理元件 1 時所排除的物件。

檔案衝突

發生檔案衝突時的預設行為為何?

<如果沒有合併>規則,登錄的預設行為是讓來源覆寫目的地。 檔案的預設行為是以累加方式重新命名來源:例如,OriginalFileName (1) 。OriginalExtension、OriginalFileName (2) 。OriginalExtension 等等。

當檔案發生衝突時, <合併> 規則的運作方式為何?

偵測到衝突時,USMT 會選取最特定 <的合併> 規則,並套用它來解決衝突。 例如,如果將 C:\* [*]合併>規則設定為 sourcePriority () ,而 C:\subfolder\* [*] 的另一個合併規則設定為 destinationPriority () ,則 USMT 會使用 destinationPriority () 規則,因為它是最特定的。<<>

範例案例

來源電腦包含下列檔案:

  • C:\Data\SampleA.txt

  • C:\Data\SampleB.txt

  • C:\Data\Folder\SampleB.txt

目的地電腦包含下列檔案:

  • C:\Data\SampleB.txt

  • C:\Data\SampleB.txt

自訂 .xml 檔包含下列程式代碼:

<include> 
   <objectSet> 
      <pattern type="File">c:\data\* [*]</pattern> 
   </objectSet> 
</include> 

在此範例中,下列資訊描述將程式代碼新增至自定義 .xml 檔案時所產生的行為。

範例 1

<merge script="MigXmlHelper.DestinationPriority()">
        <objectSet>
                <pattern type="File">c:\data* []</pattern>
        </objectSet>
</merge>

結果:在 ScanState 期間,所有檔案都會新增至存放區。 在 LoadState 期間,只會 C:\Data\SampleA.txt 還原 。

範例 2

<merge script="MigXmlHelper.SourcePriority()">
        <objectSet>
                <pattern type="File">c:\data* []</pattern>
        </objectSet>
</merge>

結果:在 ScanState 期間,所有檔案都會新增至存放區。 在LoadState期間,會還原所有檔案,並覆寫目的地電腦上的現有檔案。

範例 3

<merge script="MigXmlHelper.SourcePriority()">
        <objectSet>
                <pattern type="File">c:\data\ [*]</pattern>
        </objectSet>
</merge>

結果:在 ScanState 期間,所有檔案都會新增至存放區。 在LoadState期間,會發生下列動作:

  • C:\Data\SampleA.txt 已還原。
  • C:\Data\SampleB.txt 會還原,覆寫目的地計算機上的現有檔案。
  • C:\Data\Folder\SampleB.txt 不會還原。

USMT XML 參考