none
Alterar Campos de varios usuarios no AD via Script (HELP) RRS feed

  • Pergunta

  • Fala pessoal tudo bem??? Pessoal to precisando de uma grande ajuda....
    To precisando alterar os seguintes campos dos usuarios no AD?

    Telefone e Departamento!!!

    Já exportei os usuarios para um arquivo CSV e já coloquei os campos, agora preciso importar para o Meu AD, via Script... Alguem poderia me ajudar....

    O que pensei é o seguinte..

    Abre o CSV ou TXT, pega o nome do Usuario, procura no AD e edita os campos, passa pra outro altera, etc,etc,etc....

    A logica eu até sei, o que tá me pegando é escrever...

    Agradeço desde já o pessoal...
    Marcos Valente (MCP) (marcos.r.valente@gmail.com)
    segunda-feira, 20 de abril de 2009 14:42

Respostas

  • Olá,

    O sub buscaOU faz esse trabalho.


    No excel, você deve ter o Usuário na primeira coluna e o Departamento na segunda coluna.

    O nome do usuário deve ser o nome utilizado no login (canonical name)



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Marcos Valente segunda-feira, 28 de fevereiro de 2011 14:35
    quinta-feira, 1 de outubro de 2009 12:09
  • Olá Marcos,

    Verifique se o script abaixo te ajuda:


    Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Resultado.txt", True)

    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open ("C:\users.xls")
    intRow = 1
     

    dim DomainString, UserString, WSHNetwork, WSHShell
    dim UserObj, GroupObj

    ON ERROR RESUME NEXT

    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")

    strTitle="Mostrar os Grupos do Usuário"

    DomainString = WSHNetwork.UserDomain

    Do Until objExcel.Cells(intRow,1).Value = ""
        UserString = objExcel.Cells(intRow, 1).Value  'colouna 1 do arquivo do excel'
        Departamento = objExcel.Cells(intRow,2).Value 'coluna 2 do arquivo do excel'

        Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString)   
        OU = BuscaOU(UserObj.FullName)
        if Len(OU) = 0 Then
          OutPutFile.WriteLine UserObj.FullName & " - " & "Não encontrado a OU" & VBCRLF
        End if

        set objUser = GetObject("LDAP://cn=" & LCase(UserObj.FullName) & "," & LCase(OU))
        objUser.department = Departamento
        objUser.setInfo

        intRow = intRow + 1
    Loop

    objExcel.Quit

    wscript.quit

    Function BuscaOU(byval UserName)

    Dim namingContext, ldapFilter, ou
    Dim cn, cmd, rs
    Dim objRootDSE

    Set objRootDSE = getobject("LDAP://RootDSE")
    namingContext = objRootDSE.Get("defaultNamingContext")
    set objRootDSE = nothing

    ldapFilter = "<LDAP://" & namingContext & _
    ">;(&(objectCategory=User) (name=" & userName & "))" & _
    ";distinguishedName;subtree"

    set cn =  createObject("ADODB.Connection")
    set cmd = createObject("ADODB.Command")

    cn.open "Provider=ADsDSOOBject;"
    cmd.activeconnection = cn
    cmd.commandtext = ldapFilter

    set rs = cmd.execute

    if rs.eof <> true and rs.bof <> true then
       ou = rs(0)
       ou = mid(ou,instr(ou,",")+1,Len(ou) - instr(ou,","))
       BuscaOU = ou
    End if

    rs.close
    cn.close

    End Function


    No exemplo acima, utilizei um arquivo do excel (c:\users.xls) Onde na coluna 1 está o nome do Usuário e na coluna 2 está o departamento.

    Agora é só você adicionar as colunas que você precisa.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Marcos Valente segunda-feira, 28 de fevereiro de 2011 14:35
    quarta-feira, 22 de abril de 2009 18:52

Todas as Respostas

  • Olá,

    Você pode usar o cvsde. Dá uma olhada no link abaixo:

    http://support.microsoft.com/default.aspx/kb/327620/pt-br

    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 20 de abril de 2009 18:27
  • Olá,

    Você pode usar o cvsde. Dá uma olhada no link abaixo:

    http://support.microsoft.com/default.aspx/kb/327620/pt-br

    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    Bom dia Jesiel...
    Obrigado pela ajuda... Mais o que preciso é o seguinte, já tenho uma planilha delimitada, coloquei os campos agora preciso mudar no AD... Não sei se o CVSDE vai me ajudar....

    QUeria mesmo um Script onde ele le acada linha da minha planilha, pega os campos e atualizado no AD... Ele estaria utilizando a minha planilha pra fazer um merge no AD.. Entendeu????

    Ah um detalhe que esqueci de dizer, meu AD é todo em 2003........

    Obrigado a quem puder ajudar...




    Marcos Valente (MCP) (marcos.r.valente@gmail.com)
    quarta-feira, 22 de abril de 2009 14:57
  • Olá Marcos,

    Verifique se o script abaixo te ajuda:


    Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Resultado.txt", True)

    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open ("C:\users.xls")
    intRow = 1
     

    dim DomainString, UserString, WSHNetwork, WSHShell
    dim UserObj, GroupObj

    ON ERROR RESUME NEXT

    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")

    strTitle="Mostrar os Grupos do Usuário"

    DomainString = WSHNetwork.UserDomain

    Do Until objExcel.Cells(intRow,1).Value = ""
        UserString = objExcel.Cells(intRow, 1).Value  'colouna 1 do arquivo do excel'
        Departamento = objExcel.Cells(intRow,2).Value 'coluna 2 do arquivo do excel'

        Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString)   
        OU = BuscaOU(UserObj.FullName)
        if Len(OU) = 0 Then
          OutPutFile.WriteLine UserObj.FullName & " - " & "Não encontrado a OU" & VBCRLF
        End if

        set objUser = GetObject("LDAP://cn=" & LCase(UserObj.FullName) & "," & LCase(OU))
        objUser.department = Departamento
        objUser.setInfo

        intRow = intRow + 1
    Loop

    objExcel.Quit

    wscript.quit

    Function BuscaOU(byval UserName)

    Dim namingContext, ldapFilter, ou
    Dim cn, cmd, rs
    Dim objRootDSE

    Set objRootDSE = getobject("LDAP://RootDSE")
    namingContext = objRootDSE.Get("defaultNamingContext")
    set objRootDSE = nothing

    ldapFilter = "<LDAP://" & namingContext & _
    ">;(&(objectCategory=User) (name=" & userName & "))" & _
    ";distinguishedName;subtree"

    set cn =  createObject("ADODB.Connection")
    set cmd = createObject("ADODB.Command")

    cn.open "Provider=ADsDSOOBject;"
    cmd.activeconnection = cn
    cmd.commandtext = ldapFilter

    set rs = cmd.execute

    if rs.eof <> true and rs.bof <> true then
       ou = rs(0)
       ou = mid(ou,instr(ou,",")+1,Len(ou) - instr(ou,","))
       BuscaOU = ou
    End if

    rs.close
    cn.close

    End Function


    No exemplo acima, utilizei um arquivo do excel (c:\users.xls) Onde na coluna 1 está o nome do Usuário e na coluna 2 está o departamento.

    Agora é só você adicionar as colunas que você precisa.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Marcos Valente segunda-feira, 28 de fevereiro de 2011 14:35
    quarta-feira, 22 de abril de 2009 18:52
  • Jesiel,

    Onde é que define mesmo o nome da OU.

    Resultado: - Não encontrado a OU

    Grato;

    German.
    quarta-feira, 30 de setembro de 2009 20:09
  • Olá,

    O sub buscaOU faz esse trabalho.


    No excel, você deve ter o Usuário na primeira coluna e o Departamento na segunda coluna.

    O nome do usuário deve ser o nome utilizado no login (canonical name)



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Marcos Valente segunda-feira, 28 de fevereiro de 2011 14:35
    quinta-feira, 1 de outubro de 2009 12:09
  • Pessoal,

    estou tentando rodar esse script, mas tenho o erro abaixo e não consegui resolver o problema. Poderiam me ajudar?

    Erro: O componente do ActiveX não pode criar objeto: 'Excel.Application'.

    Código: 800A01AD

    Origem: Erro de tempo de execução do Microsoft VBScript.

    segunda-feira, 4 de julho de 2016 17:39
  • Já identifiquei o erro. Era pq não tinha o office instalado.
    segunda-feira, 4 de julho de 2016 19:15