none
Script para adicionar usuarios no AD RRS feed

  • Pergunta

  • Galera preciso de uma grande ajuda de voceis

    Estou migrando 6000 mil alunos de um dominio Linux para AD 2008 no qual posso controlar a GPO via Servidor etc

    bom eu conssegui utilizando um script que achei na internet mais como nao manjo maravilhas de scriptvb, peço a ajuda de v6.

    Nome Completo Primeiro Nome Inicial Sobrenome Password Office mail Cargo Departamento Descricao Telefone
    2 3 4 5 6 7 8 9 10 11 12

    bom e o VB 

    '''---Code ----'''

    '----------------------------------------------------------------------'
    '--------------------------Criação de login----------------------------'
    '----------------------------------------------------------------------'

    Option Explicit
    Dim objRootLDAP, objContainer, objUser, objShell
    Dim objExcel, objSpread, intRow
    Dim strUser, strOU, strSheet
    Dim strCN, strSam, strFirst, strLast, strPWD, strinitials, stroffice, strmail, strtitle, strdepartment, strprincipalname, strTitulo, strMensagem, strcompany, strdescription, strtelephoneNumber

    strOU = "OU=Alunos ," 
    strSheet = "C:\scripts\User.xls"

    ' Bind to Active Directory, Users container.
    Set objRootLDAP = GetObject("LDAP://rootDSE")
    Set objContainer = GetObject("LDAP://" & strOU & objRootLDAP.Get("defaultNamingContext")) 

    ' Open the Excel spreadsheet
    Set objExcel = CreateObject("Excel.Application")
    Set objSpread = objExcel.Workbooks.Open(strSheet)
    intRow = 3 'Row 1 often contains headings

    ' Here is the 'DO...Loop' that cycles through the cells
    ' Note intRow, x must correspond to the column in strSheet
    Do Until objExcel.Cells(intRow,1).Value = ""
    strSam = Trim(objExcel.Cells(intRow, 1).Value)
    strCN = Trim(objExcel.Cells(intRow, 2).Value) 
    strFirst = Trim(objExcel.Cells(intRow, 3).Value)
    strinitials = Trim(objExcel.Cells(intRow, 4).Value)
    strLast = Trim(objExcel.Cells(intRow, 5).Value)
    strPWD = Trim(objExcel.Cells(intRow, 6).Value)
    stroffice = Trim(objExcel.Cells(intRow, 7).Value)
    strmail = Trim(objExcel.Cells(intRow, 8).Value)
    strprincipalname = strSam & "@teste.interno"
    strtitle = Trim(objExcel.Cells(intRow, 9).Value)
    strdepartment = Trim(objExcel.Cells(intRow, 10).Value)
    strdescription = Trim(objExcel.Cells(intRow, 11).Value)
    strtelephoneNumber = Trim(objExcel.Cells(intRow, 12).Value)
    strcompany = "Cast Informatica S.A"

    ' Build the actual User from data in strSheet.
    Set objUser = objContainer.Create("User", "cn=" & strCN)
    objUser.sAMAccountName = strSam
    objUser.givenName = strFirst
    objUser.initials = strinitials
    objUser.sn = strLast
    objUser.SetInfo
    objUser.physicalDeliveryOfficeName = stroffice
    objUser.mail = strmail
    objUser.userPrincipalName= strprincipalname
    objUser.displayName = strCN
    objUser.title = strtitle
    objUser.department = strdepartment
    objUser.company = strcompany
    objUser.description = strdescription
    objUser.telephoneNumber = strtelephoneNumber

    ' Separate section to enable account with its password
    objUser.userAccountControl = 512
    objUser.pwdLastSet = 0
    objUser.SetPassword strPWD
    objUser.SetInfo

    intRow = intRow + 1
    Loop
    objExcel.Quit 

    strTitulo = "COMANDO CONCLUIDO!!"
    strMensagem = _
    "USUARIO(S) CRIADO(S) COM SUCESSO!" & vbcrlf & vbcrlf & _
    " Mova para OU correta e crie a mailbox." & vbcrlf & _
    "" & vbcrlf & _
    ""
    'BtnCode = WshShell.Popup(strMensagem, 5, "Informação:", 64 + 0)
    msgbox strMensagem, 0 + 64, strTitulo


    WScript.Quit 

    ----------------------------------------------------------------------------------------------------------------------------------

    BOm ate então ele funciona o que eu preciso e somente alguns campos desse script

    Tipo Campo 1 que seria o login eu precisava que fica-se assim "isa. Numero do alunos"
    Campos  nome do aluno que vai aparecer no terminal
    Campo 3 - Senha

    e tb toda  vez que esse script rodar ele vai deletar todos os user e recadastrar todos utilizando os dados do excell

    Se puderem me ajudar eu ficarei muito Grato

    sexta-feira, 6 de junho de 2014 00:39

Respostas

  • Cara, tem muita coisa aí no fim da pergunta, se você enumerasse ficava melhor, vou tentar responder se faltar algo você avisa:

    Tipo Campo 1 que seria o login eu precisava que fica-se assim "isa. Numero do alunos"

    Não entendi pode explicar de novo?

    Campo 3 - Senha

    Veja esta linha

    strPWD = Trim(objExcel.Cells(intRow, 6).Value)

    ela indica de qual coluna vem a senha, no seu script está na coluna 6, se você quer altera pra coluna 3 então altere esta linha.

    e tb toda  vez que esse script rodar ele vai deletar todos os user e recadastrar todos utilizando os dados do excell

    Provavelmente vc tem todas as contas dentro de uma mesma OU, partindo deste principio use este trecho de script logo no inicio do seu

    strOU = "LDAP://OU=suaou,dc=seu,dc=dominio"
    set objOU =GetObject(strOU) 
    For each objUser in objOU
       If objUser.class= "user" then
           ' The heart of this script - delete contact
           strCN = "CN=" & objUser.cn
           objOU.delete "user", strCN 
       End if
    next 
    set objOU = Nothing

    Vc precisa alterar o valor de strOU para o nome Ldap da OU onde estão os usuários que você quer apagar (tenha certeza que não tem usuários importantes dentro da OU).

    Se você não tem experiência pode ser que o script não saia de primeira, então aproveite a oportunidade para aprender.


    Fábio de Paula Junior



    sexta-feira, 6 de junho de 2014 03:04
    Moderador

Todas as Respostas

  • Cara, tem muita coisa aí no fim da pergunta, se você enumerasse ficava melhor, vou tentar responder se faltar algo você avisa:

    Tipo Campo 1 que seria o login eu precisava que fica-se assim "isa. Numero do alunos"

    Não entendi pode explicar de novo?

    Campo 3 - Senha

    Veja esta linha

    strPWD = Trim(objExcel.Cells(intRow, 6).Value)

    ela indica de qual coluna vem a senha, no seu script está na coluna 6, se você quer altera pra coluna 3 então altere esta linha.

    e tb toda  vez que esse script rodar ele vai deletar todos os user e recadastrar todos utilizando os dados do excell

    Provavelmente vc tem todas as contas dentro de uma mesma OU, partindo deste principio use este trecho de script logo no inicio do seu

    strOU = "LDAP://OU=suaou,dc=seu,dc=dominio"
    set objOU =GetObject(strOU) 
    For each objUser in objOU
       If objUser.class= "user" then
           ' The heart of this script - delete contact
           strCN = "CN=" & objUser.cn
           objOU.delete "user", strCN 
       End if
    next 
    set objOU = Nothing

    Vc precisa alterar o valor de strOU para o nome Ldap da OU onde estão os usuários que você quer apagar (tenha certeza que não tem usuários importantes dentro da OU).

    Se você não tem experiência pode ser que o script não saia de primeira, então aproveite a oportunidade para aprender.


    Fábio de Paula Junior



    sexta-feira, 6 de junho de 2014 03:04
    Moderador
  • Fabio Bom dia deixa lhe explicar melhor

    Eu tenho um dominio Linux CentOS onde todos usuários estão no MYSQL , isso é complicado pois preciso criar uma GPO pra cada laboratorio então decidimos migrar todos usuários para AD, lembrando que todo mes entra de 100 a 600 alunos entao vamos la

    no Campo 1 - seria o login da maquina , no qual preciso usar a matricula do aluno no caso 6790434452, no que junto com essa matricula preciso deixar essas iniciais , isa.6790434452 <<< esse devera ser o login isa.+matricula.

    Todo os alunos ficam dentro da OU "Alunos" no qual se logam no domínio , esse script vai ficar rodando toda anoite para adicionar novos usuarios , o por que de deletar , pq caso o aluno troque a senha , ele vai add a nova senha na.

    Nesse script acima que coloquei ele add os usuarios na OU "alunos", porem quando ele for executado novamente ele precisa deletar todos os user dessa Ou e importalos novamente.

    ou seja preciso deletar todos  e depois importalos .

    Teria como me ajudar Fabio, como informei não manjo muito de script.vbs.

    por que o que eu queria mesmo era ligar uma DB ao AD mais to achando dificil, pois se eu tive-se uma DB com os users seria mais facil migrar os user do MYSQL para o SQL ou outra DB e as mesmas se autenticarem no AD. mais não achei nada , por isso do VB :)

    sexta-feira, 6 de junho de 2014 11:24
  • Sobre o campo 1, imagino que na planilha tenha a matricula do aluno (exemplo: 6790434452), se você quer apenas adicionar um prefixo basta concatenar nesta linha:

    objUser.sAMAccountName = "isa." & strSam

    Não recomendo ficar deletando os usuários todos os dias, mas se é isso que você quer:

    Option Explicit
    Dim objRootLDAP, objContainer, objUser, objShell
    Dim objExcel, objSpread, intRow
    Dim strUser, strOU, strSheet
    Dim strCN, strSam, strFirst, strLast, strPWD, strinitials, stroffice, strmail, strtitle, strdepartment, strprincipalname, strTitulo, strMensagem, strcompany, strdescription, strtelephoneNumber
    
    strOU = "OU=Alunos ," 
    strSheet = "C:\scripts\User.xls"
    
    ' Bind to Active Directory, Users container.
    Set objRootLDAP = GetObject("LDAP://rootDSE")
    Set objContainer = GetObject("LDAP://" & strOU & objRootLDAP.Get("defaultNamingContext")) 
    
    'Apaga todos os usuários da OU Alunos
    strOU = "LDAP://" & strOU & objRootLDAP.Get("defaultNamingContext")
    set objOU =GetObject(strOU) 
    For each objUser in objOU
       If objUser.class= "user" then
           ' The heart of this script - delete contact
           strCN = "CN=" & objUser.cn
           objOU.delete "user", strCN 
       End if
    next 
    set objOU = Nothing
    
    ' Open the Excel spreadsheet


    Fábio de Paula Junior

    • Sugerido como Resposta Edinaldo Junior sexta-feira, 6 de junho de 2014 18:10
    sexta-feira, 6 de junho de 2014 14:33
    Moderador
  • Fabio tentei juntar os scripts porem ele da um erro, teria como vc me enviar ele pronto com essa funcção

    Muito Obrigado desde ja

    sexta-feira, 6 de junho de 2014 14:43
  • Fabio uma duvida, seria possivel em vez de deletar os user ele modificar, ou verificar se esta igual, se nao estiver modificar, isso so preciso no campo da senha
    sexta-feira, 6 de junho de 2014 15:22
  • Quando acontecer um erro mande:

    1) O script

    2) A mensagem de erro , se possível um print

    3) A descrição da linha onde aconteceu o erro (é indicado no erro), peço isso porque as vezes você coloca o script aqui e na contagem de linhas pode ser diferente.

    Sobre ser possivel atualizar os usuários: Sim, é possível. Esse seu script está muito simples, só serve pra adição mesmo. O script de atualização precisa de uma função para localizar o usuário, é um passo mais adiante no script, melhor você ver esse seu funcionando primeiro depois partimos para atualização.


    Fábio de Paula Junior

    sexta-feira, 6 de junho de 2014 15:32
    Moderador
  • Fabio estou usando esse que ficou legalzinho pro que eu preciso

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    ' criarUsuarios.vbs 
    ' Exemplo para criar contas de usuário a partir de uma planilha em Excel 
    ' Adaptado a partir do scritp escrito por Guy Thomas 
    ' ——————————————————’ 
    Option Explicit 
    Dim objRootLDAP, objContainer, objUser, objShell 
    Dim objExcel, objSpread, intRow 
    Dim strUser, strOU, strSheet 
    Dim strCN, strSam, strFirst, strLast, strPWD 
    ' ———————————————–’ 
    ' Importante: altere "OU=” e "strSheet=” nas próximas duas linhas abaixo para adequar ao seu domínio e local onde a planilha está armazenada 
    ' ———————————————–’ 
    strOU = "OU=Funcionarios ," ' Preste atenção na VÍRGULA antes de fechar as ASPAS 
    strSheet = "E:\scripts\Usuarios.xls" 
    ' Conectando ao Active Directory. 
    Set objRootLDAP = GetObject("LDAP://rootDSE") 
    Set objContainer = GetObject("LDAP://" & strOU & _ 
    objRootLDAP.Get("defaultNamingContext")) 
    ' Abre a planilha do Excel 
    Set objExcel = CreateObject("Excel.Application") 
    Set objSpread = objExcel.Workbooks.Open(strSheet) 
    intRow = 3 ' Lendo a partir da linha 3, a linha 1 normalmente possui o cabeçalho das colunas 
    ' Aqui está o 'DO…Loop’ que percorre as células da planilha 
    ' Note que intRow, x deve corrsponder à coluna na variável strSheet 
    Do Until objExcel.Cells(intRow,1).Value = "" 
    strSam = Trim(objExcel.Cells(intRow, 1).Value) 
    strCN = Trim(objExcel.Cells(intRow, 2).Value) 
    'strFirst = Trim(objExcel.Cells(intRow, 3).Value) 
    'strLast = Trim(objExcel.Cells(intRow, 4).Value) 
    strPWD = Trim(objExcel.Cells(intRow, 5).Value) 
    ' Cria o usuário a partir da variável strSheet. 
    Set objUser = objContainer.Create("User", "cn=" & strCN) 
    objUser.sAMAccountName = "isa." & strSam 
    objUser.givenName = strFirst 
    objUser.sn = strLast 
    objUser.SetInfo 
    ' Esta seção habilita a conta e sua senha 
    objUser.userAccountControl = 512 
    objUser.pwdLastSet = 0 
    objUser.SetPassword strPWD 
    objUser.SetInfo 
    intRow = intRow + 1 
    Loop 
    objExcel.Quit 
    WScript.Quit 
    ' Fim do script

    So preciso adiconar a parte de deletar os usuarios que estão na OU , e colocar o Display name , por que nesse não aparece o nome somente aparece o numero.

    sexta-feira, 6 de junho de 2014 15:41
  • Agora faça as modificações que sugeri, se der erro reporte.

    Fábio de Paula Junior

    sexta-feira, 6 de junho de 2014 15:59
    Moderador