SidHistory temizleme Visual Basic komut dosyası nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 295758 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Microsoft Visual Basic bu makalede sağlanan komut dosyasını (VBScript) bir nesne adıyla dizinde bulmak ve bu nesnenin sidHistory temizleyin çalışıldı. Bu, isteğe bağlı parametreler objectClass ve aramaya yardımcı olmak için objectCategory vardır.

Daha fazla bilgi

Ne zaman bir kullanıcı nesnesinin bir etki alanından diğerine, yeni bir güvenlik tanımlayıcısı (SID) kullanıcı hesabı için oluşturulan olmalı ve Nesne SID özelliğinde depolanan taşır. Yeni değer için özellik yazılmadan önce önceki değeri başka bir User nesnesinin SID geçmişi (sidHistory) özelliğine kopyalanır. Bu özellik, birden çok değer barındırabilir. Her bir kullanıcı, başka bir etki alanına, yeni bir SID nesnesini taşır, oluşturulan Nesne SID özelliği ve başka bir değer depolanan, SID geçmişi ' içindeki eski Sıd listesine eklenir. Bazen sidHistory temizlemek gerekli olabilir.

Aşağıdaki VBScript kodu, komut satırı bağımsız değişkenleri'içinde belirtilen dizini nesnesinden sidHistory özniteliği kaldıracak.
  1. Microsoft Not Defteri'nde açın.
  2. Aşağıdaki kodu kopyalayın ve kendi Not Defteri belgesine kopyalayın.
    Const ADS_PROPERTY_DELETE = 4
    
    Dim strFilter 'As String
    Dim oConnection 'As ADODB.Connection
    Dim oRecordSet 'As ADODB.RecordSet
    Dim strQuery 'As String
    Dim strDomainNC 'As String
    Dim oRootDSE 'As IADs
    Dim vArray 'As Variant()
    Dim vSid 'As Variant
    Dim oDirObject 'As Variant
    
    ' Parse the command line and set the query filter
    ParseCommandLine()
    
    ' Find the domain naming context
    set oRootDSE = GetObject("LDAP://RootDSE")
    strDomainNC = oRootDSE.Get("defaultNamingContext")
    set oRootDSE = Nothing
    
    ' Setup the ADO connection
    Set oConnection = CreateObject("ADODB.Connection")
    oConnection.Provider = "ADsDSOObject"
    oConnection.Open "ADs Provider"
    
    strQuery = "<LDAP://" & strDomainNC & ">;" & strFilter & ";distinguishedName,objectClass,name,sidHistory;subtree"
    
    'Execute the query
    set 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
      Wend
    End if
    
    'Clean up
    Set oRecordset = Nothing
    Set 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 filter
    End if
    End 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. Belgeyi C:\ClearSidHistory.vbs kaydedin...
  4. Kodu çalıştırın. Kullanım için ClearSidHistory.vbs aşağıdaki gibidir:
    cscript.exe ClearSidHistory.vbs n <name>= [- o <objectcategory>=] [- c <objectclass>=]

    -n < aradığınız nesnenin adı > =
    -o < objectCategory aradığınız nesnesinin > =
    -c < objectClass aradığınız nesnesinin > =

    Örnekler:

    cscript.exe ClearSidHistory.vbs n benim Contact =
    cscript.exe ClearSidHistory.vbs n = bilgisayar1 o bilgisayar =
    cscript.exe ClearSidHistory.vbs n = Can Etikan -o kişi - c = = kullanıcı

Özellikler

Makale numarası: 295758 - Last Review: 30 Ağustos 2005 Salı - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows 2000 Server
  • Microsoft Active Directory Service Interfaces 2.5
Anahtar Kelimeler: 
kbmt kb32bitonly kbhowto kbprb KB295758 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:295758

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com