共用方式為


Windows 型域控制器上的分散式連結追蹤

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

原始 KB 編號: 312403

您可以使用分散式連結追蹤伺服器服務和分散式連結追蹤客戶端服務來追蹤NTFS格式分割上檔案的連結。 分散式連結追蹤用於在連結至 NTFS 磁碟區上的檔案時追蹤連結,例如 Shell 捷徑與 OLE 連結。 如果該檔案被重新命名、移到同一台電腦上的另一個磁碟區、移到另一台電腦或其他類似情況,Windows 會使用分散式連結追蹤來尋找檔案。 當您存取已移動的連結時,分散式鏈接追蹤會找出連結;您不知道檔案已移動,或是使用分散式連結追蹤來尋找已移動的檔案。

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

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

當連結所參考的檔案移至另一個磁碟區時(在同一部計算機或不同計算機上),Distributed Link Tracking 用戶端會通知 Distributed Link Tracking 伺服器,這會在 Active Directory 中建立 linkTrackOMTEntry 物件。 linkTrackVolEntry 物件會在 Active Directory 中針對網域中的每個 NTFS 磁碟區建立。

注意

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

分散式連結追蹤物件會在裝載電腦帳戶的網域中的所有網域控制站以及樹系中所有全域編錄伺服器之間複寫。 Distributed Link Tracking Server 服務會在下列辨別名稱路徑中建立物件:

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 中累積一段時間時,它們可能會耗用大量的空間。

如果您停用 Distributed Link Tracking,並從 Active Directory 刪除 Distributed Link Tracking 物件,可能會發生下列行為:

  • 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.msc 或 compmgmt.msc)中,按兩下 [分散式連結追蹤伺服器] 服務,然後在 [啟動類型] 方塊中選取 [已停用]

    • 在組策略的 [計算機設定/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 檔案。

當您停止 Distributed Link Tracking 伺服器服務之後,手動刪除分散式連結追蹤物件並不重要,除非您必須儘快回收這些物件所耗用的磁碟空間。 分散式連結追蹤用戶端會每隔 30 天提示分散式連結追蹤伺服器更新連結。 Distributed Link Tracking Server 服務會清除 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 是一位虛構的財富 500 客戶,全球有超過 40,000 名員工,其部署了單一 Active Directory 樹系,其中包含一個空的根域,其子域對應著世界主要地理區域(北美洲、亞洲、歐洲等)。 樹系中最大的網域包含大約35,000個用戶帳戶和相同數目的電腦帳戶。

Ntds.dit 檔案放在 18 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= domain) 和其他容器上定義安全性描述元,這些容器裝載了數千個 Active Directory 中的物件。 此外,已在相同的分割區上啟用稽核。 當您在 Active Directory 中設定許可權並啟用物件稽核時,資料庫的大小會增加。 為 Windows Server 2003 型域控制器準備 Windows 2000 樹系和網域的工具(Adprep)也會新增繼承的存取控制項,因此,Trey Research 在升級網域之前,需要釋放磁碟驅動器上的空間。

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

  • 條件 6:當檢閱最大網域中的 CN=FileLinks、CN=System、DC= 功能變數名稱 容器時,會顯示超過 700,000 個分散式連結追蹤物件。 每個 Distributed Link Tracking 物件上的安全性描述元大約是 2 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 所新增的累加繼承存取控制項(ACEs)(位於網域 NC 的物件中)可能小於 300 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 單位增量刪除分散式連結追蹤物件,並在每個物件刪除之間延遲三小時。
  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>