none
Editar usuário no AD usando script RRS feed

  • Pergunta

  • Ae galera sou novo aqui, mais vi que esse fórum ajuda muitos trabalhadores honestos ! rs... Gostaria de uma ajuda de vocês para poder editar o campo e-mail nos usuários no AD. Eu queria que os usuários ficassem como no print abaixo:

    Tenho esse script como base, mais gostaria de saber oque eu teria que alterar para o mesmo me ajudar.

    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

    quarta-feira, 6 de junho de 2012 20:52

Respostas

  • tenta este e passa o resultado com a tela igual vc fez agora.

    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:\user.xls")
    intRow = 2
      
     
    dim DomainString, UserString, WSHNetwork, WSHShell
    dim UserObj, GroupObj
     
    ON ERROR RESUME NEXT
     
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
     
     
    DomainString = WSHNetwork.UserDomain
     
    Do Until objExcel.Cells(intRow,1).Value = ""
    	UserString = objExcel.Cells(intRow, 1).Value  'coluna 1 do arquivo do excel'
    	Departamento = objExcel.Cells(intRow,2).Value 'coluna 2 do arquivo do excel'
    	strEmail = objExcel.Cells(intRow,3).Value     'coluna 3 do arquivo do excel'
    
    	'Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString) 
    	wscript.echo "Localizando: " & UserString
    	strLDAP = BuscaOU(UserString)
    
    	if Len(strLDAP) = 0 Then
    		'OutPutFile.WriteLine UserObj.FullName & " - " & "Não encontrado a OU" & VBCRLF
    		wscript.echo vbtab & "Usuário não encontrado"
    		
    	else
    		wscript.echo vbtab & strLDAP
    		wscript.echo vbtab & "Usuário encontrado, atualizando..."
    		set objUser = GetObject("LDAP://" & strLDAP )
    		'objUser.department = Departamento
    		objUser.mail = strEmail
    		objUser.setInfo
    	End if
    	
    	intRow = intRow + 1
    Loop
     
    objExcel.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)(sAMAccountName=" & 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


    Fábio de Paula Junior

    • Marcado como Resposta CaJu_Jr quarta-feira, 13 de junho de 2012 14:59
    • Não Marcado como Resposta CaJu_Jr quarta-feira, 13 de junho de 2012 14:59
    • Marcado como Resposta CaJu_Jr quarta-feira, 13 de junho de 2012 15:00
    quarta-feira, 13 de junho de 2012 14:47
    Moderador

Todas as Respostas

  • Boa Noite Caju, só falta o castanha rsss

    Aqui no Fórum só tem gente trabalhadora, que ganha pouco. r.s..

    Conhece o comando DSADD?

    Ele vai te ajudar neste sentido. Localizei um tutorial bem completo para a manipulação das propriedades das contas do AD.

    Fonte: http://www.linhadecodigo.com.br/artigo/2793/usando-linhas-de-comando-para-gerenciar-objetos-no-active-directory.aspx

    Tecnologias

    Windows Server 2008 Standard

    Windows Server 2008 Enterprise

    Windows Server 2008 Datacenter

    Sumário

    Neste artigo serão abordados os métodos para gerenciar todo o ciclo de vida de objetos do Active Directory por linha de comando.

    Conteúdo

    Introdução

    Procedimento

    Conclusão

    Referencias

    Sobre o autor

    Introdução

    Desde o Windows 2003 existem algumas linhas de comando que podem nos auxiliar no dia-a-dia no gerenciamento de objetos do Active Directory. Muitos acham que elas não são muito úteis, mas abaixo vocês verão alguns motivos para mudar sua visão sobre esses comandos.

    Procedimento

    Comando DSADD

    Com o comando dsadd é possível criar objetos como unidades organizacionais, grupos, usuários, computadores, contatos e quotas de partições de diretório.

    Sua sintaxe é bem simples, conforme exemplos abaixo:

    dsadd {objeto} "Caminho DN" {–atributos}

    Exemplo de criação de uma OU chamada Servidores na raiz do domínio:

    dsadd ou “ou=Servidores,dc=Frango,dc=com”

    Depois do comando é necessário informar ao prompt o tipo de objeto. No caso do segundo exemplo foi usado o valor OU: (dsadd ou..) seguido do caminho LDAP do objeto. Para acesso a base do Active Directory é preciso usar a linguagem LDAP entre aspas duplas chamado Nome Distinto, ouDistinguished name (Caminho DN) em inglês: “ou=OU Teste,dc=frango,dc=com”.

    No prompt o comando ficaria desta forma:

    Figura 1 – OU Servidores

    Figura 2 – OU criada

    Em outro exemplo, numa empresa que tivesse o nome de domínio Company.com.br, o comando para criar a OU Servidores na raiz ficaria da seguinte forma:

    dsadd ou “ou=Servidores,dc=Company,dc=com,dc=br”

    Entre aspas é usada a estrutura do objeto de trás para frente: O Distinguished name. No próximo exemplo será criada uma unidade organizacional dentro da OU Servidores:

    dsadd ou "ou=Servidores de arquivos,ou=Servidores,dc=frango,dc=com"

    Figura 3 – OU Servidores de arquivos dentro da OU Servidores

    É possível criar objetos com valores dos atributos também. Na criação de um usuário, por exemplo, é possível informar a senha, o primeiro nome, descrição, etc, conforme figura 4 onde é criado um usuário Leandro Carvalho com o primeiro nome Leandro (-fn Leandro), o ultimo nome Carvalho (-ln Carvalho),User Principal Name leandroc@frango.com (-upn leandroc@frango.com) e senha Pa$$w0rd (-pwd Pa$$w0rd):

    Figura 4 – Usuário com atributos criados

    Observe que para especificar o objeto User é usada a sintaxe CN=Leandro Carvalho. Para grupo, usuário, computador e contato é usado o mesmo atributo CN. Somente a OU ficaria com o atributo OU.

    O intuito de todos os comandos abortados aqui é facilitar o cotidiano de gerenciamento de objetos. Com eles é possível criarmos, por exemplo, OUs em massa ou facilitar a criação de usuários.

    No próximo exemplo foi criado um arquivo com extensão bat para criação de várias OUs. Poderia ser usado inclusive como modelo.

    Figura 5 – Criação em massa de OUs

    Com a opção replace do próprio bloco de notas foi trocado o nome OU=SÃO PAULO para OU=RIO DE JANEIRO, criando assim toda a estrutura de OUs de uma empresa em questão de segundos.

    Figura 6 – OUs criadas

    Para criação facilitada de usuários foi usado o comando abaixo com variáveis, salvando-o no bloco de notas com a mesma extensão bat. A variável %1 seria o primeiro valor depois do arquivo no prompt, seguida da variável %2.

    Figura 7 – Modelo de criação de usuário com variáveis

    O arquivo foi salvo no C:\criauser.bat. Quando ele é chamado pelo DOS e colocado o valor Eduardo (%1) Carvalho (%2) é criado o usuário Eduardo Carvalho com os atributos configurados, conforme figura 8:

    Figura 8 – Usuário criado a partir do arquivo .bat

    Comando DSMOD

    Com o comando dsmod é possível modificarmos qualquer objeto do Active Directory usando os atributos relacionados a cada um deles. Na tabela abaixo existem alguns exemplo de atributos do objeto usuário:

    Valor

    Descrição

    -upn <UPN>             

    Valor do UPN

    -fn <primeironome>        

    Primeiro nome do usuário

    -ln <Ultimonome>         

    Último nome do usuário

    -pwd {<senha> | *}  

    Senha do usuário. Se o valor for * é preciso colocar uma senha para o usuário durante a criação do objeto

    -desc <Descrição>    

    Descrição do usuário

    -tel <NumTelefone>          

    Telefone do usuário

    -email <Email>         

    E-mail do usuário

    -mobile <NumCelular#>   

    telefone celular do usuário

    -dept <Departmento>     

    Departamento do usuário

    -mustchpwd {yes | no}  

    Especifica se o usuário precisará trocar a senha no próximo logon

    -disabled {yes | no}   

    Valor de conta desabilitada. O padrão é no.

    Tabela 1 –Atributos de usuários

    Obs: Se houverem espaços nos valores dos atributos, os mesmo devem estar entre aspas duplas.

    A sintaxe para a modificação de objetos é conforme o exemplo abaixo:

     Dsmod {objeto} “Caminho DN” {–atributos} “valor dos atributos”

    No exemplo abaixo vários atributos do usuário Leandro são modificados

    Figura 9 – Trocando os atributos do usuário Leandro Carvalho

    Comando DSMOVE

    Com o comando dsmove é possível mover ou renomear um objeto.

    A sintaxe do comando para renomear é conforme o exemplo abaixo:

    Dsmove {objeto} “Caminho DN” –newname “Novo nome”

    No exemplo da figura a seguir é renomeado o usuário Leandro Carvalho para Leandro Cavalcante.

    Figura 10 – Renomeando um objeto

    A sintaxe para mover um objeto é conforme o exemplo abaixo:

    Dsmove {objeto} “Caminho DN” –newparent caminhoDNDestino

    Nesta próxima figura o usuário Leandro Cavalcante é movido para a OU Suporte.

    Figura 11 – Movendo um objeto

    Comando DSQUERY

    Para procurar objetos no Active Directory é preciso usar o comando dsquery com a seguinte sintaxe.

    Dsquery {objeto} {-atributos} “Valor do atributo”

    Neste exemplo é feita uma pesquisa de usuários que comecem com a letra L:

    Figura 12 – Procura de usuários que comecem com a letra L

    No exemplo da figura 13 é pesquisado os computadores que não fazem logon a n semanas, onde n é o numero de semanas do atributo -inactive. É um ótimo comando para procurar contas de computadores que não estão sendo utilizadas no seu ambiente.

    Figura 13 – Computadores inativos

    Comando DSGET

    O comando dsget é utilizado para exibir as propriedades de um objeto do Active Directory.

    A sintaxe do comando é conforme o exemplo abaixo:

    Dsget {objeto} “caminho DN”

    Na figura abaixo são exibido os atributos do usuário Leandro Carvalho:

    Figura 14 – Atributos exibidos com o dsget

    Comando DSRM

    Para exclusão de qualquer objeto é usado o comando dsrm.

    A sintaxe do comando é conforme o exemplo abaixo:

    Dsrm “caminho DN”

    Neste comando não é necessário colocar o tipo de objeto, somente o caminho DN.

    Figura 15 – Exclusão de objetos com o dsrm

    Conclusão

    Este artigo abordou os métodos de gerenciamento de objetos do Windows Server 2008.

    Abs


    * Ajude a organizar melhor o Fórum, dando Feedback sobre a dúvida solicitada, e marcando como Útil e como Resposta, a postagem dos colaboradores que resolveram o seu caso, ou foram úteis *

    quarta-feira, 6 de junho de 2012 22:50
    Moderador
  • Com o DSMOD USER
    Fonte: 
    http://technet.microsoft.com/en-us/library/cc732954(WS.10).aspx

    Dsmod user

    15 out of 16 rated this helpful Rate this topic

    Updated: April 17, 2012

    Applies To: Windows Server 2008

    Modifies attributes of one or more existing users in the directory.

    Dsmod is a command-line tool that is built into Windows Server 2008. It is available if you have the Active Directory Domain Services (AD DS) server role installed. To use dsmod, you must run the dsmod command from an elevated command prompt. To open an elevated command prompt, click Start, right-click Command Prompt, and then click Run as administrator.

    For examples of how to use this command, see Examples.

    dsmod user <UserDN> ... [-upn <UPN>] [-fn <FirstName>] [-mi <Initial>] [-ln <LastName>] [-display <DisplayName>] [-empid <EmployeeID>] [-pwd (<Password> | *)] [-desc <Description>] [-office <Office>] [-tel <PhoneNumber>] [-email <E-mailAddress>] [-hometel <HomePhoneNumber>] [-pager <PagerNumber>] [-mobile <CellPhoneNumber>] [-fax <FaxNumber>] [-iptel <IPPhoneNumber>] [-webpg <WebPage>] [-title <Title>] [-dept <Department>] [-company <Company>] [-mgr <Manager>] [-hmdir <HomeDirectory>] [-hmdrv <DriveLetter>:] [-profile <ProfilePath>] [-loscr <ScriptPath>] [-mustchpwd {yes | no}] [-canchpwd {yes | no}] [-reversiblepwd {yes | no}] [-pwdneverexpires {yes | no}] [-acctexpires <NumberOfDays>] [-disabled {yes | no}] [{-s <Server> | -d <Domain>}] [-u <UserName>] [-p {<Password> | *}][-c] [-q] [{-uc | -uco | -uci}]
    

     

    Parameter Description

    <UserDN>

    Required. Specifies the distinguished names of the users that you want to modify. If values are omitted, they are obtained through standard input (stdin) to support piping of output from another command to input of this command.

    -upn <UPN>

    Specifies the user principal names (UPNs) of the users that you want to modify, for example, Linda@widgets.contoso.com.

    -fn <FirstName>

    Specifies the first names of the user objects you want to modify.

    -mi <Initial>

    Specifies the middle initials of the user objects you want to modify.

    -ln <LastName>

    Specifies the last names of the user objects you want to modify.

    -display <DisplayName>

    Specifies the display names of the user objects you want to modify.

    -empid <EmployeeID>

    Specifies the employee IDs of the user objects you want to modify.

    -pwd {<Password> | *}

    Resets the passwords for the users that you want to modify as Password or an asterisk (*). If you type *, AD DS prompts you for a user password.

    -desc <Description>

    Specifies the descriptions of the user objects you want to modify.

    -office <Office>

    Specifies the office locations of the user objects you want to modify.

    -tel <PhoneNumber>

    Specifies the telephone numbers of the user objects you want to modify.

    -email <E-mailAddress>

    Specifies the e-mail addresses of the user objects you want to modify.

    -hometel <HomePhoneNumber>

    Specifies the home telephone numbers of the user objects you want to modify.

    -pager <PagerNumber>

    Specifies the pager numbers of the user objects you want to modify.

    -mobile <CellPhoneNumber>

    Specifies the cell numbers of the user objects you want to modify.

    -fax <FaxNumber>

    Specifies the fax numbers of the user objects you want to modify.

    -iptel <IPPhoneNumber>

    Specifies the IP phone numbers of the user objects you want to modify.

    -webpg <WebPage>

    Specifies the Web page URLs of the user objects you want to modify.

    -title <Title>

    Specifies the titles of the user objects you want to modify.

    -dept <Department>

    Specifies the departments of the user objects you want to modify.

    -company <Company>

    Specifies the company information of the user objects you want to modify.

    -mgr <Manager>

    Specifies the distinguished names of the managers of the user objects you want to modify.

    You can only use the distinguished name format to specify the manager.

    -hmdir <HomeDirectory>

    Specifies the home directory locations of the user objects you want to modify. IfHomeDirectory is given as a UNC name, you must specify a mapped drive to this path by using the -hmdrv parameter.

    -hmdrv <DriveLetter> :

    Specifies the home directory drive letters (for example, E:) of the user objects you want to modify.

    -profile <ProfilePath>

    Specifies the profile paths of the user objects you want to modify.

    -loscr <ScriptPath>

    Specifies the logon script paths of the user objects you want to modify.

    -mustchpwd{ yes| no}

    Specifies whether users must change their passwords when they next log on. The available values are yes and noYes indicates that users must change their passwords and noindicates that they do not have to change their passwords.

    -canchpwd {yes | no}

    Specifies whether users can change their passwords. The available values are yes and no.Yes indicates that users can change their passwords and no indicates that they cannot change their passwords. The value of this parameter must be yes if the value of the -mustchpwdparameter is yes.

    -reversiblepwd {yes | no}

    Specifies whether AD DS stores user passwords by using reversible encryption. The available values are yes and noYes indicates that AD DS stores user passwords by using reversible encryption and no indicates that AD DS does not store user passwords by using reversible encryption.

    -pwdneverexpires {yes | no}

    Specifies whether user accounts never expire. The available values are yes and noYesindicates that user passwords never expire and no indicates that user passwords do expire.

    -acctexpires <NumberOfDays>

    Specifies the number of days from today that the user accounts expire. A value of 0 sets expiration at the end of today. A positive value sets expiration in the future. A negative value sets expiration in the past. The value of never sets the account to never expire. For example, a value of 0 specifies that the account expires at the end of today. A value of -5specifies that the account expires 5 days in the past. A value of 5 specifies that the account expires 5 days in the future.

    -disabled {yes | no}

    Specifies whether AD DS disables user accounts for logon. The available values are yesand noYes indicates that AD DS disables user accounts for logon and no indicates that AD DS does not disable user accounts for logon.

    {-s <Server> | -d <Domain>}

    Connects a computer to a remote server or domain that you specify. By default, dsmodconnects the computer to the domain controller in the logon domain.

    -u <UserName>

    Specifies the user name with which the user logs on to a remote server. By default, -u uses the user name with which the user logged on. You can use any of the following formats to specify a user name:

    • user name (for example, Linda)
    • domain\user name (for example, widgets\Linda)
    • user principal name (UPN) (for example, Linda@widgets.contoso.com)

    -p {<Password> | *}

    Specifies to use either a password or an asterisk (*) to log on to a remote server. If you type *dsmod prompts you for a password.

    -c

    Reports errors, but continues with the next object in the argument list when you specify multiple target objects (continuous operation mode). If you do not supply this parameter,dsmod exits when the first error occurs.

    -q

    Suppresses all output to standard output (quiet mode).

    {-uc | -uco | -uci}

    Specifies that output or input data is formatted in Unicode. The following list explains each format.

    • -uc: Specifies a Unicode format for input from or output to a pipe (|).
    • -uco : Specifies a Unicode format for output to a pipe (|) or a file.
    • -uci: Specifies a Unicode format for input from a pipe (|) or a file.

    /?

    Displays help at the command prompt.

    • If a value that you supply contains spaces, use quotation marks around the text, for example, "CN=Mike Danseglio,CN=Users,DC=Contoso,DC=Com".
    • If you supply multiple values for a parameter, use spaces to separate the values, for example, a list of distinguished names.
    • You can use the token $username$ (case insensitive) to replace the Security Accounts Manager (SAM) account name in the value of the -webpg-profile-hmdir, and -email parameters. For example, if a SAM account name is Denise, you can use either of the following formats for the -hmdir location parameter:

      -hmdir \users\Denise\home 

      -hmdir \users\$username$\home 
    • This command supports only a subset of commonly used object class attributes.
    • Dsmod does not support the addition of security principals in one forest to groups that are located in another forest when a forest trust joins both forests. You can use Active Directory Users and Computers to add security principals across a forest trust.

    To reset the password for Don Funk and force him to change his password when he next logs on to the network, type:

    dsmod user "CN=Don Funk,CN=Users,DC=Contoso,DC=Com" -pwd A1b2C3d4 -mustchpwd yes 
    

    To reset multiple user passwords to a common password and force users to change their passwords when they next log on to the network, type:

    dsmod user "CN=Don Funk,CN=Users,DC=Contoso,DC=Com" "CN=Denise Smith,CN=Users,DC=Contoso,DC=Com" -pwd A1b2C3d4 -mustchpwd yes 
    

    To disable multiple user accounts at the same time, type:

    dsmod user "CN=Don Funk,CN=Users,DC=Contoso,DC=Com" "CN=Denise Smith,CN=Users,DC=Contoso,DC=Com" -disabled yes 
    

    To modify the profile path of multiple users to a common path using the $username$ token, type:

    dsmod user "CN=Don Funk,CN=Users,DC=Contoso,DC=Com" "CN=Denise Smith,CN=Users,DC=Contoso,DC=Com" -profile \users\$username$\profile

    * Ajude a organizar melhor o Fórum, dando Feedback sobre a dúvida solicitada, e marcando como Útil e como Resposta, a postagem dos colaboradores que resolveram o seu caso, ou foram úteis *

    quarta-feira, 6 de junho de 2012 22:54
    Moderador
  • Caju,

    O seu script lê uma planilha que tem duas colunas:Usuario e Departamento, acrescente mais uma coluna com a informação de e-mail.

    No seu script adicionei somente mais duas linhas: uma que lê a terceira coluna da planilha (e-mail) e outra que grava o atributo no usuário

    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  'coluna 1 do arquivo do excel'
    	Departamento = objExcel.Cells(intRow,2).Value 'coluna 2 do arquivo do excel'
    	strEmail = objExcel.Cells(intRow,3).Value     'coluna 3 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.mail = strEmail
    	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
    


    Fábio de Paula Junior

    quinta-feira, 7 de junho de 2012 02:25
    Moderador
  • Fabio Jr deu um erro na linha 4. E mais 1 detalhe, eu não quero incluir o departamento, é só tirar a linha ou é melhor comenta-lá ????
    segunda-feira, 11 de junho de 2012 16:50
  • Caju,

    Não consegui simular erro na linha 4, pode mandar um print da tela? E qual é a sua linha 4?

    Para não incluir o departamento basta comentar a linha

    'objUser.department = Departamento

    Agora um detalhe, o e-mail tem que estar na coluna 3 da planilha.

    Fábio de Paula Junior

    segunda-feira, 11 de junho de 2012 17:10
    Moderador
  • 

    Fabio, 

    esse é o erro.

    segunda-feira, 11 de junho de 2012 17:14
  • Permissão negada? Essa linha tenta apenas criar um arquivo txt na mesma pasta onde está o .vbs.

    Este txt contém um log de usuários não encontrados, você pode tirar isto do script fazendo o seguinte:

    1)Comente a linha

    OutPutFile.WriteLine UserObj.FullName & " - " & "Não encontrado a OU" & VBCRLF

    e abaixo dela coloque

    wscript.echo UserObj.FullName & " - " & "Não encontrado a OU" 
    assim ele vai imprimir os erros na tela.

    2) Comente a linha

    Set OutPutFile = FileSystem.CreateTextFile("Resultado.txt", True)
    

    É esta que dá erro, certo?

    Ao executar o script dê preferencia a fazer isto no prompt de comando, basta digitar cscript <caminho\nomedoscript> , assim os erros vão aparecer no prompt, se você der dois clicks vai aparecer popus na tela.


    Fábio de Paula Junior

    segunda-feira, 11 de junho de 2012 17:24
    Moderador
  • Fabio,

    Para comentar a linha se usa o parentese correto? se sim, eu fiz !

    E agora apresenta o erro na mesma linha mais com a mensagem de "Instrução esperada" 

    segunda-feira, 11 de junho de 2012 17:45
  • Para comentar se usa apóstrofo   '  , exemplo

    ' isto é um comentário

    http://pt.wikipedia.org/wiki/Ap%C3%B3strofo


    Fábio de Paula Junior

    segunda-feira, 11 de junho de 2012 18:28
    Moderador
  • Fabio,

    Fiz o comentário na linha, rodei o programa pelo prompt de comando e não fez nada. Não apresentou nenhum erro ou se quer atribuiu os dados no usuário.

    E agora oque eu faço? rs

    segunda-feira, 11 de junho de 2012 19:22
  • Cola seu script aqui.

    Fábio de Paula Junior

    segunda-feira, 11 de junho de 2012 19:24
    Moderador
  • 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:\user.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  'coluna 1 do arquivo do excel'
    Departamento = objExcel.Cells(intRow,2).Value 'coluna 2 do arquivo do excel'
    strEmail = objExcel.Cells(intRow,3).Value     'coluna 3 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
    wscript.echo UserObj.FullName & " - " & "Não encontrado a OU"
    End if

    set objUser = GetObject("LDAP://dc=brasilcenter,dc=com,dc=brcn=" & LCase(UserObj.FullName) & "," & LCase(OU))
    'objUser.department = Departamento
    objUser.mail = strEmail
    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
    segunda-feira, 11 de junho de 2012 19:45
  • Eu tinha entendido que você já tinha usado este script e precisava apenas uma modificação, não é o caso certo?

    Me diz uma coisa, como está sua planilha, qual informação tem na primeira coluna? é o nome ou login do usuário?

    Passa um exemplo de umas duas linhas da sua planilha.


    Fábio de Paula Junior


    segunda-feira, 11 de junho de 2012 21:12
    Moderador
  • Isso mesmo, estou usando esse script como parâmetro.

    segue o print:

    terça-feira, 12 de junho de 2012 12:06
  • Fiz algumas alterações:

    Rode pelo prompt, assim vc vai ver mensagens(procurando, atualizando...)

    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:\user.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")
     
     
    DomainString = WSHNetwork.UserDomain
     
    Do Until objExcel.Cells(intRow,1).Value = ""
    	UserString = objExcel.Cells(intRow, 1).Value  'coluna 1 do arquivo do excel'
    	Departamento = objExcel.Cells(intRow,2).Value 'coluna 2 do arquivo do excel'
    	strEmail = objExcel.Cells(intRow,3).Value     'coluna 3 do arquivo do excel'
    
    	'Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString) 
    	wscript.echo "Localizando: " & UserString
    	strLDAP = BuscaOU(UserString)
    
    	if Len(strLDAP) = 0 Then
    		'OutPutFile.WriteLine UserObj.FullName & " - " & "Não encontrado a OU" & VBCRLF
    		wscript.echo vbtab & "Usuário não encontrado"
    		
    	else
    		wscript.echo vbtab & "Usuário encontrado, atualizando..."
    		set objUser = GetObject("LDAP://" & strLDAP )
    		'objUser.department = Departamento
    		objUser.mail = strEmail
    		objUser.setInfo
    	End if
    	
    	intRow = intRow + 1
    Loop
     
    objExcel.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)sAMAccountName=" & 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


    Fábio de Paula Junior

    terça-feira, 12 de junho de 2012 16:49
    Moderador
  • Fabio agora esta dando usuário não encontrado.
    terça-feira, 12 de junho de 2012 19:25
  • Fabio agora esta dando usuário não encontrado.
    Fabio, em qual linha eu ponho o caminho LDAP ??
    terça-feira, 12 de junho de 2012 20:11
  • Não precisa por, na parte onde faz a pesquisa ele já vai trazer o caminho distinto do usuário.

    Só me confirme: Na sua primeira coluna é o login do usuário, certo?


    Fábio de Paula Junior

    quarta-feira, 13 de junho de 2012 11:31
    Moderador
  • Sim, esta como na imagem que eu lhe enviei.

    Mais eu reparei que ele está tentando localizar ate o "user" como segue no print:

    quarta-feira, 13 de junho de 2012 14:02
  • tenta este e passa o resultado com a tela igual vc fez agora.

    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:\user.xls")
    intRow = 2
      
     
    dim DomainString, UserString, WSHNetwork, WSHShell
    dim UserObj, GroupObj
     
    ON ERROR RESUME NEXT
     
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
     
     
    DomainString = WSHNetwork.UserDomain
     
    Do Until objExcel.Cells(intRow,1).Value = ""
    	UserString = objExcel.Cells(intRow, 1).Value  'coluna 1 do arquivo do excel'
    	Departamento = objExcel.Cells(intRow,2).Value 'coluna 2 do arquivo do excel'
    	strEmail = objExcel.Cells(intRow,3).Value     'coluna 3 do arquivo do excel'
    
    	'Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString) 
    	wscript.echo "Localizando: " & UserString
    	strLDAP = BuscaOU(UserString)
    
    	if Len(strLDAP) = 0 Then
    		'OutPutFile.WriteLine UserObj.FullName & " - " & "Não encontrado a OU" & VBCRLF
    		wscript.echo vbtab & "Usuário não encontrado"
    		
    	else
    		wscript.echo vbtab & strLDAP
    		wscript.echo vbtab & "Usuário encontrado, atualizando..."
    		set objUser = GetObject("LDAP://" & strLDAP )
    		'objUser.department = Departamento
    		objUser.mail = strEmail
    		objUser.setInfo
    	End if
    	
    	intRow = intRow + 1
    Loop
     
    objExcel.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)(sAMAccountName=" & 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


    Fábio de Paula Junior

    • Marcado como Resposta CaJu_Jr quarta-feira, 13 de junho de 2012 14:59
    • Não Marcado como Resposta CaJu_Jr quarta-feira, 13 de junho de 2012 14:59
    • Marcado como Resposta CaJu_Jr quarta-feira, 13 de junho de 2012 15:00
    quarta-feira, 13 de junho de 2012 14:47
    Moderador
  • Grande Fabio.

    Muito obrigado irmão, feito com sucesso.

    quarta-feira, 13 de junho de 2012 15:00
  • O primeiro não funcionou porque ele não utilizava o campo login para fazer a pesquisa.

    O segundo não funcionou porque eu fui alterar para o login e esqueci de colocar um parentesis "(".


    Fábio de Paula Junior

    quarta-feira, 13 de junho de 2012 15:19
    Moderador
  • Um erro que não desmerece um bom trabalho.

    Muito obrigado.

    quarta-feira, 13 de junho de 2012 15:36
  • Executei o Script tudo blz so que ele não atualiza as informação no AD, sabe me dizer o que pode ser
    sexta-feira, 16 de maio de 2014 20:24
  • Usa a ferramenta ADModify. Ela deixa você fazer algo como %Username%@email.com.br em massa e é gráfica.

    Abs!!


    Atenciosamente Julio Araujo

    sexta-feira, 16 de maio de 2014 20:34
  • sexta-feira, 16 de maio de 2014 20:56
    Moderador