none
Remover user RRS feed

  • Pergunta

  • Boa noite galera.

    como faço um vbs que leia um txt aonde eu possa colocar as contas de usuario e ele va no AD com essa lista e leia 4 grupos e remova as contas desse grupo e gere uma saida de log informando se foi ok ou nao, porem so quero que remova do grupo e nao mate a conta da rede.

    é possivel ??

    Abraço a todos.
    segunda-feira, 1 de junho de 2009 23:10

Respostas

  • Olá,

    Faça o teste com o script abaixo:



    Dim objDSE, strDefaultDN, strDN, objContainer, objChild,Userobj,List,GroupObj,FileSystem,OutPutFile,ArrUser()
    Dim objTextFile,tamArray,x,Grupo,arrMemberOf,strMember,ObjGroup

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")

    'caminho do arquivo txt com os usuários
    Set objTextFile = FileSystem.OpenTextFile("C:\usuarios.txt",1)

    'arquivo de log
    Set OutPutFile = FileSystem.CreateTextFile("Limpa Grupo.txt", True)


    tamArray = 0

    'cria um array com os registros do arquivo usuarios.txt
    Do While objTextFile.AtEndOfStream <> True
       redim preserve arrUser(tamArray)
       arrUser(tamArray) = objTextFile.ReadLine
       tamArray = tamArray + 1
    loop

    Set objDSE = GetObject("LDAP://rootDSE")

    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")

    strDN =     InputBox("Coloque o Caminho da OU" & _
        vbCrLf & "(Exemplo: ou=temp,dc=contoso,dc=msft)", , "ou=temp,dc=contoso,dc=msft")

     
    If strDN = "" Then WScript.Quit(1)        '

    Set objContainer = GetObject("LDAP://" & strDN)

    objContainer.Filter = Array("group")



    For Each objChild In objContainer
       set ObjGroup = GetObject("LDAP://" & ObjChild.name & "," & strDN )  
       List = objGroup.Name  & VBCRLF
       arrMemberOf = objChild.GetEx("member")
       For Each strMember in arrMemberOf
          set UserObj = GetObject("LDAP://" & strMember)
          For x = 0 to UBOUND(arrUser)
             if UCASE(MID(UserObj.Name,4,Len(UserObj.Name))) = UCASE(arrUser(x)) Then
                objGroup.PutEx 4,"member",Array(strMember)
                objGroup.SetInfo
                List = List & UserObj.Name  & VBCRLF
             End if
          Next
       Next
       OutPutFile.WriteLine List
       OutPutFile.WriteLine "===================================================="
    Next

     

    OutPutFile.Close

    wscript.quit


    Faça o seguinte,

    Crie uma OU temporaria e coloque o grupo nesta ou...

    Depois execute o script.. no caminho que esta pedindo, coloque o caminho da OU temporaria.

    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Marcelo TI terça-feira, 9 de junho de 2009 23:13
    terça-feira, 2 de junho de 2009 13:24

Todas as Respostas

  • Olá,

    Faça o teste com o script abaixo:



    Dim objDSE, strDefaultDN, strDN, objContainer, objChild,Userobj,List,GroupObj,FileSystem,OutPutFile,ArrUser()
    Dim objTextFile,tamArray,x,Grupo,arrMemberOf,strMember,ObjGroup

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")

    'caminho do arquivo txt com os usuários
    Set objTextFile = FileSystem.OpenTextFile("C:\usuarios.txt",1)

    'arquivo de log
    Set OutPutFile = FileSystem.CreateTextFile("Limpa Grupo.txt", True)


    tamArray = 0

    'cria um array com os registros do arquivo usuarios.txt
    Do While objTextFile.AtEndOfStream <> True
       redim preserve arrUser(tamArray)
       arrUser(tamArray) = objTextFile.ReadLine
       tamArray = tamArray + 1
    loop

    Set objDSE = GetObject("LDAP://rootDSE")

    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")

    strDN =     InputBox("Coloque o Caminho da OU" & _
        vbCrLf & "(Exemplo: ou=temp,dc=contoso,dc=msft)", , "ou=temp,dc=contoso,dc=msft")

     
    If strDN = "" Then WScript.Quit(1)        '

    Set objContainer = GetObject("LDAP://" & strDN)

    objContainer.Filter = Array("group")



    For Each objChild In objContainer
       set ObjGroup = GetObject("LDAP://" & ObjChild.name & "," & strDN )  
       List = objGroup.Name  & VBCRLF
       arrMemberOf = objChild.GetEx("member")
       For Each strMember in arrMemberOf
          set UserObj = GetObject("LDAP://" & strMember)
          For x = 0 to UBOUND(arrUser)
             if UCASE(MID(UserObj.Name,4,Len(UserObj.Name))) = UCASE(arrUser(x)) Then
                objGroup.PutEx 4,"member",Array(strMember)
                objGroup.SetInfo
                List = List & UserObj.Name  & VBCRLF
             End if
          Next
       Next
       OutPutFile.WriteLine List
       OutPutFile.WriteLine "===================================================="
    Next

     

    OutPutFile.Close

    wscript.quit


    Faça o seguinte,

    Crie uma OU temporaria e coloque o grupo nesta ou...

    Depois execute o script.. no caminho que esta pedindo, coloque o caminho da OU temporaria.

    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Marcelo TI terça-feira, 9 de junho de 2009 23:13
    terça-feira, 2 de junho de 2009 13:24
  • Outra dica: use o dsmod em conjunto com a lista de usuários.

    http://technet.microsoft.com/en-us/library/cc732423(WS.10).aspx

    []s,

    --
    Vinicius Canto Xavier
    MVP Scripting - Admin Frameworks - PowerShell

    Blog sobre scripting e powershell: http://viniciuscanto.blogspot.com

    "Marcelo TI" wrote in message news:183faf7d-61ad-4072-88a1-cab077b1b183...
    > Boa noite galera.
    >
    > como faço um vbs que leia um txt aonde eu possa colocar as contas de
    > usuario e ele va no AD com essa lista e leia 4 grupos e remova as contas
    > desse grupo e gere uma saida de log informando se foi ok ou nao, porem so
    > quero que remova do grupo e nao mate a conta da rede.
    >
    > é possivel ??
    >
    > Abraço a todos.

    quarta-feira, 3 de junho de 2009 05:25
    Moderador
  • Jesiel.

    Cara mais uma vez vc me dando uma força muito obrigado.

    entao vamos la

    aqui Set objDSE = GetObject(LDAP://rootDSE) devo entrar com as informações de ldap cn=xxx,ou=xxx,dc=xx,dc=xxxx ou nao.


    strDN =     InputBox("Coloque o Caminho da OU" & _
        vbCrLf & "(Exemplo: ou=temp,dc=contoso,dc=msft)", , "ou=temp,dc=contoso,dc=msft") aqui eu tenho que colocar em cima e em baixo as informações de ldap cn=xxx,ou=xxx,dc=xx,dc=xxxx ou não ?


    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext") aqui esse cn=users seria o nome do grupo ou nao ?


    e nesses campos tb devo colocar em cima e em baixo as informações de ldap cn=xxx,ou=xxx,dc=xx,dc=xxxx ou não ?

    Set objContainer = GetObject("LDAP://" & strDN)

       set ObjGroup = GetObject("LDAP://" & ObjChild.name & "," & strDN )   

          set UserObj = GetObject("LDAP://" & strMember)

    quarta-feira, 3 de junho de 2009 22:04
  • Olá,

    Marcelo, no script você não precisa modificar nada...

    Somente crie uma OU no seu Active directory e coloque os grupos que você quer remover os membros nesta OU.

    Depois crie um arquivo texto com os usuários (no Script está c:\usuarios.txt)

    Agora é só executar o script... sem modificar nada.

    Ele vai pedir a OU (dando um exemplo). É só você alterar para a sua OU. Exemplo: ou=teste,dc=seudominio,dc=local


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quinta-feira, 4 de junho de 2009 02:57
  • Show Jesiel.

    Bele rolou legal, desculpa nao ter respondido antes estava com um grande problema com ospf e bgp aqui na minha rede.

    abraço.
    terça-feira, 9 de junho de 2009 23:12