none
Limpar informaçao de usuarios do AD RRS feed

  • Pergunta

  •  

    Boa tarde pessoal,

     

    Estou com a seguinte necessidade. Tenho uma ambiente AD na empresa, e preciso retirar a informação que fica no campo "Gerente" e "Subordinados diretos", que fica na guia "Empresa".

     

    Alguém pode me ajudar?

     

    Grato pelo espaço

    segunda-feira, 8 de outubro de 2007 18:59

Respostas

  • EM, segue o script que você precisa, não é possivel remover os "Subordinados" porque esta informação é um corelação com os gerentes. Ou seja, removendo o gerente automaticamente vai tirar da lista de "Subordinados" do gerente em questão.

     

    Ps. Não esqueça de alterar o que está em vermelho.

     

    Code Block

    Const ADS_PROPERTY_CLEAR = 1
    Const ADS_PROPERTY_UPDATE = 2
    Const ADS_PROPERTY_APPEND = 3
    Const ADS_PROPERTY_DELETE = 4

     

    Dim fso
    Dim logNoLimit
    Dim objCommand
    Dim objRecordSet
    Dim objConnection
    Dim strADsPath
    Dim objUser
    Dim manager

    Set fso = CreateObject("Scripting.FileSystemObject")

    dtmCurrentDate = Date
    dtmTargetDate = Year(dtmCurrentDate)

    dtmMonth = Month(dtmCurrentDate)
    If Len(dtmMonth) = 1 Then
     dtmMonth = "0" & dtmMonth
    End If

    dtmTargetDate = dtmTargetDate & dtmMonth

    dtmDay = Day(dtmCurrentDate)
    If Len(dtmDay) = 1 Then
     dtmDay = "0" & dtmDay
    End If

    dtmTargetDate = dtmTargetDate & dtmDay

    Set logNoLimit = fso.CreateTextFile("LogAD_" & dtmTargetDate & ".log", True)

    logNoLimit.WriteLine ("=========================================")
    logNoLimit.WriteLine ("=  Log de alterações de atibutos no AD  =")
    logNoLimit.WriteLine ("=========================================")
    logNoLimit.WriteLine (FormatDateTime(CurrentDate, vbLongTime))
    logNoLimit.WriteLine ("=========================================")
    logNoLimit.WriteLine ("Usuarios Alterados")
    logNoLimit.WriteLine ("=========================================")

    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=ADsDSOObject;"

    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection

    objCommand.CommandText = "<LDAP://ou=TESTE,dc=dominio,dc=com,dc=br>;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"

    Set objRecordSet = objCommand.Execute

    While Not objRecordset.EOF
     strADsPath        = objRecordset.Fields("ADsPath")
     Set objUser       = GetObject(strADsPath)

     Manager       = ""
     directReports = ""
     Manager       = objUser.Manager
     directReports = objUser.directReports

     logNoLimit.WriteLine (objUser.sAMAccountName)

     objUser.PutEx ADS_PROPERTY_CLEAR, "manager", vbNull
     objUser.SetInfo
     objRecordset.MoveNext
    Wend

    Wscript.Echo "Foram alteradas " & objRecordSet.RecordCount & " contas de usuários."

    logNoLimit.WriteLine("=========================================")
    logNoLimit.WriteLine("Foram alteradas " & objRecordSet.RecordCount & " contas de usuários.")
    logNoLimit.Close

    objConnection.Close
    wscript.echo "Fim"

     

     

    quarta-feira, 10 de outubro de 2007 02:42

Todas as Respostas

  • EM, segue o script que você precisa, não é possivel remover os "Subordinados" porque esta informação é um corelação com os gerentes. Ou seja, removendo o gerente automaticamente vai tirar da lista de "Subordinados" do gerente em questão.

     

    Ps. Não esqueça de alterar o que está em vermelho.

     

    Code Block

    Const ADS_PROPERTY_CLEAR = 1
    Const ADS_PROPERTY_UPDATE = 2
    Const ADS_PROPERTY_APPEND = 3
    Const ADS_PROPERTY_DELETE = 4

     

    Dim fso
    Dim logNoLimit
    Dim objCommand
    Dim objRecordSet
    Dim objConnection
    Dim strADsPath
    Dim objUser
    Dim manager

    Set fso = CreateObject("Scripting.FileSystemObject")

    dtmCurrentDate = Date
    dtmTargetDate = Year(dtmCurrentDate)

    dtmMonth = Month(dtmCurrentDate)
    If Len(dtmMonth) = 1 Then
     dtmMonth = "0" & dtmMonth
    End If

    dtmTargetDate = dtmTargetDate & dtmMonth

    dtmDay = Day(dtmCurrentDate)
    If Len(dtmDay) = 1 Then
     dtmDay = "0" & dtmDay
    End If

    dtmTargetDate = dtmTargetDate & dtmDay

    Set logNoLimit = fso.CreateTextFile("LogAD_" & dtmTargetDate & ".log", True)

    logNoLimit.WriteLine ("=========================================")
    logNoLimit.WriteLine ("=  Log de alterações de atibutos no AD  =")
    logNoLimit.WriteLine ("=========================================")
    logNoLimit.WriteLine (FormatDateTime(CurrentDate, vbLongTime))
    logNoLimit.WriteLine ("=========================================")
    logNoLimit.WriteLine ("Usuarios Alterados")
    logNoLimit.WriteLine ("=========================================")

    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=ADsDSOObject;"

    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection

    objCommand.CommandText = "<LDAP://ou=TESTE,dc=dominio,dc=com,dc=br>;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"

    Set objRecordSet = objCommand.Execute

    While Not objRecordset.EOF
     strADsPath        = objRecordset.Fields("ADsPath")
     Set objUser       = GetObject(strADsPath)

     Manager       = ""
     directReports = ""
     Manager       = objUser.Manager
     directReports = objUser.directReports

     logNoLimit.WriteLine (objUser.sAMAccountName)

     objUser.PutEx ADS_PROPERTY_CLEAR, "manager", vbNull
     objUser.SetInfo
     objRecordset.MoveNext
    Wend

    Wscript.Echo "Foram alteradas " & objRecordSet.RecordCount & " contas de usuários."

    logNoLimit.WriteLine("=========================================")
    logNoLimit.WriteLine("Foram alteradas " & objRecordSet.RecordCount & " contas de usuários.")
    logNoLimit.Close

    objConnection.Close
    wscript.echo "Fim"

     

     

    quarta-feira, 10 de outubro de 2007 02:42
  • Bruno,

     

    Primeiramente gostaria de agradecer pelo pronto atendimento. O script funcionou (Parabéns). Porém atualiza somente 1000 usuarios por vez. Vc consegue me ajudar pois tenho aproximadamente 15.000 usuarios para atualizar em OUs diferente, onde esta limitação inviabiliza o processo. Grato pela atenção

     

    quinta-feira, 25 de outubro de 2007 17:46
  • De uma olhada no artigo abaixo, lá fala como alterar isso.

     

    http://support.microsoft.com/kb/315071

     

    []s,

     

    Bruno

    quinta-feira, 25 de outubro de 2007 18:10
  • Bruno Obrigado pelas informações.

     

    Como estes atributos visam garantir o funcionamento dos DCs estou com receio de alterar os atributos. Gostaria de saber se é possivel incrementar no script a opção de fazer ate 1000, e iniciar uma nova tarefa para mais 1000 ate o fim do arquivo?

     

    Agradeço pelo espaço e peço desculpas pois nao conheco muito de scripts.

     

    no aguardo

    sexta-feira, 26 de outubro de 2007 14:39
  • O que você poderia fazer, é ao invéz do script percorrer o AD inteiro você especifica uma OU para executar a modificação, depois você especifica uma segunda OU até acabar todas.

     

    Por exemplo na linha onde tem LDAP://ou=TESTE,dc=dominio,dc=com,dc=br você especifica uma OU que não tenha mais de 1000 objetos, depois modifica para outra OU e assim por diante.

     

    []s,


     

    segunda-feira, 29 de outubro de 2007 11:45
  • Bruno obrigado pelas respostas.

     

    Sua sugestao não é viavel no meu ambiente por dois motivos:

     

    1 - Temos mais do 1000 OUs

    2 - Existem OUs que tem mais de 1000 usuários.

     

    opção 1: Por isso que questionei se é possivel que o script roda de 1000 em 1000 sempre iniciando da onde parou.

     

    Opção 2: Outra possibilidade seria executar esta limpeza somente nos usuarios que tem esta informação neste campo, com isso o script sempre avançava para mais 1000. Alguém sabe como implementar isso no script?

     

    Grato,

     

    Ederson

    terça-feira, 30 de outubro de 2007 14:22