衝突與優先順序
當您包含、排除和重新路由檔案及設定時,重要的是知道使用者狀態移轉工具 (USMT) 5.0 如何處理衝突與優先順序。使用 USMT 時,請記住下列的重要衝突與優先順序指導方針。
如果元件內的規則發生衝突,則會套用最特定的規則。<unconditionalExclude> 規則的優先順序高於其他規則,因此不在此限。 目錄名稱的優先順序高於副檔名。例如,請參閱<include> 和 <exclude> 規則衝突時會發生什麼事?以及本主題稍後的<include> 和 <exclude> 規則優先順序範例中的第一個範例。
**只有相同元件內的規則會互相影響 (根據特定性)。**不同元件中的規則並不會互相影響 (但不含 <unconditionalExclude> 規則)。
**如果規則的特定性相等,則 <exclude> 的優先順序高於 <include>。**例如,如果使用 <exclude> 規則來排除檔案,然後使用 <include> 規則來包含相同的檔案,則檔案會被排除。
**元件的順序不會有任何影響。**因為是個別處理所有 .xml 檔案中的每個元件,因此哪個元件列在哪個 .xml 檔案中並不會有任何影響。
元件內的 <include> 和 <exclude> 規則順序不會有任何影響。
**您可以使用 <unconditionalExclude> 元素全面性排除資料。**這個元素會排除物件,而不管 .xml 檔案中的其他任何 <include> 規則。例如,您可以使用 <unconditionalExclude> 元素來排除電腦上的所有 MP3 檔案,或者排除 C:\UserData 的所有檔案。
在本主題中
一般
位在不同元件內之規則的關係為何?
使用 Config.xml 檔案的優先順序為何?
USMT 如何處理含有多個元件之 .xml 檔案中的每個元件?
如何處理規則?
USMT 如何與所有在命令列上指定的 .xml 檔案搭配使用?
<include> 和 <exclude> 規則
<include> 和 <exclude> 規則衝突時會發生什麼事?
<include> 和 <exclude> 規則優先順序範例
檔案衝突
發生檔案衝突時的預設行為為何?
<merge> 規則在發生檔案衝突時如何運作?
一般
位在不同元件內之規則的關係為何?
只有相同元件內的規則會互相影響 (根據特定性),但不含 <unconditionalExclude> 規則。不同元件中的規則並不會互相影響。如果某個元件含有 <include> 規則,而另一個元件含有相同的 <exclude> 規則,因為兩個規則彼此無關,所以會移轉資料。
如果某個元件含有 <include> 規則,而相同檔案的另一個元件含有 <locationModify> 規則,則會在兩個位置移轉檔案。也就是說,會根據 <include> 規則予以包含,而根據 <locationModify> 規則進行移轉。
下列 .xml 檔案在個別元件中指定 <exclude> 規則,因此會移轉 C:\Userdocs 中的所有檔案 (含 .mp3 檔案)。
<migration urlid="https://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 檔案的優先順序為何?
在 Config.xml 檔案中指定 migrate="no"
,與從移轉 .xml 檔案中刪除對應元件的作用是相同的。不過,如果您針對 [我的文件] 設定 migrate="no"
,但是移轉 .xml 檔案含有與下面所示類似的規則 (包含 [我的文件] 中的所有 .doc 檔案),則只會移轉 .doc 檔案,而排除其他所有檔案。
<include>
<objectSet>
<pattern type="File">%CSIDL_PERSONAL%\* [*.doc] </pattern>
</objectSet>
</include>
USMT 如何處理含有多個元件之 .xml 檔案中的每個元件?
元件的順序不會有任何影響。每個元件都是個別予以處理。例如,如果某個元件含有 <include> 規則,而相同檔案的另一個元件含有 <locationModify> 規則,則會在兩個位置移轉檔案。也就是說,會根據 <include> 規則予以包含,而根據 <locationModify> 規則進行移轉。
如何處理規則?
規則有兩大類別:
影響 ScanState 和 LoadState 工具行為的規則。例如,會針對 .xml 檔案中的每個元件來處理 <include>、<exclude> 和 <unconditionalExclude> 規則。USMT 會針對每個元件建立包含清單和排除清單。元件中的某些規則可能會因特定性而予以捨棄,但是會處理其餘所有規則。USMT 會針對每個 <include> 規則逐一執行元素,以查看是否需要排除任何位置。USMT 會列舉所有物件,並建立要為每位使用者收集的物件清單。清單完成之後,每個物件就會存放或移轉至目的電腦。
只影響 LoadState 工具行為的規則。例如,<locationModify>、<contentModify> 和 <destinationCleanup> 規則不會影響 ScanState。只有使用 LoadState 才可以處理它們。首先,LoadState 工具會根據 <locationModify> 和 <contentModify> 規則判斷每個元件的內容和位置。接著,LoadState 會處理所有 <destinationCleanup> 規則,並刪除目的電腦中的資料。最後,LoadState 會將元件套用至電腦。
USMT 如何與所有在命令列上指定的 .xml 檔案搭配使用?
USMT 不會根據 .xml 檔案的名稱或內容來區分 .xml 檔案。它會分別處理檔案內的每個元件。USMT 支援具有多個 .xml 檔案的唯一理由,是為了簡化檔案內的元件維護和組織。因為 USMT 會使用這個 urlid 來區分每個元件,所以請確定在命令列中指定的每個 .xml 檔案只有一個移轉 urlid。
<include> 和 <exclude> 規則
<include> 和 <exclude> 規則衝突時會發生什麼事?
如果元件內的規則發生衝突,則會套用最特定的規則 (<unconditionalExclude> 的優先順序高於其他規則,因此不在此限)。如果規則的特定性相等,則不會移轉資料。例如,如果您排除某個檔案,又包含同一個檔案,則不會移轉檔案。如果不同元件內的規則發生衝突,則因為每個元件都是個別予以處理,所以規則彼此不會受到影響。
在下列範例中,移轉時不會排除 mp3 檔案。這是因為目錄名稱的優先順序高於副檔名。
<include>
<objectSet>
<pattern type="File">C:\Data\* [*]</pattern>
</objectSet>
</include>
<exclude>
<objectSet>
<pattern type="File"> C:\* [*.mp3]</pattern>
</objectSet>
</exclude>
<include> 和 <exclude> 規則優先順序範例
這些範例說明 USMT 如何處理 <include> 和 <exclude> 規則。如果規則位在不同元件中,則不論元件位在相同或不同的移轉 .xml 檔案中,產生的行為都會相同。
包含和排除檔案
包含和排除登錄物件
包含和排除檔案
如果您在相同元件中具有下列程式碼 | 產生的行為 | 說明 |
---|---|---|
|
移轉 Dir1 中的所有檔案和子資料夾 (含 C: 中的所有 .txt 檔案)。 |
因為 <include> 規則較特定,所以 <exclude> 規則不會影響移轉。 |
|
移轉 C:\Dir1 中的所有檔案和子資料夾 (不含 C:\Dir1\Dir2 及其子資料夾中的 .txt 檔案)。 |
這兩個規則都會如預期處理。 |
|
移轉 C:\Dir1 中的所有檔案和子資料夾 (不含 C:\Dir1 及其子資料夾中的 .txt 檔案)。 |
這兩個規則都會如預期處理。 |
|
不會移轉任何項目。 |
規則的特定性相同,因此 <exclude> 規則的優先順序高於 <include> 規則。 |
|
移轉 Dir1 中的 .txt 檔案,以及非 Dir2 子資料夾中的 .txt 檔案。 不會移轉 Dir2 或其子資料夾中的檔案。 |
這兩個規則都會如預期處理。 |
|
移轉 Dir2 的所有檔案和子資料夾 (不含 Dir1 及其任何子資料夾中的 .txt 檔案,Dir2 也是一樣)。 |
這兩個規則都會如預期處理。 |
如果您在不同元件中具有下列程式碼 | 產生的行為 | 說明 |
---|---|---|
元件 1:
元件 2:
|
移轉 C:\Dir1\ 的所有檔案和子資料夾 (含 C:\Dir1\Dir2\)。 |
不同元件中的規則並不會互相影響 (但不含 <unconditionalExclude> 規則)。因此,在這個範例中,雖然在處理元件 1 時排除某些 .txt 檔案,但是會在處理元件 2 時包含那些檔案。 |
元件 1:
元件 2:
|
移轉 Dir2 中的所有檔案和子資料夾 (不含 C:\Dir1 及其子資料夾中的 .txt 檔案)。 |
這兩個規則都會如預期處理。 |
元件 1:
元件 2:
|
移轉 Dir1 和任何子資料夾中的所有 .txt 檔案。 |
元件 1 未包含 <include> 規則,因此不會處理 <exclude> 規則。 |
包含和排除登錄物件
如果您在相同元件中具有下列程式碼 | 產生的行為 | 說明 |
---|---|---|
|
移轉 HKLM\Software\Microsoft\Command Processor 中的所有機碼,但不含 DefaultColor。 |
這兩個規則都會如預期處理。 |
|
只移轉 HKLM\Software\Microsoft\Command Processor 中的 DefaultColor。 |
因為 <include> 規則比 <exclude> 規則更特定,所以會移轉 DefaultColor。 |
|
不會移轉 DefaultColor。 |
規則的特定性相同,因此 <exclude> 規則的優先順序高於 <include> 規則。 |
如果您在不同元件中具有下列程式碼 | 產生的行為 | 說明 |
---|---|---|
元件 1:
元件 2:
|
移轉 HKLM\Software\Microsoft\Command Processor 下的所有機碼/值。 |
不同元件中的規則並不會互相影響 (但不含 <unconditionalExclude> 規則)。因此,在這個範例中,在處理元件 1 時排除的物件會在處理元件 2 時包含進來。 |
檔案衝突
發生檔案衝突時的預設行為為何?
如果沒有 <merge> 規則,則登錄的預設行為是來源會覆寫目的地。檔案的預設行為是以遞增方式重新命名來源:例如,OriginalFileName(1).OriginalExtension、OriginalFileName(2).OriginalExtension,以此類推。
<merge> 規則在發生檔案衝突時如何運作?
偵測到衝突時,USMT 會選取並套用最特定的 <merge> 規則,以解決衝突。例如,您有 C:\* [*] 設為 sourcePriority() 的 <merge> 規則,以及 C:\subfolder\* [*] 設為 destinationPriority() 的另一個 <merge> 規則,因為 destinationPriority() 規則最特定,所以 USMT 會使用 destinationPriority() 規則。
範例案例
來源電腦包含下列檔案:
C:\Data\SampleA.txt
C:\Data\SampleB.txt
C:\Data\Folder\SampleB.txt
目的電腦包含下列檔案:
C:\Data\SampleB.txt
C:\Data\Folder\SampleB.txt
您的自訂 .xml 檔案包含下列程式碼:
<include>
<objectSet>
<pattern type="File">c:\data\* [*]</pattern>
</objectSet>
</include>
在這個範例中,下表說明將第一欄中的程式碼新增至自訂 .xml 檔案時產生的行為。
如果指定下列程式碼 | 產生的行為 |
---|---|
|
在 ScanState 期間,所有檔案都會新增至存放區。 在 LoadState 期間,只會還原 C:\Data\SampleA.txt。 |
|
在 ScanState 期間,所有檔案都會新增至存放區。 在 LoadState 期間,會還原所有檔案 (覆寫目的電腦上的現有檔案)。 |
|
在 ScanState 期間,所有檔案都會新增至存放區。 在 LoadState 期間,會發生下列情況:
|