Cómo utilizar Visual Basic Script para borrar SidHistory

Seleccione idioma Seleccione idioma
Id. de artículo: 295758 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

El Microsoft Visual Basic Script (VBScript) incluido en este artículo buscará un objeto en el directorio por su nombre e intentará borrar el sidHistory para aquel objeto. Tiene parámetros opcionales para objectClass y objectCategory que lo ayuda en la búsqueda.

Más información

Un objeto de usuario mueve a otro cuándo se debe generar un identificador de seguridad nuevo (SID) para la cuenta de usuario y se debe almacenar en la propiedad Object-SID de dominio. Antes de escribirse en la propiedad, el valor anterior se copia a otra propiedad de un objeto User, SID-History ( sidHistory). Esta propiedad puede contener varios valores. Cada vez de que un objeto User mueve a vez que un SID nuevo se genera y que se almacena a vez en la propiedad Object-SID y otro valor a otro dominio se agrega a la lista de SID antiguo en SID-History. Puede ser necesario a veces que se desactive el sidHistory.

El código siguiente de VBScript quitará el atributo sidHistory del objeto de directorio especificado en los argumentos de línea de comandos.
  1. Abra Bloc de notas de Microsoft.
  2. Copie el código siguiente y péguelo en su documento de Bloc de notas.
    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. Guarde el documento como C:\ClearSidHistory.vbs
  4. Ejecute el código El uso para ClearSidHistory.vbs es como sigue:
    cscript.exe [- us ] [- c ] = &lt;name&gt; = &lt;objectCategory&gt; = &lt;objectClass&gt; n ClearSidHistory.vbs

    N = &lt;name of the object you are looking for&gt;
    O = &lt;objectCategory of the object you are looking for&gt;
    C = &lt;objectClass of the object you are looking for&gt;

    Ejemplos :

    Cscript.exe = Mi contacto n ClearSidHistory.vbs
    Cscript.exe = o Equipo1 = equipo n ClearSidHistory.vbs
    cscript.exe = o Juan Soto = c Persona = usuario n ClearSidHistory.vbs

Propiedades

Id. de artículo: 295758 - Última revisión: martes, 30 de agosto de 2005 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Windows 2000 Server
  • Microsoft Active Directory Service Interfaces 2.5
Palabras clave: 
kbhowto kb32bitonly kbprb KB295758 KbMtes kbmt
Traducción automática
AVISO: Gracias por utilizar el servicio de Traducción Automática. Este artículo ha sido traducido por un sistema informático sin ayuda humana (Machine Translation). Microsoft ofrece estos artículos a los usuarios que no comprendan el inglés, exclusivamente, con el fin de que puedan entenderlos más fácilmente. Microsoft no se hace responsable de la calidad lingüística de las traducciones ni de la calidad técnica de los contenidos de los artículos así como tampoco de cualesquiera problemas, directos o indirectos, que pudieran surgir como consecuencia de su utilización por los lectores.
Haga clic aquí para ver el artículo original (en inglés): 295758

Enviar comentarios

 

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