衝突和優先順序
包含、排除及重新路由檔案和設定時,請務必瞭解用戶狀態移轉工具 (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 檔案中,產生的行為都相同。
包含和排除檔案
如果下列程式代碼存在於相同的元件中 | 產生的行為 | 說明 |
---|---|---|
|
移轉 Dir1 中的所有檔案和子資料夾 (包括 C: ) 中的所有.txt檔案。 | 排除<>規則不會影響移轉,<因為 include> 規則更明確。 |
|
移轉 C:\Dir1 中的所有檔案和子資料夾,但 C:\Dir1\Dir2 及其子資料夾中的 .txt 檔案除外。 | 這兩個規則都會如預期般處理。 |
|
移轉 C:\Dir1 中的所有檔案和子資料夾,但 C:\Dir1 及其子資料夾中的 .txt 檔案除外。 | 這兩個規則都會如預期般處理。 |
|
不會移轉任何專案。 | 規則同樣特定,因此 <排除> 規則的優先順序高於 <include> 規則。 |
|
從 Dir2 以外的 子資料夾 移轉 Dir1 中的.txt檔案和 .txt 檔案。 不會從 Dir2 或其子資料夾移轉任何檔案。 |
這兩個規則都會如預期般處理。 |
|
移轉 Dir2 的所有檔案和子資料夾,但 Dir1 的 .txt 檔案和 Dir1 的任何子資料夾除外 (包括 Dir2) 。 | 這兩個規則都會如預期般處理。 |
如果下列程式代碼存在於不同的元件中 | 產生的行為 | 說明 |
---|---|---|
元件 1:
元件 2:
|
移轉 C:\Dir1\ (的所有檔案和子資料夾,包括 C:\Dir1\Dir2) 。 | 不同元件中的規則不會互相影響,但無條件的Exclude> 規則除外<。 因此,在此範例中,雖然在處理元件 1 時已排除某些 .txt 檔案,但在處理元件 2 時會包含這些檔案。 |
元件 1:
元件 2:
|
從 Dir2 移轉所有檔案和子資料夾,但 C:\Dir1 及其子資料夾中的 .txt 檔案除外。 | 這兩個規則都會如預期般處理。 |
元件 1:
元件 2:
|
移轉 Dir1 和任何子資料夾中的所有 .txt 檔案。 | 元件 1 不包含 include<> 規則,因此<不會處理排除>規則。 |
包含和排除登錄物件
如果下列程式代碼存在於相同的元件中 | 產生的行為 | 說明 |
---|---|---|
|
移轉 HKLM\Software\Microsoft\Command Processor 中的所有密鑰,DefaultColor 除外。 | 這兩個規則都會如預期般處理。 |
|
僅移轉 HKLM\Software\Microsoft\Command Processor 中的 DefaultColor。 | DefaultColor 會移轉, <因為 include> 規則比 <排除> 規則更明確。 |
|
不會移轉 DefaultColor。 | 規則同樣特定,因此 <排除> 規則的優先順序高於 <include> 規則。 |
如果下列程式代碼存在於不同的元件中 | 產生的行為 | 說明 |
---|---|---|
元件 1:
元件 2:
|
移轉 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
不會還原。