Visual Basic 스크립트를 사용하여 SidHistory 해제 방법

기술 자료 번역 기술 자료 번역
기술 자료: 295758 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

이 문서에서 제공하는 Microsoft Visual Basic 스크립트 (VBScript) 디렉터리에 있는 개체를 해당 이름으로 찾 및 sidHistory 해당 개체에 대한 선택을 할 것입니다. 보안 및 검색에 도움이 objectCategory 대한 선택적 매개 변수가 있습니다.

추가 정보

때 사용자 개체를 한 도메인에서 다른, 새로운 보안 식별자 (SID)가 사용자 계정에 대해 생성되어 저장되는 개체 SID 속성을 이동합니다. 속성에 새 값을 쓰기 전에 사용자 개체의 SID 기록 (sidHistory) 다른 속성은 이전 값이 복사됩니다. 이 속성에 여러 값이 포함될 수 있습니다. 새 SID를 다른 도메인으로 개체를 이동합니다 사용자 생성 및 개체 SID 속성을 다른 값으로 저장된 때마다 이전 SID SID 기록 에서 목록에 추가됩니다. 경우에 따라 sidHistory 선택을 필요할 수 있습니다.

다음과 같은 VBScript 코드를 명령줄 인수에서 지정한 디렉터리 개체를 sidHistory 특성을 제거합니다.
  1. Microsoft 메모장을 엽니다.
  2. 다음 코드를 복사하여 메모장 문서에 붙여 넣습니다.
    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. C:\ClearSidHistory.vbs로 문서를 저장하십시오.
  4. 코드를 실행하십시오. ClearSidHistory.vbs 사용 다음과 같습니다.
    ClearSidHistory.vbs - n cscript.exe를 <name>= [- o = <objectcategory>] [- c = <objectclass>]

    -n < name 찾고 개체의> =
    -o < objectCategory 찾고 개체의 > =
    -c = < 찾고 개체의 보안 >

    예제:

    ClearSidHistory.vbs - n cscript.exe를 내 연락처 =
    ClearSidHistory.vbs - n cscript.exe를 설정을 -o = 컴퓨터 =
    ClearSidHistory.vbs - n cscript.exe를 James Smith-o = 개인 - c = 사용자 =

속성

기술 자료: 295758 - 마지막 검토: 2005년 8월 30일 화요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Windows 2000 Server
  • Microsoft Active Directory Service Interfaces 2.5
키워드:?
kbmt kb32bitonly kbhowto kbprb KB295758 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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