Verwendung von Visual Basic Script SidHistory löschen

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 295758
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Zusammenfassung
Microsoft Visual Basic Script (VBScript) in diesem Artikel beschriebenen ein Objekt über seinen Namen im Verzeichnis suchen und versucht, SidHistory für das Objekt zu deaktivieren. Es verfügt über optionale Parameter für ObjectClass und ObjectCategory , um die Suche zu erleichtern.
Weitere Informationen
Wenn ein Benutzerobjekt aus einer Domäne zu einer anderen verschiebt eine neue Sicherheitskennung (SID) für das Benutzerkonto generiert und in der Objekt-SID -Eigenschaft gespeichert werden muss. Bevor der neue Wert der Eigenschaft geschrieben wird, wird der vorherige Wert in einer anderen-Eigenschaft eines User-Objekts SID-Verlauf ( SidHistory ) kopiert. Diese Eigenschaft kann mehrere Werte enthalten. Jedes Mal ein Objekt zu einer anderen Domäne, eine neue SID verschiebt Benutzer generiert und in der Objekt-SID -Eigenschaft und ein anderer Wert gespeichert wird die Liste der alten SIDs in SID-Verlauf hinzugefügt. Manchmal kann es erforderlich, deaktivieren Sie das SidHistory sein.

Der folgende VBScript-Code wird das Attribut SidHistory aus das in den Befehlszeilenargumenten angegebene Verzeichnisobjekt entfernt.
  1. Öffnen Sie Microsoft Editor.
  2. Kopieren Sie den folgenden Code und in den Editor-Dokument einfügen.
    Const ADS_PROPERTY_DELETE = 4Dim strFilter 'As StringDim oConnection 'As ADODB.ConnectionDim oRecordSet 'As ADODB.RecordSetDim strQuery 'As StringDim strDomainNC 'As StringDim oRootDSE 'As IADsDim vArray 'As Variant()Dim vSid 'As VariantDim oDirObject 'As Variant' Parse the command line and set the query filterParseCommandLine()' Find the domain naming contextset oRootDSE = GetObject("LDAP://RootDSE")strDomainNC = oRootDSE.Get("defaultNamingContext")set oRootDSE = Nothing' Setup the ADO connectionSet oConnection = CreateObject("ADODB.Connection")oConnection.Provider = "ADsDSOObject"oConnection.Open "ADs Provider"strQuery = "<LDAP://" & strDomainNC & ">;" & strFilter & ";distinguishedName,objectClass,name,sidHistory;subtree"'Execute the queryset oRecordSet = oConnection.Execute(strQuery)if oRecordSet.Eof then  WScript.Echo "No objects were found"  WScript.Quit(0)Else  Dim vClasses 'As Variant  Dim strClass 'As String  WScript.Echo "The following objects were found:"  'On Error Resume Next  ' Iterate through the objects that match the filter  While Not oRecordset.Eof     vClasses = oRecordset.Fields("objectClass").Value     strClass = vClasses(UBound(vClasses))     WScript.Echo "Name: " & oRecordset.Fields("name").Value & "   Class: " & strClass & "  DN: " & oRecordset.Fields("distinguishedName").Value     If IsNull(oRecordSet.Fields("sIDHistory").Value ) Then        WScript.Echo "This object does not have a sidHistory"     Else	set oDirObject = GetObject("LDAP://" & oRecordset.Fields("distinguishedName").Value)         vArray = oDirObject.GetEx("sIDHistory")        For Each vSid in vArray         oDirObject.PutEx ADS_PROPERTY_DELETE, "sIDHistory", array(vSid)          oDirObject.SetInfo         Next        WScript.Echo "The sidHistory has been cleared for this object!"     End if          oRecordset.MoveNext  WendEnd if'Clean upSet oRecordset = NothingSet oConnection = Nothing'=========================================================================================================================' The ParseCommandLine subroutine will build the query filter base on the arguments passed to the script.  The bNameFlag' is used so that the name given can have spaces in it.'=========================================================================================================================Sub ParseCommandLine()   Dim vArgs, Value, Equals, I   Dim bNameFlag 'As Boolean   Dim strName 'As String   Dim strObjectCategory 'As String   Dim strObjectClass 'As String   Set vArgs = WScript.Arguments   if VArgs.Count < 1 Then      DisplayUsage()   End if  bNameFlag = False  For I = 0 to vArgs.Count - 1      If Left( vArgs(I) , 1 ) = "/" Or Left( vArgs(I) , 1 ) = "-" Then         Value = ""         Equals = InStr( vArgs(I) , "=" )         If Equals = 0 Then Equals = InStr( vArgs(I) , ":" )         If Equals > 0 Then Value = Mid( vArgs(I) , Equals + 1 )         Select Case LCase( Mid( vArgs(I) , 2 , 1) )   		Case "n" strName = Value			 bNameFlag = True  'This will allow us to catch spaces   		Case "o" strObjectCategory = Value			 bNameFlag = False                Case "c" strObjectClass = Value			 bNameFlag = False		Case Else DisplayUsage         End Select        	     Else 'no dash or slash;  Check if we are giving a name        if bNameFlag Then           strName = strName & " " & vArgs(I)        else           DisplayUsage        end if     End if   Next'Should be okay to build filter  If strName = "" Then  WScript.Echo "A name parameter must be given"  WScript.Quit(1)Else  strFilter = "(&(name=" & strName & ")"  If Len(strObjectCategory) > 0 Then     strFilter = strFilter & "(objectCategory=" & strObjectCategory & ")"  End if  If Len(strObjectClass) > 0 Then     strFilter = strFilter & "(objectClass=" & strObjectClass & ")"  End if  strFilter = strFilter & ")" 'Close filterEnd ifEnd Sub'=========================================================================================================================' The DisplayUsage subroutine will display how to use this script, the objectCategory and objectClass arguments are optional.'=========================================================================================================================Sub DisplayUsage() WScript.Echo "Usage csript.exe " & WScript.ScriptName & vbLF & _      "-n=<name of the object you are looking for>" & vbLF & _     "[-o=<objectCategory of the object you are looking for>]" & vbLF & _     "[-c=<objectClass of the object you are looking for>]"  & vbLF & vbLF & _ 	 "Examples : " & vbLF & _	 WScript.ScriptName & " -n=My Contact" & vbLF & _	 WScript.ScriptName & " -n=Computer1 -o=computer" & vbLF & _ 	 WScript.ScriptName & " -n=James Smith -o=Person -c=user" WScript.Quit(0)End Sub    					
  3. Speichern Sie das Dokument als C:\ClearSidHistory.vbs
  4. Führen Sie den Code aus. Verwendung für ClearSidHistory.vbs lautet wie folgt:
    , ClearSidHistory.vbs - n "cscript.exe" = <name> [- o = <objectcategory>] [- C = <objectclass>]

    -n = < Name des gesuchten objekts >
    -o = < ObjectCategory des gesuchten objekts >
    -C = < ObjectClass des gesuchten objekts >

    Beispiele:

    ClearSidHistory.vbs n cscript.exe meinen Kontakt =
    ClearSidHistory.vbs n cscript.exe = Computer1 o = Computer
    ClearSidHistory.vbs n cscript.exe = James Smith o = Person C = Benutzer

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 295758 – Letzte Überarbeitung: 12/06/2015 02:01:27 – Revision: 3.2

Microsoft Windows 2000 Server, Microsoft Active Directory Service Interfaces 2.5

  • kbnosurvey kbarchive kbmt kb32bitonly kbhowto kbprb KB295758 KbMtde
Feedback