Windows 域控制器上的分散式鏈接追蹤

本文說明如何使用 Windows 中的分散式連結追蹤服務,追蹤在NTFS格式化磁碟區和伺服器之間建立和行動連結的檔案。

適用:Windows Server 2012 R2
原始 KB 編號: 312403

您可以使用分散式連結追蹤伺服器服務和分散式連結追蹤用戶端服務,追蹤NTFS格式數據分割上檔案的連結。 分散式鏈接追蹤會追蹤連線到NTFS磁碟區上檔案的案例連結,例如殼層快捷方式和 OLE 連結。 如果該檔案已重新命名、移至同一部計算機上的另一個磁碟區、移至另一部計算機,或在其他類似的案例中移動,Windows 會使用分散式鏈接追蹤來尋找檔案。 當您存取已移動的連結時,分散式鏈接追蹤會找出連結;您不知道檔案已移動,或使用分散式連結追蹤來尋找移動的檔案。

分散式連結追蹤是由客戶端服務和伺服器服務所組成。 分散式連結追蹤伺服器服務會在 Windows Server 型域控制器上以獨佔方式執行。 它會將資訊儲存在Active Directory中,並提供服務來協助分散式連結追蹤客戶端服務。 分散式連結追蹤用戶端服務會在所有 Windows 2000 型和 Microsoft Windows XP 型電腦上執行,包括工作組環境中的電腦或不在工作組中的計算機。 它提供與分散式連結追蹤伺服器的唯一互動。

分散式連結追蹤客戶端偶爾會提供分散式連結追蹤伺服器服務與檔案連結的相關信息,分散式連結追蹤伺服器服務會儲存在 Active Directory 中。 當無法解析殼層快捷方式或 OLE 連結時,分散式連結追蹤用戶端也可以查詢分散式連結追蹤伺服器服務以取得該資訊。 分散式連結追蹤用戶端會提示分散式連結追蹤伺服器每隔 30 天更新連結一次。 分散式連結追蹤伺服器服務會清除90天內尚未更新的物件

當鏈接參考的檔案移至相同計算機上或不同計算機) 上的另一個磁碟區 (時,分散式鏈接追蹤用戶端會通知分散式鏈接追蹤伺服器,該伺服器會在 Active Directory 中建立 linkTrackOMTEntry 物件。 系統會在 Active Directory 中為網域中的每個 NTFS 磁碟區建立 linkTrackVolEntry 物件。

注意事項

在 Windows Server 2008 和更新版本中,分散式鏈接追蹤伺服器服務不再包含在 Windows 中。 因此,您可以安全地從 Active Directory 移除物件。

分散式連結追蹤物件會復寫到裝載計算機帳戶的網域中的所有域控制器,以及樹系中的所有全域編錄伺服器。 分散式連結追蹤伺服器服務會在下列辨別名稱路徑中建立物件:

CN=FileLinks,CN=System,DC= Active Directory 的 域名 容器

分散式鏈接追蹤物件存在於 CN=FileLinks,CN=System 資料夾下的下列兩個數據表中:

  • CN=ObjectMoveTable,CN=FileLinks,CN=System,DC= 域名

此物件會儲存已在網域中移動之連結檔案的相關信息。

  • CN=VolumeTable,CN=FileLinks,CN=System,DC= 域名

    此物件會儲存網域中每個NTFS磁碟區的相關信息。

分散式鏈接追蹤物件個別耗用的空間很少,但是當允許在一段時間內累積時,它們可能會耗用 Active Directory 中的大量空間。

如果您停用分散式連結追蹤,並從 Active Directory 刪除分散式連結追蹤物件,可能會發生下列行為:

  • Active Directory 資料庫大小可能會減少, (在物件遭到標記和垃圾收集之後,以及在您執行脫機重組程序之後,) 發生此行為。
  • 域控制器之間的復寫流量可能會減少。

在 Windows 2000、Windows XP 和 Windows Server 2003 中,分散式鏈接追蹤用戶端服務的開始值會設定為 [自動]。 根據預設,在 Windows 2000 型伺服器上,分散式連結追蹤伺服器服務會以手動方式啟動。 不過,如果您使用 Dcpromo.exe 將伺服器升級至網域,分散式連結追蹤伺服器服務會設定為自動啟動。

針對 Windows Server 2003 型伺服器,預設會停用分散式鏈接追蹤伺服器服務。 當您使用 Dcpromo.exe 將伺服器升級至網域時,分散式連結追蹤伺服器服務不會設定為自動啟動。 當 Windows 2000 型域控制器升級至 Windows Server 2003 時,在升級期間也會停用分散式鏈接追蹤伺服器服務。 如果您是系統管理員,而且想要使用分散式連結追蹤伺服器服務,則必須使用 群組原則,或是必須手動設定服務自動啟動。 此外,執行 Windows Server 2003 或 Windows XP SP1 之電腦上的分散式連結追蹤用戶端服務預設不會嘗試使用分散式連結追蹤伺服器服務。 如果您想要將這些電腦設定為利用分散式連結追蹤伺服器服務,請啟用 [允許分散式鏈接追蹤用戶端使用網域資源] 原則設定。 若要這樣做,請在 群組原則 中開啟 [計算機設定/系統管理範本/系統] 節點。

Microsoft 建議您使用下列設定搭配 Windows 2000 伺服器上的分散式連結追蹤:

  1. 關閉所有域控制器上的分散式連結追蹤伺服器服務 (這是所有 Windows Server 2003 型伺服器) 的預設設定。

    由於復寫額外負荷和 FileLinks 數據表在 Active Directory 中使用的空間,Microsoft 建議您關閉 Active Directory 域控制器上的分散式連結追蹤伺服器服務。 若要停止服務,請使用下列任何方法:

    • 在 Services 嵌入式管理單元 (Services.msc 或 compmgmt.msc) 中,按兩下 Distributed Link Tracking Server 服務,然後在 [啟動類型] 方塊中按兩下 [停用]。

    • 在組策略的 [計算機設定/Windows 設定/系統服務] 節點中定義 [啟動] 值。

    • 在裝載所有 Windows 2000 域控制器的組織單位上定義原則設定。

    在復寫原則之後重新啟動域控制器,以便套用原則。 如果您未重新啟動域控制器,就必須手動停止每個域控制器上的服務。

  2. 從 Active Directory 域控制器刪除分散式連結追蹤物件。

    如需如何刪除分散式連結追蹤對象的詳細資訊,請參閱本文的一節。 建議您在停用分散式連結追蹤伺服器服務之後刪除物件。

    注意事項

    在完成下列動作之前,域控制器上的目錄資訊樹 (DIT) 大小不會減少。

    1. 物件會從目錄服務中刪除。

      注意事項

      刪除的物件會儲存在 Deleted Objects 容器中,直到標記存留期到期為止。 標記存留期的預設值為 60 天。 最小值為兩天。 根據預設,與 Windows Server 2003 Service Pack 1 或更新版本 Windows Server 2003 一起安裝的新樹系值為 180 天。

      除非您有強式 Active Directory 複寫監視,否則建議您使用 180 天的值。 請勿降低此值以處理 DIT 大小問題。 如果您有資料庫大小的問題,請連絡 Microsoft 客戶支援服務。

    2. 垃圾收集已執行到完成。

    3. 您可以使用 Ntdsutil.exe 在 Dsrepair 模式中重組 Ntds.dit 檔案。

除非您必須儘快回收這些物件所耗用的磁碟空間,否則停止分散式連結追蹤伺服器服務之後,手動刪除分散式連結追蹤物件並不重要。 分散式連結追蹤用戶端會提示分散式連結追蹤伺服器每隔 30 天更新連結一次。 分散式連結追蹤伺服器服務會清除90天內尚未更新的物件。

當您執行 Dltpurge.vbs VBScript 時,分散式連結追蹤伺服器服務所使用的所有 Active Directory 物件都會從腳本執行所在的網域中刪除。 您必須在樹系中每個網域的一個域控制器上執行腳本。 若要執行 Dltpurge.vbs:

  1. 從 Microsoft 產品支援取得 Dltpurge.vbs 腳本。

  2. 在網域中以 Dltpurge.vbs 為目標的所有域控制器上停止分散式連結追蹤伺服器服務。

  3. 使用系統管理員許可權登入域控制器的控制台,或是網域中 Dltpurge.vbs 的目標成員計算機。

  4. 使用下列語法從命令列執行 Dltpurge.vbs:

    cscript dltpurge.vbs -s myserver -d dc=mydomain,dc=mycompany,dc=com  
    

    在此命令列中:

    • -s 是您要刪除分散式鏈接追蹤物件之域控制器的 DNS 主機名。
    • -d 是您要刪除分散式鏈接追蹤物件之網域的辨別名稱路徑。
  5. 在物件遭到標記和垃圾收集之後,執行 Ntds.dit 檔案的離線重組程式。 如需垃圾收集程式的詳細資訊,請按下列文章編號以檢視 Microsoft 知識庫中的文章:

    198793 Active Directory 資料庫垃圾收集程式

範例客戶體驗

本節所述的最差案例說明當您刪除大型生產網域中的大量分散式連結追蹤物件時,要考慮的一些問題。

Trey Research 是虛構的Ious 500 客戶,在全球擁有超過 40,000 名員工,會部署單一 Active Directory 樹系,其中包含具有子域的空白根域,可對應全球 (北美洲、亞洲、歐洲等主要地理區域) 。 樹系中最大的網域包含大約35,000個用戶帳戶和相同數目的電腦帳戶。

Ntds.dit 檔案放在 18 GB (GB) raid 陣列上。 自 Windows 2000 初始部署以來,全域編錄檔案已成長至 17 GB。

Trey Research 想要在未來 10 天內部署 Windows Server 2003,但在開始升級之前,資料庫分割區上至少需要 1.5 GB 的可用磁碟空間。 因為已知 Adprep.exe 會根據先前安裝的 Hotfix 和 Service Pack,新增三到五個繼承的 aces,所以需要這個磁碟空間。 下列條件會造成大型全域編錄大小或磁碟空間不足:

  • 條件 1:Trey Research 是 Windows 2000 的早期採用者,而從慣用硬體廠商收到的最大磁碟驅動器在 raid 陣列中設定時為 9 GB 或 18 GB。 目前的磁碟驅動器大小是成本的兩倍。

  • 條件 2:未在委派給樹系中每個網域的 Active Directory 整合式 DNS 區域上啟用 DNS 清除。

  • 條件3:允許網域使用者在網域中建立電腦帳戶。 系統管理員沒有週期性程式可識別和刪除孤立的電腦帳戶。

  • 條件 4:在一段時間內,安全描述符是由系統管理員、Service Pack 和 Hotfix 在根命名內容上定義, (NC) 頭 (cn=schema、cn=configuration、cn= 網域) ,以及在 Active Directory 中裝載數千個物件的其他容器。 此外,已在相同的分割區上啟用稽核。 當您在 Active Directory 中設定許可權並啟用物件稽核時,資料庫的大小會增加。 為 Windows Server 2003 型域控制器 (Adprep) 準備 Windows 2000 樹系和網域的工具也會新增繼承的 aces;因此,Trey Research 需要先釋放磁碟驅動器上的空間,才能升級網域。

  • 條件 5:Trey Research 並未定期在 Dsrepair 模式中執行 Ntds.dit 檔案的離線重組程式。

  • 條件 6:檢閱最大網域中的 CN=FileLinks、CN=System、DC= 功能變數名稱 容器時,會顯示超過 700,000 個分散式連結追蹤物件。 每個分散式連結追蹤物件上的安全描述符大約是 2 KB (KB) 。 每個條件都已評估其對 17 GB .dit 檔案的貢獻:

  • 條件 1:Trey Research 決定不部署新的磁碟驅動器,因為成本和執行此動作所需的時間。 此外,他們只需要暫時的磁碟空間,因為他們預期 Active Directory 資料庫會在升級至 Windows Server 2003 之後壓縮,而單一實例存放區 (SIS) 程式已完成, (SIS 會在 Active Directory 資料庫中實作更有效率的許可權儲存) 。

  • 條件 2 和 3:Trey Research 認為這些條件是最佳做法;不過,即使 Trey Research 實作它們,它們也不會達到所需的結果。 他們決定啟用 DNS 清除,因為它很容易實作。

  • 條件 4:Trey Research 發現,如果他們重新定義安全描述符和系統訪問控制清單, (SACL) ,它們會達到他們要尋找的結果,但是他們決定要實作此程式會相當耗時,直到他們可以徹底測試大小縮減、複寫額外負荷,而且最重要的是,在鏡像生產環境的實驗室案例中,程式/系統管理相容性。

    由於 Trey Research 已部署 Windows 2000 SP2 和一些 Hotfix,因此預期 Adprep (新增至網域 NC 中物件的累加繼承 aces) 可能小於 300 MB (MB) 。 他們可以在用來測試生產樹系升級的實驗室環境中驗證此行為。

  • 條件 5:Trey Research 發現如果他們執行離線重組程式,可能不會復原 Ntds.dit 檔案中的「空格符」。 事實上,Trey Research 系統管理員在完成離線重組程式之後,發現資料庫大小立即增加。 之所以發生此行為,是因為 Windows 2000 資料庫引擎效率不佳;此引擎已在 Windows Server 2003 中增強。

  • 條件 6:Trey Research 同意很明顯的動作是從樹系中每個網域的域控制器上,從 CN=FileLinks,CN=System,DC= 功能變數名稱 容器執行所有分散式鏈接追蹤物件的簡單大量刪除。 不過,他們發現如果這麼做,在對象被標記和垃圾收集之前,以及在該網域中的每個域控制器上完成離線重組程式之前,將不會釋放額外的磁碟空間。 雖然標記存留期值可以設定為低至兩天的值,但 Trey Research 樹系中的數個域控制器在等候硬體和軟體更新時已離線。 如果對象在進行端對端復寫之前遭到標記,則已刪除的物件可能會重新建立動畫,或在樹系中的全域編錄伺服器之間報告不一致的數據。 為了立即緩解,Trey Research 執行了下列程式:

  1. 他們移除了分散式連結追蹤架構類別對象的預設安全描述符,並將其取代為單一安全性主體 (用戶帳戶) 。
  2. 他們撰寫了 VBScript 程式來移除所有現有的安全描述符,然後將它們取代為單一安全性主體的明確 ace。
  3. 他們以 10,000 個單位的增量刪除分散式連結追蹤物件,每次刪除物件時都會延遲 3 小時。
  4. 在刪除所有分散式連結追蹤對象之後,他們會在網域中的每個域控制器上執行離線重組程式。 當 Trey Research 移除描述項並執行重組程式時,資料庫會在網域中的所有域控制器上復原大約 1.5 GB 的磁碟空間。 此空間量足以輕鬆執行 Adprep 工具,並將所有以 Windows 2000 為基礎的域控制器和全域編錄升級至 Windows Server 2003。

在 Trey Research 將作業系統升級至 Windows Server 2003 之後,當 Windows Server 2003 中的單一實例存放區功能將資料庫大小縮減為約 8 GB 時,會釋放更多磁碟空間 (您必須執行脫機重組程式,才能) 這些結果。 在 TSL 間隔過期之後,已復原更多空間,分散式連結追蹤物件會進行垃圾收集,並執行離線重組程式。

Trey Research 將以 Windows 2000 為基礎的新複本域控制器升級至網域,並將電腦帳戶放在與通常使用的不同組織單位中。 在兩天內,Windows 2000 型域控制器上會出現大約 8,000 個分散式鏈接追蹤物件。 Trey Research 會停止分散式鏈接追蹤,或建立原則來停止服務,然後將原則連結至裝載 Windows 2000 域控制器的組織單位。 最後,Trey Research 使用 Dltpurge.vbs 標示要刪除的其餘分散式連結追蹤物件。

DLT 對象刪除的結構

DLT 物件本身包含幾個屬性,而且在 Active Directory 中使用的空間很少。 當物件標示為刪除 (加上標記的) 時,會移除所有不必要的屬性,但追蹤物件直到從 Active Directory 清除為止所需的屬性除外。

在鏈接追蹤物件的案例中,標示要刪除的物件只會等於兩個要移除的屬性:dscorepropagationdata 和 objectcategory。 刪除這兩個屬性會導致初始節省34個字節。 不過,將鏈接追蹤物件標記為刪除的程式也會藉由新增IS_DELETED屬性 (4 個字節) ,以及管理 RDN 和「一般名稱」屬性,讓每個屬性增加約 80 個字節來更新物件。 此外,「復寫元數據」屬性也會增加約 50 個字節,以反映在此對象上執行的更新。 因此,藉由標示要刪除的鏈接追蹤物件,對象最終會成長約 200 個字節。 NTDS。在已刪除的物件已標記、已垃圾收集並執行離線重組之前,DIT 不會顯示大小減少。

注意事項

如果如本文所建議關閉服務,則不會發生自動清除。

Dltpurge.vbs 的文字版本

若要使用此文稿:

  1. 複製本文中 [開始複製這裡>] 標記和 <[在這裡結束複製>] 卷標之間的<所有文字,然後將文字貼到 ASCII 文本編輯器檔案 (例如 Microsoft 記事本檔案) 。
  2. 將檔案儲存為「Dltpurge.vbs」。 3 完成如何刪除分散式連結追蹤物件中所述的程式
<Start Copy Here>
'==============================================================================
'==============================================================================
'
' Copyright (C) 2001 by Microsoft Corporation.  All rights reserved.
'
' This script deletes all Active Directory objects used by the
' Distributed Link Tracking Server service.
'
' It is assumed that the DLT Server service has been disabled,
' and you wish to recover the DIT space these objects occupy.
'
' Usage:   cscript DltPurge.vbs <options>
' Options: -s ServerName
'          -d distinguishedname dc=mydomain,dc=mycompany,dc=com
'          -b BatchSize  BatchDelayMinutes
'          -t (optional test mode)
'
' The objects are deleted in batches - BatchSize objects are deleted,
' then there is a BatchDelayMinutes delay before the next batch.
'
'==============================================================================
'==============================================================================

Option Explicit

'
' Globals, also local to main.
'
Dim oProvider
Dim oTarget
Dim sServer
Dim sDomain
Dim bTest

Dim BatchSize
Dim BatchDelayMinutes

'
' Set defaults
'

BatchSize = 1000
BatchDelayMinutes = 15
bTest = False

'==============================================================================
'
'   ProcessArgs
'
'   Parse the command-line arguments.  Results are set in global variables
'   (oProvider, oTarget, sServer, sDomain, BatchSize, and BatchDelayMinutes).
'
'==============================================================================


public function ProcessArgs

    Dim iCount
    Dim oArgs

    on error resume next

    '
    ' Get the command-line arguments
    '
    
    Set oArgs = WScript.Arguments

    if oArgs.Count > 0 then

        '
        ' We have command-line arguments.  Loop through them.
        '

        iCount = 0
        ProcessArgs = 0

        do while iCount < oArgs.Count

            select case oArgs.Item(iCount)

                '
                ' Server name argument
                '
                
                case "-s"

                    if( iCount + 1 >= oArgs.Count ) then
                        Syntax
                        ProcessArgs = -1
                        exit do
                    end if

                    sServer = oArgs.Item(iCount+1)
                    if Len(sServer) > 0 then sServer = sServer & "/"
                    iCount = iCount + 2

                '
                ' Enable testing option
                '
                
                case "-t"

                    iCount = iCount + 1
                    bTest  = True

                '
                ' Domain name option
                '
                
                case "-d"

                    if( iCount + 1 >= oArgs.Count ) then
                        Syntax
                        ProcessArgs = -1
                        Exit Do
                    end if

                    sDomain = oArgs.Item(iCount+1)
                    iCount = iCount + 2

                '
                ' Batching option (batch size, batch delay)
                '

                case "-b"

                    if( iCount + 2 >= oArgs.Count ) then
                        Syntax
                        ProcessArgs = -1
                        exit do
                    end if

                    Err.Clear
                    
                    BatchSize = CInt( oArgs.Item(iCount+1) )
                    BatchDelayMinutes = CInt( oArgs.Item(iCount+2) )
                    
                    if( Err.Number <> 0 ) then 
                        wscript.echo "Invalid value for -b argument" & vbCrLf
                        Syntax
                        ProcessArgs = -1
                        exit do
                    end if
                    
                    iCount = iCount + 3

                '
                ' Help option
                '
                
                case "-?"
                    Syntax
                    ProcessArgs = -1
                    exit do

                '
                ' Invalid argument
                '
                
                case else
                
                    ' Display the syntax and return an error

                    wscript.echo "Unknown argument: " & oArgs.Item(iCount) & vbCrLf
                    Syntax
                    ProcessArgs = -1
                    Exit Do
                    
            end select
      loop

    else
    
        '
        ' There were no command-line arguments, display the syntax
        ' and return an error.
        '

        Syntax
        ProcessArgs = -1

    end if

    Set oArgs = Nothing

end function ' ProcessArgs

'==============================================================================
'
'   Syntax
'
'   Show the command-line syntax
'
'==============================================================================

public function Syntax

    wscript.echo    vbCrLf & _
                    "Purpose:   Delete Active Directory objects from Distributed Link Tracking" & vbCrLf & _
                    "           Server service (Assumes that DLT Server has been disabled" & vbCrLf & _
                    "           on all DCs)" & vbCrLf & _
                    vbCrLf & _
                    "Usage:     " & wscript.scriptname & " <arguments>" & vbCrLf & _
                    vbCrLf & _
                    "Arguments: -s Server" & vbCrLf & _
                    "           -d FullyQualifiedDomain" & vbCrLf & _
                    "           -b BatchSize BatchDelayMinutes (default to 1000 and 15)" & vbCrLf & _
                    "           -t (optional test mode, nothing is deleted)" & vbCrLf & _
                    vbCrLf & _
                    "Note:      Objects are deleted in batches, with a delay between each" & vbCrLf & _
                    "           batch.  The size of the batch defaults to 1000 objects, and" & vbCrLf & _
                    "           the length of the delay defaults to 15 minutes.  But these" & vbCrLf & _
                    "           values can be overridden using the -b option." & vbCrLf & _
                    vbCrLf & _
                    "Example:   " & wscript.scriptname & "  -s  myserver  -d distinguishedname dc=mydomain,dc=mycompany,dc=com "

end function    ' Syntax



'==============================================================================
'
'   PurgeContainer
'
'   Delete all objects of the specified class in the specified container.
'   This subroutine is called once for the volume table and once for
'   the object move table.
'
'==============================================================================

sub PurgeContainer(ByRef oParent, ByVal strClass)

    dim oChild
    dim iBatch
    dim iTotal

    On Error Resume Next

    iTotal = 0
    iBatch = 0

    ' Loop through the children of this container

    For Each oChild in oParent

        ' 
        ' Is this a DLT object?
        '

        
        if oChild.Class = strClass Then

            '
            ' Yes, this is a DLT object, it may be deleted
            '
            
            iTotal = iTotal + 1
            iBatch = iBatch + 1

            '
            ' Delete the object
            '
            
            if bTest then
                wscript.echo "Object that would be deleted: " & oChild.adspath
            else
                oParent.Delete oChild.Class, oChild.Name
            end if

            '
            ' If this is the end of a batch, delay to let replication
            ' catch up.
            '
            
            if iBatch = BatchSize then
            
                iBatch = 0
                
                wscript.stdout.writeline "" ' ignored by wscript
                wscript.echo "Deleted " & BatchSize & " objects"
                wscript.echo "Pausing to allow processing (will restart at " & DateAdd("n", BatchDelayMinutes, Time) & ")"
                
                wscript.sleep BatchDelayMinutes * 60 * 1000
                wscript.echo "Continuing ..."
                
            end if
            
        else
        
            ' oChild.Class didn't match strClass
            wscript.echo "Ignoring unexpected class: " & oChild.Class
            
        end if

        oChild = NULL

    Next


    wscript.echo "Deleted a total of " & iTotal & " objects"

end sub ' PurgeContainer


'==============================================================================
'
' Main
'
'==============================================================================

if (ProcessArgs=-1) then wscript.quit

on error resume next

'
' Explain what's about to happen
'

wscript.stdout.writeline "" ' ignored by wscript
wscript.echo "This script will purge all objects from the Active Directory" & vbCrLf & _
             "used by the Distributed Link Tracking Server service (trksvr)." & vbCrLf & _
             "It is assumed that this service has already been disabled on" & vbCrLf & _
             "all DCs in the domain."

'
' When running in cscript, pause to give an opportunity to break out
' (These 3 lines are for cscript and ignored by wscript.)
'

wscript.stdout.writeline ""
wscript.stdout.writeline "Press Enter to continue ..."
wscript.stdin.readline

'
' Get an ADSI object
'

Set oProvider = GetObject("LDAP:")

'
' Purge the System/FileLinks/ObjectMoveTable
'

wscript.stdout.writeline "" ' ignored by wscript
wscript.echo "Purging ObjectMoveTable"

Set oTarget = oProvider.OpenDSObject( "LDAP://" & sServer  & "cn=ObjectMoveTable,CN=FileLinks,CN=System," & sDomain ,_
                                      vbNullString, vbNullString, _
                                      1) ' ADS_SECURE_AUTHENTICATION

call PurgeContainer( oTarget, "linkTrackOMTEntry" )
oTarget = NULL

'
' Purge the System/FileLinks/VolumeTable
'

wscript.stdout.writeline "" ' ignored by wscript
wscript.echo "Purging VolumeTable"

Set oTarget = oProvider.OpenDSObject("LDAP://" & sServer  & "cn=VolumeTable,CN=FileLinks,CN=System," & sDomain  ,_
                                     vbNullString, vbNullString, _
                                     1) ' ADS_SECURE_AUTHENTICATION
call PurgeContainer( oTarget, "linkTrackVolEntry" )
oTarget = NULL

oProvider = NULL
<END Copy Here>