Verteilte Linkverfolgung auf Windows-basierten Domänencontrollern

In diesem Artikel wird beschrieben, wie Sie die Dienste für die Nachverfolgung verteilter Links in Windows verwenden können, um die Erstellung und Bewegung verknüpfter Dateien auf NTFS-formatierten Volumes und Servern nachverfolgt zu werden.

Ursprüngliche Produktversion:   Windows Server 2012 R2
Ursprüngliche KB-Nummer:   312403

Sie können den Dienst "Distributed Link Tracking Server" und den Clientdienst für die Nachverfolgung verteilter Verknüpfungen verwenden, um Links zu Dateien auf NTFS-formatierten Partitionen nachverfolgt zu werden. Die verteilte Linkverfolgung verfolgt Links in Szenarien nach, in denen der Link zu einer Datei auf einem NTFS-Volume erstellt wird, z. B. Shellverknüpfungen und OLE-Verknüpfungen. Wenn diese Datei umbenannt, auf ein anderes Volume auf demselben Computer verschoben, auf einen anderen Computer verschoben oder in anderen ähnlichen Szenarien verschoben wird, verwendet Windows die verteilte Linkverfolgung, um die Datei zu finden. Wenn Sie auf einen link zugreifen, der verschoben wurde, sucht die verteilte Linkverfolgung nach dem Link. Sie sind sich nicht bewusst, dass die Datei verschoben wurde oder dass die verteilte Linkverfolgung verwendet wird, um die verschobene Datei zu finden.

Die verteilte Linkverfolgung besteht aus einem Clientdienst und einem Serverdienst. Der Dienst für den verteilten Linkverfolgungsserver wird ausschließlich auf Windows Server-basierten Domänencontrollern ausgeführt. Es speichert Informationen in Active Directory und stellt Dienste zur Unterstützung des Verteilten Linkverfolgungsclientdiensts zur Verfügung. Der Verteilte Linkverfolgungsclientdienst wird auf allen Windows 2000- und Microsoft Windows XP-basierten Computern ausgeführt, auch auf Computern, die sich in Arbeitsgruppenumgebungen oder nicht in einer Arbeitsgruppe befinden. Sie bietet die einzige Interaktion mit Servern für die verteilte Linkverfolgung.

Clients für die verteilte Linkverfolgung stellen dem Dienst für die nachverfolgung verteilte Links gelegentlich Informationen zu Dateilinks zur Verfügung, die der Dienst für die Nachverfolgung von verteilten Links in Active Directory speichert. Clients für die verteilte Linkverfolgung können diese Informationen auch vom Dienst für die Verteilte Linkverfolgung abfragen, wenn eine Shellverknüpfung oder eine OLE-Verknüpfung nicht aufgelöst werden kann. Clients für die verteilte Linkverfolgung forderten den Server für die Nachverfolgung verteilter Links auf, links alle 30 Tage zu aktualisieren. Der Dienst "Verteilter Linkverfolgungsserver" behebt Objekte, die in 90 Tagen nicht aktualisiert wurden

Wenn eine Datei, auf die über einen Link verwiesen wird, auf ein anderes Volume verschoben wird (auf demselben Computer oder auf einem anderen Computer), benachrichtigt der Verteilte Linkverfolgungsclient den Verteilten Linkverfolgungsserver, der ein linkTrackOMTEntry-Objekt in Active Directory erstellt. Ein linkTrackVolEntry -Objekt wird in Active Directory für jedes VOLUME NTFS in der Domäne erstellt.

Hinweis

In Windows Server 2008 und neuer ist der Verteilte Linkverfolgungsserverdienst nicht mehr in Windows enthalten. Sie können die Objekte also sicher aus Active Directory entfernen.

Objekte der verteilten Linkverfolgung werden zwischen allen Domänencontrollern in der Domäne repliziert, die das Computerkonto hosten, und allen globalen Katalogservern in der Gesamtstruktur. Der Verteilte Linkverfolgungsserverdienst erstellt Objekte im folgenden Distinguished Name-Pfad:

CN=FileLinks,CN=System,DC= Domänennamecontainer von Active Directory

Objekte der verteilten Linkverfolgung sind in den folgenden beiden Tabellen unter dem Ordner "CN=FileLinks,CN=System" vorhanden:

  • CN=ObjectMoveTable,CN=FileLinks,CN=System,DC= Domänenname:

Dieses Objekt speichert Informationen zu verknüpften Dateien, die in der Domäne verschoben wurden.

  • CN=VolumeTable,CN=FileLinks,CN=System,DC= Domänenname:

    Dieses Objekt speichert Informationen zu jedem NTFS-Volume in der Domäne.

Objekte der verteilten Linkverfolgung verbrauchen zwar wenig Speicherplatz, können jedoch viel Speicherplatz in Active Directory verbrauchen, wenn sie sich im Laufe der Zeit ansammeln dürfen.

Wenn Sie die verteilte Linkverfolgung deaktivieren und die Objekte der verteilten Linkverfolgung aus Active Directory löschen, kann das folgende Verhalten auftreten:

  • Die Größe der Active Directory-Datenbank kann reduziert werden (dieses Verhalten tritt auf, nachdem die Objekte als "grumiert" und "Garbage Collection" erfasst wurden, und nachdem Sie ein Verfahren zur Offlinedefragmentierung ausgeführt haben).
  • Der Replikationsdatenverkehr zwischen Domänencontrollern kann reduziert werden.

In Windows 2000, Windows XP und Windows Server 2003 ist der Startwert für den Clientdienst für die verteilte Linkverfolgung auf "Automatisch" festgelegt. Auf Windows 2000-basierten Servern wird der Dienst für den verteilten Linkverfolgungsserver standardmäßig manuell gestartet. Wenn Sie jedoch eine Dcpromo.exe zum Bewerben eines Servers zu einer Domäne verwenden, ist der Dienst für den verteilten Linkverfolgungsserver so konfiguriert, dass er automatisch gestartet wird.

Für Windows Server 2003-basierte Server ist der Dienst für den verteilten Linkverfolgungsserver standardmäßig deaktiviert. Wenn Sie Dcpromo.exe zum Bewerben eines Servers zu einer Domäne verwenden, ist der Dienst für den verteilten Linkverfolgungsserver nicht so konfiguriert, dass er automatisch gestartet wird. Wenn ein Windows 2000-basierter Domänencontroller auf Windows Server 2003 aktualisiert wird, wird der Dienst für den verteilten Linkverfolgungsserver während des Upgrades ebenfalls deaktiviert. Wenn Sie ein Administrator sind und den Verteilten Linkverfolgungsserverdienst verwenden möchten, müssen Sie entweder Gruppenrichtlinien verwenden oder manuell festlegen, dass der Dienst automatisch gestartet wird. Darüber hinaus versucht der Clientdienst für die Nachverfolgung verteilter Links auf Computern mit Windows Server 2003 oder Windows XP SP1 nicht standardmäßig, den Dienst für die Nachverfolgung von verteilten Links zu verwenden. Wenn Sie diese Computer so konfigurieren möchten, dass sie den Verteilten Linkverfolgungsserverdienst nutzen, aktivieren Sie die Richtlinieneinstellung "Verteilte Linkverfolgung zulassen", um domänenressourcenrichtlinieneinstellungen zu verwenden. Öffnen Sie dazu den Knoten "Computerkonfiguration/Administrative Vorlagen/System" in der Gruppenrichtlinie.

Microsoft empfiehlt die Verwendung der folgenden Einstellungen für die verteilte Linkverfolgung auf Windows 2000-basierten Servern:

  1. Deaktivieren Sie den Dienst für den verteilten Linkverfolgungsserver auf allen Domänencontrollern (dies ist die Standardkonfiguration auf allen Windows Server 2003-basierten Servern).

    Aufgrund des Replikationsaufwands und des Speicherplatzes, den In -FileLinks-Tabellen in Active Directory verwenden, empfiehlt Microsoft, den Dienst für den verteilten Linkverfolgungsserver auf Active Directory-Domänencontrollern zu deaktivieren. Verwenden Sie eine der folgenden Methoden, um den Dienst zu beenden:

    • Doppelklicken Sie im Dienste-Snap-In (Services.msc oder compmgmt.msc) auf den Dienst für den verteilten Linkverfolgungsserver, und klicken Sie dann im Feld "Starttyp" auf "Deaktiviert".

    • Definieren Sie den Startwert im Knoten "Computerkonfiguration/Windows-Einstellungen/Systemdienste" der Gruppenrichtlinie.

    • Definieren Sie die Richtlinieneinstellungen für eine Organisationseinheit, die alle Windows 2000-Domänencontroller hostet.

    Starten Sie die Domänencontroller neu, nachdem die Richtlinie repliziert wurde, damit die Richtlinie angewendet wird. Wenn Sie die Domänencontroller nicht neu starten, müssen Sie den Dienst auf jedem Domänencontroller manuell beenden.

  2. Löschen Sie Objekte der verteilten Linkverfolgung von Active Directory-Domänencontrollern.

    Weitere Informationen zum Löschen von Objekten der verteilten Linkverfolgung finden Sie im Abschnitt "Löschen eines verteilten Linkverfolgungsobjekts". Es wird empfohlen, Objekte zu löschen, nachdem Sie den Dienst "Distributed Link Tracking Server" deaktiviert haben.

    Hinweis

    Die Größe der Verzeichnisinformationsstruktur (Directory Information Tree, DIT) auf Domänencontrollern wird erst reduziert, wenn die folgenden Aktionen abgeschlossen sind.

    1. Objekte werden aus dem Verzeichnisdienst gelöscht.

      Hinweis

      Gelöschte Objekte werden im Container "Gelöschte Objekte" gespeichert, bis die Lebensdauer des Tombstones abläuft. Der Standardwert für eine Tombstone-Lebensdauer beträgt 60 Tage. Der Mindestwert beträgt zwei Tage. Standardmäßig beträgt der Wert für neue Gesamtstrukturen, die zusammen mit Windows Server 2003 Service Pack 1 oder einer neueren Version von Windows Server 2003 installiert werden, 180 Tage.

      Es wird empfohlen, den 180-Tage-Wert zu verwenden, es sei denn, Sie haben eine starke Active Directory-Replikationsüberwachung. Verringern Sie diesen Wert nicht, um Probleme mit der DIT-Größe zu behandeln. Wenn Sie Probleme mit der Datenbankgröße haben, wenden Sie sich an den Microsoft-Kundensupport.

    2. Die Garbage Collection wurde abgeschlossen.

    3. Sie verwenden Ntdsutil.exe, um die Datei "Ntds.dit" im Modus "Dsrepair" zu defragmentieren.

Es ist nicht wichtig, dass Sie die Objekte für die Nachverfolgung verteilter Verknüpfungen manuell löschen, nachdem Sie den Serverdienst für die Verteilte Linkverfolgung beendet haben, es sei denn, Sie müssen den Speicherplatz freigeben, der von diesen Objekten so schnell wie möglich verbraucht wird. Clients für die verteilte Linkverfolgung forderten den Server für die Nachverfolgung verteilter Links auf, links alle 30 Tage zu aktualisieren. Der Dienst "Verteilter Linkverfolgungsserver" verräumt Objekte, die in 90 Tagen nicht aktualisiert wurden.

Wenn Sie das Dltpurge.vbs VBScript ausführen, werden alle Active Directory-Objekte, die vom Dienst für den verteilten Linkverfolgungsserver verwendet werden, aus der Domäne gelöscht, in der das Skript ausgeführt wird. Sie müssen das Skript auf einem Domänencontroller für jede Domäne in einer Gesamtstruktur ausführen. So führen Sie Dltpurge.vbs aus:

  1. Rufen Sie das Dltpurge.vbs vom Microsoft-Produktsupport ab.

  2. Beenden Sie den Dienst für den verteilten Linkverfolgungsserver auf allen Domänencontrollern in der Domäne, die von der Dltpurge.vbs.

  3. Verwenden Sie Administratorrechte, um sich bei der Konsole eines Domänencontrollers oder Mitgliedscomputers in der Domäne, auf die sich der Benutzer Dltpurge.vbs.

  4. Verwenden Sie die folgende Syntax, um Dltpurge.vbs über eine Befehlszeile auszuführen:

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

    In dieser Befehlszeile:

    • -s ist der DNS-Hostname des Domänencontrollers, auf dem Sie Objekte der verteilten Linkverfolgung löschen möchten.
    • -d ist der Distinguished Name Path der Domäne, in der Sie Objekte der verteilten Linkverfolgung löschen möchten.
  5. Führen Sie eine Offlinedefragmentierung der Datei "Ntds.dit" aus, nachdem die Objekte als "grumiert" und "Garbage Collection" erfasst wurden. Klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base zu sehen, um weitere Informationen zum Garbage Collection-Prozess zu erhalten:

    198793 Der Prozess der Garbage Collection von Active Directory-Datenbanken

Beispiel für die Kundenerfahrung

Das Szenario mit dem ungünstigsten Fall, das in diesem Abschnitt beschrieben wird, veranschaulicht einige Probleme, die beim Löschen einer großen Anzahl von Objekten der verteilten Linkverfolgung in einer großen Produktionsdomäne zu berücksichtigen sind.

Trey Research, ein fiktiverIous 500-Kunde mit über 40.000 Mitarbeitern weltweit, stellt eine einzelne Active Directory-Gesamtstruktur zur Verfügung, die aus einer leeren Stammdomäne mit untergeordneten Domänen besteht, die wichtige geografische Regionen der Welt (Nordamerika, Asien, Europa und so weiter) enignen. Die größte Domäne in der Gesamtstruktur enthält ca. 35.000 Benutzerkonten und die gleiche Anzahl von Computerkonten.

Die Ntds.dit-Dateien wurden auf Raidarrays mit 18 GB platziert. Seit der Erstbereitstellung von Windows 2000 sind die globalen Katalogdateien auf 17 GB an geworden.

Trey Research möchte Windows Server 2003 innerhalb der nächsten 10 Tage bereitstellen, benötigt jedoch mindestens 1,5 GB verfügbaren Speicherplatz auf der Datenbankpartition, bevor das Upgrade initiiert wird. Sie benötigen so viel Speicherplatz, da Adprep.exe bekannt ist, dass je nach den zuvor installierten Hotfixes und Service Packs drei bis fünf geerbte Aces hinzugefügt werden. Die folgenden Bedingungen tragen zur großen globalen Kataloggröße oder dem fehlenden Speicherplatz bei:

  • Bedingung 1: Trey Research war ein Early Adopter von Windows 2000, und die größten Laufwerke, die sie von ihrem bevorzugten Hardwareanbieter erhielten, waren 9 GB oder 18 GB, als sie in einem Raidarray konfiguriert wurden. Aktuelle Laufwerke sind doppelt so groß wie die Hälfte der Kosten.

  • Bedingung 2: Die DNS-Aufräumarbeiten wurden für active Directory-integrierte DNS-Zonen, die an jede Domäne in der Gesamtstruktur delegiert wurden, nicht aktiviert.

  • Bedingung 3: Domänenbenutzer konnten Computerkonten in der Domäne erstellen. Administratoren hatten keinen wiederkehrenden Prozess, um verwaiste Computerkonten zu identifizieren und zu löschen.

  • Bedingung 4: Im Laufe der Zeit wurden Sicherheitsdeskriptoren von Administratoren, Service Packs und Hotfixes für #A0 (cn=schema, cn=configuration, cn= domain) und andere Container definiert, die Tausende von Objekten in Active Directory hosten. Darüber hinaus wurde die Überwachung auf denselben Partitionen aktiviert. Wenn Sie Berechtigungen festlegen und die Überwachung für Objekte in Active Directory aktivieren, nimmt die Größe der Datenbank zu. Das Tool, das Windows 2000-Gesamtstrukturen und -Domänen für Windows Server 2003-basierte Domänencontroller (Adprep) vorbereitet, fügt auch geerbte Aces hinzu. Daher musste Trey Research Speicherplatz auf dem Festplattenlaufwerk freispeichern, bevor die Domäne aktualisiert wurde.

  • Bedingung 5: Trey Research hat nicht regelmäßig Offlinedefragmentierungsverfahren für Ntds.dit-Dateien im Dsrepair-Modus ausgeführt.

  • Bedingung 6: Als der Container "CN=FileLinks,CN=System,DC= Domänenname" in der größten Domäne überprüft wurde, wurden mehr als 700.000 Objekte der verteilten Linkverfolgung aufgedeckt. Die Sicherheitsbeschreibung für jedes Verteilte LinkVerfolgungsobjekt beträgt ca. 2 KB. Jede dieser Bedingungen wurde für ihren Beitrag zur 17-GB-DIT-Datei ausgewertet:

  • Bedingung 1: Trey Research hat beschlossen, neue Laufwerke aufgrund der Kosten und der dafür zu verwendenen Zeit nicht mehr zu bereitstellen. Außerdem benötigte sie nur vorübergehend den Speicherplatz, da erwartet wurde, dass die Active Directory-Datenbank nach dem Upgrade auf Windows Server 2003 verkleinert wird und der Single Instance Store (SIS)-Prozess abgeschlossen wurde (SIS implementiert eine effizientere Speicherung von Berechtigungen in Active Directory-Datenbanken).

  • Bedingungen 2 und 3: Trey Research hat entschieden, dass diese Bedingungen die bewährten Methoden sind; Selbst wenn Trey Research sie implementiert hätte, würden sie jedoch nicht die erforderlichen Ergebnisse erzielen. Sie entschieden sich für die Aktivierung der DNS-Aufräumarbeiten, da sie einfach implementiert werden kann.

  • Bedingung 4: Trey Research hat erkannt, dass bei einer Neudefinition von Sicherheitsdeskriptoren und Systemzugriffssteuerungslisten (SACLs) die gesuchten Ergebnisse erzielt würden. Sie entschieden jedoch, dass die Implementierung dieses Verfahrens zeitaufwändig sein würde, bis die Reduzierung der Größe, der Replikationsaufwand und vor allem die Programm-/Administrationskompatibilität im Laborszenario, das die Produktionsumgebung spiegelt, gründlich getestet werden konnte.

    Da Trey Research Windows 2000 SP2 und einige Hotfixes bereitgestellt hat, wurde erwartet, dass die inkrementellen geerbten Aces, die von Adprep (zu Objekten in der Domäne NC) hinzugefügt wurden, bis zu 300 MB groß sein könnten. Sie könnten dieses Verhalten in einer Laborumgebung überprüfen, die zum Testen von Upgrades der Produktions gesamtstruktur verwendet wird.

  • Bedingung 5: Trey Research hat erkannt, dass bei einem Offlinedefragmentierungsverfahren "Leerzeichen" in der Datei "Ntds.dit" möglicherweise nicht wiederhergestellt werden. Trey Research administrators noticed an increase in database size immediately after they completed the offline defragmentation procedure. Dieses Verhalten ist aufgrund einer Ineffizienz im Windows 2000-Datenbankmodul aufgetreten. Dieses Modul wurde in Windows Server 2003 erweitert.

  • Bedingung 6: Trey Research stimmte zu, dass die offensichtliche Aktion darin liegt, eine einfache Massenlöschung aller Objekte der verteilten Linkverfolgung aus dem Container "CN=FileLinks,CN=System,DC= Domänenname" auf einem Domänencontroller in jeder Domäne in der Gesamtstruktur durchzuführen. Sie erkannten jedoch, dass in diesem Modus kein zusätzlicher Speicherplatz freigegeben werden würde, bis die Objekte als "grumiert" und "Garbage Collection" erfasst wurden und bis sie ein Verfahren für die Offlinedefragmentierung auf jedem Domänencontroller in dieser Domäne abgeschlossen haben. Während der Wert für die Lebensdauer des Grabsteins auf Werte von bis zu zwei Tagen festgelegt werden kann, waren mehrere Domänencontroller in der Trey Research-Gesamtstruktur offline, als sie auf Hardware- und Softwareupdates warteten. Wenn Objekte vor der End-to-End-Replikation als "grumiert" bezeichnet werden, werden gelöschte Objekte möglicherweise erneut reanimiert, oder zwischen globalen Katalogservern in der Gesamtstruktur werden möglicherweise inkonsistente Daten gemeldet. Um sofortige Hilfe zu bieten, hat Trey Research das folgende Verfahren ausgeführt:

  1. Sie haben die Standardsicherheitsbeschreibung für Schemaklassenobjekte der Verteilten Linkverfolgung entfernt und durch einen einzigen Sicherheitsprinzipal (Benutzerkonto) ersetzt.
  2. Sie haben ein VBScript-Programm geschrieben, mit dem alle vorhandenen Sicherheitsbeschreibungen entfernt und dann durch ein explizites Ace für einen einzelnen Sicherheitsprinzipal ersetzt wurden.
  3. Sie haben Objekte der verteilten Linkverfolgung in 10.000-Einheiten-Schritten mit einer Drei-Stunden-Verzögerung zwischen jedem Objektlöschvorgang gelöscht.
  4. Sie haben auf jedem Domänencontroller in der Domäne ein Verfahren zur Offlinedefragmentierung ausgeführt, nachdem alle Objekte der verteilten Linkverfolgung gelöscht wurden. Wenn Trey Research den Deskriptor entfernt und das Defragmentierungsverfahren ausgeführt hat, hat die Datenbank etwa 1,5 GB Speicherplatz auf allen Domänencontrollern in der Domäne wiederhergestellt. Dieser Speicherplatz reichte aus, um das Tool Adprep problemlos ausführen und alle Windows 2000-basierten Domänencontroller und globalen Kataloge auf Windows Server 2003 zu aktualisieren.

Nachdem Trey Research das Betriebssystem auf Windows Server 2003 aktualisiert hat, wurde mehr Speicherplatz frei, wenn die Datenbankgröße durch das Feature für den Speicher mit einer instanz in Windows Server 2003 auf ca. 8 GB reduziert wurde (Sie müssen ein Verfahren zur Offlinedefragmentierung ausführen, um diese Ergebnisse zu erhalten). Nach Ablauf des TSL-Intervalls wurde mehr Speicherplatz wiederhergestellt, verteilte Linkverfolgungsobjekte wurden automatisch erfasst, und es wurde ein Verfahren zur Offlinedefragmentierung ausgeführt.

Trey Research beworben einen neuen Replikat-Windows 2000-basierten Domänencontroller in die Domäne und platzierte das Computerkonto in einer anderen Organisationseinheit als normalerweise verwendet. In zwei Tagen waren auf dem Windows 2000-basierten Domänencontroller etwa 8.000 Objekte der verteilten Linkverfolgung vorhanden. Trey Research beendete entweder die Distributed Link Tracking oder erstellte eine Richtlinie zum Beenden des Diensts und verknüpfte die Richtlinie dann mit Organisationseinheiten, die Windows 2000-basierte Domänencontroller hosten. Zuletzt verwendete Trey Research Dltpurge.vbs, um die verbleibenden Objekte der verteilten Linkverfolgung zum Löschen zu markieren.

Aufbau des Löschens von DLT-Objekten

DLT-Objekte selbst enthalten nur wenige Attribute und verwenden wenig Speicherplatz in Active Directory. Wenn ein Objekt für den Löschvorgang markiert ist (mit Einem-Zeichen-Zeichen), werden alle nicht benötigten Attribute entfernt, mit Ausnahme der attribute, die zum Nachverfolgen des Objekts erforderlich sind, bis es aus Active Directory gelöscht wird.

Im Fall der Link-Tracking-Objekte ist das Markieren des Objekts zum Löschen nur zwei Attribute, die entfernt werden: dscorepropagationdata und objectcategory. Das Löschen der beiden Attribute führt zu einer anfänglichen Einsparung von 34 Byte. Durch das Markieren des Linkverfolgungsobjekts zum Löschen wird das Objekt jedoch auch aktualisiert, indem ein IS_DELETED-Attribut (4 Byte) hinzugefügt und die Attribute "RDN" und "Common Name" erstellt werden, wodurch jedes dieser Attribute um ca. 80 Byte anwachsen kann. Darüber hinaus wächst das Attribut "Replikationsmetadaten" um ca. 50 Byte, um die für dieses Objekt durchgeführten Aktualisierungen widersspiegeln zu können. Wenn Sie also ein Linkverfolgungsobjekt zum Löschen markieren, wächst das Objekt um ca. 200 Byte. Die NTDS. DIT wird erst nach einer Verkleinerung der gelöschten Objekte, der Garbage Collection und einer Offlinedefragmentierung reduziert.

Hinweis

Wenn der Dienst wie in diesem Artikel empfohlen deaktiviert ist, erfolgt die automatische Bereinigung nicht.

Textversion von Dltpurge.vbs

So verwenden Sie dieses Skript:

  1. Kopieren Sie den ganzen Text zwischen dem Tag und dem Tag in diesem Artikel, und fügen Sie den Text dann in eine ASCII-Text-Editor-Datei (z. B. eine Microsoft Editor-Datei) ein.
  2. Speichern Sie die Datei als "Dltpurge.vbs". 3 Führen Sie das Verfahren aus, das unter "Löschen von Objekten der verteilten Linkverfolgung" beschrieben wird
<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>