none
Script criar usuários em massa no AD 2008 RRS feed

  • Pergunta

  • Olá a todos, 

    Eu estou a algum tempo com necessidade de um script que possibilite criar várias contas de usuários em meu domain controller, ví um tópico aqui mesmo na technet com esse seguinte script:

    ####################################################

    @echo off  
    dsadd user "CN=%1, OU=temp, DC=nwtraders, DC=msft" -samid %1 -Display %2 -upn %1@%USERDNSDOMAIN% -pwd P@ssw0rd 

    Neste caso se você criar uma arquivo chamado criauser.bat a sintaxe será:
    criauser nomedelogon "nome do usuario"
    Exemplo:
    criauser danield "Daniel Donda" 

    Outros parametros podem ser passados, porém se você precisa criar rapido, quanto menos melhor.
    Só para constar:
    -samid é o nome de logon pré-Windows 2000
    -CN é o nome de logon
    -Display é o nome do usuário completo
    -upn é o nome principal do usuario
    -pwd é a senha

    ###########################################

    Eu gostaria de saber se consigo por os parâmeros no .bat e ao executa-lo chamaria um .txt onde nele estaria a relação de logins a serem criados, por exemplo eu executaria o script assim:

    criauser.bat usuarios.txt

    ##################################

    Eu também achei esse script em vb, mas nele ocorre o seguinte erro, se ele ao tentar criar algum login o qual já exista, ele da erro e para a execução, gostaria de alterar o script fazendo com que quando ele encontra-se algum login que já existisse, pulasse para o próximo.

    o script é esse:

    ##########################################

    ' UserSpreadsheet .vbs
    ' Sample VBScript to create User accounts from a spreadsheet
    ' Author Guy Thomas http://computerperformance.co.uk/
    ' Version 4.6 - June 2010
    ' ------------------------------------------------------' 
    Option Explicit
    Dim objRootLDAP, objContainer, objUser, objShell
    Dim objExcel, objSpread, intRow
    Dim strUser, strOU, strSheet
    Dim strCN, strSam, strPWD
    
    ' -----------------------------------------------'
    ' Important change OU= and strSheet to reflect your domain
    ' -----------------------------------------------'
    
    strOU = "OU=ALUNOS,OU=EMPRESA," ' Note the comma
    strSheet = "C:\scripts\usuarios.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) 
       strPWD = Trim(objExcel.Cells(intRow, 3).Value)
       
       ' Build the actual User from data in strSheet.
       Set objUser = objContainer.Create("User", "cn=" & strCN)
       objUser.userPrincipalName = strSam
       objUser.sAMAccountName = strSam
       objUser.SetInfo
    
       ' 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 
    
    WScript.Quit 
    
    ' End of free example UserSpreadsheet VBScript.


    Espero de verdade que alguém possa me tirar desse sufoco.



    • Editado Fábio JrModerator terça-feira, 3 de setembro de 2013 21:56 Apaguei parte duplicada
    terça-feira, 3 de setembro de 2013 19:23

Respostas

  • Teste e me diga se funcionou.

    ' UserSpreadsheet .vbs
    ' Sample VBScript to create User accounts from a spreadsheet
    ' Author Guy Thomas http://computerperformance.co.uk/
    ' Version 4.6 - June 2010
    ' ------------------------------------------------------' 
    Option Explicit
    Dim objRootLDAP, objContainer, objUser, objShell
    Dim objExcel, objSpread, intRow
    Dim strUser, strOU, strSheet
    Dim strCN, strSam, strPWD
    
    ' -----------------------------------------------'
    ' Important change OU= and strSheet to reflect your domain
    ' -----------------------------------------------'
    
    strOU = "OU=ALUNOS,OU=EMPRESA," ' Note the comma
    strSheet = "C:\scripts\usuarios.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) 
       strPWD = Trim(objExcel.Cells(intRow, 3).Value)
    
    if not UserExiste(strSam) then
       
       ' Build the actual User from data in strSheet.
       Set objUser = objContainer.Create("User", "cn=" & strCN)
       objUser.userPrincipalName = strSam
       objUser.sAMAccountName = strSam
       objUser.SetInfo
    
       ' Separate section to enable account with its password
       objUser.userAccountControl = 512
       objUser.pwdLastSet = 0
       objUser.SetPassword strPWD
       objUser.SetInfo
    
    end if
    
    intRow = intRow + 1
    Loop
    objExcel.Quit 
    
    WScript.Quit 
    
    ' End of free example UserSpreadsheet VBScript.
    
    Function UserExiste(sam)
    	on error resume next
    	Set objConnection = CreateObject("ADODB.Connection") 
    	Set objCommand = CreateObject("ADODB.Command") 
    	objConnection.Provider = "ADsDSOOBject"
    	objConnection.Open "Active Directory Provider"
    	Set objCommand.ActiveConnection = objConnection
    	Set objRootDSE = GetObject("LDAP://RootDSE") 
    	strDNSDomain = objRootDSE.Get("defaultNamingContext") 
    	strBase = "<LDAP://" & strDNSDomain & ">" 
    	strFilter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" & sam & "))" 
    	strAttributes = "distinguishedName,sAMAccountName"
    	strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
    	objCommand.CommandText = strQuery
    	objCommand.Properties("Page Size") = 99999
    	objCommand.Properties("Timeout") = 300
    	objCommand.Properties("Cache Results") = False
    	Set objRecordSet = objCommand.Execute
    	objRecordSet.MoveFirst
    	Do Until objRecordSet.EOF
    		UserExiste = True
    		exit do
    		'objRecordSet.MoveNext
    
    	Loop
    	objConnection.Close
    
    	on error goto 0
    End Function


    Fábio de Paula Junior

    quarta-feira, 4 de setembro de 2013 22:07
    Moderador

Todas as Respostas

  • Luiz, não indico a utilização de um Script em Powershell.

    Segue um exemplo que desenvolvi:

    Tente analisar e verifique se é possível utilizá-lo em sem ambiente.

    #Impota o modulo powershell do ActiveDirectory.
    Import-Module ActiveDirectory
    Import-Module Lync
    
    $hora = Get-Date
    
    #Adiciona o snap-in do exchange 2010.
    if ( (Get-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue) -eq $null )
    {
        Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
    }
    
    
    #atribui as condições de importação do arquivo CSV para a variável "$CSV"
    $CSV = Import-Csv -Delimiter ";" -path ".\usrs.csv"
    
    #para cada entrada no arquivo .csv:
    foreach ($campo in $CSV)
    { 
    Write-Host $campo.NOMECOMPLETO
    
    
    
    #Define a OU de criação:
        $ou="nome da ou"
        #Divide o nome do usuário por espaços:
        $array=$campo.NOMECOMPLETO.Split(" ")
        #pega o ultimo nome do usuário:
        $sobrenome = $array[$array.count-1]
        
        #___________________________________________________________________________________________________
            
        #Verifica se o usuário possui no final de seu nome um Agnome listado abaixo:
        $arragnome = "FILHA","NETA","FILHO","NETO","JUNIOR"
        
            IF ($arragnome -contains $sobrenome)
            {
                $sobrenome = $array[$array.count-2]
                Write-Host "corrigindo nome
                "   
            }
    
        
        
        #___________________________________________________________________________________________________
        
        #separa a matricula do gestor do nome do gestor.
        
        $gestor = $campo.GESTOR.Substring(1,8)
        
        #___________________________________________________________________________________________________
        
        #importa os dados da fonte e posiciona em variaveis:
        $SAM=$campo.MATRÍCULA
        $displayname=$campo.NOMECOMPLETO.ToUpper()
        $firstname=$campo.NOME.ToUpper()
        $lastname=$sobrenome.ToUpper()
        $upn=$campo.NOME.ToUpper()
        #Linha que define o Password:
        $Password="Pa$$w0rd"
        $homedir = "homepath"+$SAM
        
        #___________________________________________________________________________________________________
        
        #Veririca qual é a empresa que o usuário pertence na fonte de dados e traduz para o nome da empresa:
        $Nempresa = $campo.EMPRESA
            
            switch($Nempresa)
            {
                /*para quando há mais de uma empresa*/
    
            } 
      
        $Email = $SAM + $mail
        
        
      
        
        #______________________________________________________________________________________________________
        
       #checa se o usuário já está presente na OU de criação:
        $existe = Get-ADUser -Filter 'name -eq $displayname' -SearchBase "OU DE CRIAÇÃO" 
        
            if ($existe.objectclass -eq "user")
            {
                Write-Host "!ATENÇÃO! ESTE USUÁRIO OU UM USUÁRIO COM O MESMO NOME JA EXISTE NESTA OU, este usuário será criado na ou Users" 
                $ou = "NOVA OU"
            }
    
        #_______________________________________________________________________________________________________
        
        #Comando de criação do usuário do AD baseado no módulo AD do Powershell
        New-ADUser `
            -Name $displayname `
            -SamAccountName $SAM `
            -UserPrincipalName $EMAIL `
            -DisplayName $Displayname `
            -GivenName $firstname `
            -Surname $sobrenome `
            -Enabled $true `
            -Path $ou `
            -Manager $gestor `
            -Office $campo.SEDE `
            -Title $campo.CARGO `
            -Company $empresa `
            -Department $campo.DEPARTAMENTO `
            -Description $campo.DEPARTAMENTO `
            -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) `
            -ChangePasswordAtLogon $true `
            -city $campo.CIDADE `
            -state $campo.ESTADO `
            -PostalCode $campo.CEP `
            -StreetAddress $campo.ENDEREÇO `
            -HomeDirectory $Homedir `
            -HomeDrive "Z:"
            
            
            #__Adiciona_o_pais_como_Brazil_BR________________________________________
            
            Start-Sleep -Milliseconds 500
            Set-ADUser -Identity $SAM -Add @{c="BR"}
            
                   #________________________________________________________________________
            
            #pausa por 3 segundos:
            
            Start-Sleep -Milliseconds 3000
            
            #________________________________________________________________________
            
            #Cria a MailBox e aplica as regras do Exchange:
            
            Enable-Mailbox -Identity $Email -Database nomedodb -Alias $SAM
            
            #pausa por 1,5 segundos:
            Start-Sleep -Milliseconds 1500
    
            Write-Host "
            -> O usuário acima foi criado com sucesso
            "
            
            
            
            
    }
    
    #__________________________________________________________________________________________
    #Começa a correção dos usuários para corrigir os números gerados pela política do Exchange.|
    #__________________________________________________________________________________________
    Write-Warning "Iniciando função de correção..."
    Start-Sleep -Seconds 15
    
    foreach ($campo in $CSV)
    {
    
           $Nempresa = $campo.EMPRESA
    
           switch($Nempresa)
            {
    /*para caso de varia empresas*/
    
            } 
      
         $Email = $SAM + $mail
        
        
       
        Start-Sleep -Milliseconds 2000
        
        #Verifica o e-mail do usuário baseado na matrícula presente na fonte de dados:
        
        $MatriculaUsuario = $campo.MATRÍCULA
    
        $arruser = Get-ADUser -Identity $MatriculaUsuario -Properties *
        
        $usrEmail = $arruser.EmailAddress
            
        Write-Host "-----------------------------------------" `n $arruser.Name `n
       
        
        #____________________________________________________________
     
        #filtra o ultimo nome do usuário:
        
        $array=$campo.NOMECOMPLETO.Split(" ")
        
        $sobrenome= $array[$array.count-1]
    
        $nome=$campo.nome.toupper() -replace '\s'
        
        
        #verifica se há algum agnome presente no nome do usuário:
        
        $arragnome = "FILHA","NETA","FILHO","NETO","JUNIOR"
        
            IF ($arragnome -contains $sobrenome)
            {
                $sobrenome = $array[$array.count-2]
                Write-Host "Contém Agnome"   
            }
            else
            {
                Write-Host "Não contém Agnome"
            }
        
        #Junta o nome do usuário com o domínio de e-mail:
        $userprincipalname_1 = $nome + "." + $sobrenome.toupper().Substring(0,1) + $mail
        
        #define quem é o usuário atual dentro do laço (para fins de log)
        $usratual = $campo.NOME + " " + $sobrenome
    	$NomeCompletoUsrAtual = $campo.NOMECOMPLETO.ToUpper()
        
        #captura o comprimento do Sobrenome do usuário:
        $comprimentosobrenome = $sobrenome.Length
        
        #Verifica se o e-mail do usuário criado no AD ($usrEmail) é DIFERENTE do e-mail criado pela definição da política ($userprincipalname_1) 
        if($usrEmail -ne $userprincipalname_1)
        {
            Write-Host "e-mails:" `n `n "atual ->" $usrEmail `n `n  "novo->" $userprincipalname_1 `n 
       
            #___________________________________________________________________________________
            #faz a captura do usuário no AD para verificar se ele existe:
               if( (Get-ADUser -filter "emailaddress -eq '$userprincipalname_1'") -eq $null ) 
               {
                    $existe_1 = "0"
                    Write-Host "$userprincipalname_1 está disponível"`n
               } 
               else 
               {
                    $existe_1 = "1"
                    
                    Write-Host "$userprincipalname_1 já existe"`n
               }
        
            #___________________________________________________________________________________
            #aplica uma substring que captura os 2 primeiros digitos do ultimo nome do usuário:
            $userprincipalname_2 = $nome + "." + $sobrenome.toupper().Substring(0,2) + $mail
            #verifica se o usuário com a segunda letra retorna positivo.
               if( (Get-ADUser -filter "emailaddress -eq '$userprincipalname_2'") -eq $null ) 
               {
                    $existe_2 = "0"
                    Write-Host "$userprincipalname_2 está disponível"`n
               } 
               else 
               {
                    $existe_2 = "1"
                    
                    Write-Host "$userprincipalname_2 já existe"`n
               }  
            #___________________________________________________________________________________
            If($comprimentosobrenome -lt "3")
            {
    			$comprimento2 = "
    			o sobrenome do usuário $usratual possui apenas 4 letras"
            } 
    		else
    		{
    		    #aplica uma substring que captura os 3 primeiros digitos do ultimo nome do usuário:
                $userprincipalname_3 = $nome + "." + $sobrenome.toupper().Substring(0,3) + $mail
                #faz a captura do usuário no AD para verificar se um usuário com a terceira letra do sobrenome também ja existe:
                #verifica se o usuário com a segunda letra retorna positivo.
                    if( (Get-ADUser -filter "emailaddress -eq '$userprincipalname_3'") -eq $null ) 
                    {
                        $existe_3 = "0"
                        
                        Write-Host "$userprincipalname_3 está disponível" `n
                    } 
                    else 
                    {
                        $existe_3 = "1"
                        
                        Write-Host "$userprincipalname_3 já existe"`n
                    }
    		}
            #___________________________________________________________________________________
            If($comprimentosobrenome -lt "4")
            {
    			$comprimento3 = "
    			o sobrenome do usuário $usratual possui apenas 4 letras"
            }
    		else
    		{
    		    #aplica uma substring que captura os 4 primeiros digitos do ultimo nome do usuário:
                $userprincipalname_4 = $nome + "." + $sobrenome.toupper().Substring(0,4) + $mail
                #faz a captura do usuário no AD para verificar se um usuário com a terceira letra do sobrenome também ja existe:
                #verifica se o usuário com a segunda letra retorna positivo.
                    if( (Get-ADUser -filter "emailaddress -eq '$userprincipalname_4'") -eq $null ) 
                    {
                        $existe_4 = "0"
                        Write-Host "$userprincipalname_4 está disponível" `n
                    } 
                    else 
                    {
                        $existe_4 = "1"
                        Write-Host "$userprincipalname_4 já existe"`n
                    }
    		}
            #___________________________________________________________________________________
            if($comprimentosobrenome -lt 5)
            {
    			$comprimento4 = "
    			o sobrenome do usuário $usratual possui apenas 4 letras"
            }
            else
    		{
    	        $userprincipalname_5 = $nome + "." + $sobrenome.toupper().Substring(0,5) + $mail
                #Write-Host "será usado o endereço $userprincipalname_5" `n
    		}
    		#___________________________________________________________________________________
            #se o usuário com 1 letra já existe...
            if($existe_1 -eq "1")
            {
                    Write-Host "o usuário com 1 letra já existe..."
                    Start-Sleep -m 300
                    #...e se o usuário com duas letras também ja existe...
                    if($existe_2 -eq "1")
                    {
                            Write-Host "o usuário com 2 letra já existe..."
                            Start-Sleep -m 300
                    
                             if($existe_3 -eq "1" -and $comprimentosobrenome -gt "2")
                             {
                                     Write-Host "o usuário com 3 letra já existe..."
                                     Start-Sleep -m 300
                            
                                      if($existe_4 -eq "1" -and $comprimentosobrenome -gt "3")
                                      { 
                                              Write-Host "o usuário com 4 letra já existe..."
                                              Start-Sleep -m 300
                                              
                                         Set-Mailbox -Identity $campo.MATRÍCULA -UserPrincipalName $userprincipalname_5 -EmailAddresses $userprincipalname_5 -EmailAddressPolicyEnabled $false
                                         Write-Host "usuário $usratual foi corrigido em nível 5 (dicionadas 5 letras do sobrenome)"
                                         Start-Sleep -Milliseconds 300
                                         
                                      }
                                      else
                                      {
    									  if($comprimentosobrenome -gt "3")
    	                                    {
    											#adiciona a substring de 4 ultimas letras do ultimo nome do usuário...
    		                                    Set-Mailbox -Identity $campo.MATRÍCULA -UserPrincipalName $userprincipalname_4 -EmailAddresses $userprincipalname_4 -EmailAddressPolicyEnabled $false
    		                                    Write-Host "usuário $usratual foi corrigido em nível 4 (dicionadas 4 letras do sobrenome)"
    		                                    Start-Sleep -Milliseconds 300
    										}
    										else
    										{
    										 	$definidomanual = Read-Host "`n`n`nO usuário $NomeCompletoUsrAtual não possui um sobrenome grande suficiente para definir um e-mail dentro da política, favor insira um endereço de e-mail para $usratual `nO formato para o endereço deve ser: usuario@dominio.com.br`n"
    											Set-Mailbox -Identity $campo.MATRÍCULA -UserPrincipalName $definidomanual -EmailAddresses $definidomanual -EmailAddressPolicyEnabled $false
    								            Write-Host "usuário $usratual foi corrigido manualmente"
    											
    										}
                                      }
                            }
                            else
                            {
                             if($comprimentosobrenome -gt "2")
    						 {
    							 #adiciona a substring de 3 ultimas letras do ultimo nome do usuário...
    	                         Set-Mailbox -Identity $campo.MATRÍCULA -UserPrincipalName $userprincipalname_3 -EmailAddresses $userprincipalname_3 -EmailAddressPolicyEnabled $false
    	                         Write-Host "usuário $usratual foi corrigido em nível 3 (dicionadas 3 letras do sobrenome)"
    	                         Start-Sleep -Milliseconds 300
    						 }
    						 else
    						 {
    						 	$definidomanual = Read-Host $definidomanual = Read-Host "`n`n`nO usuário $NomeCompletoUsrAtual não possui um sobrenome grande suficiente para definir um e-mail dentro da política, favor insira um endereço de e-mail para $usratual `nO formato para o endereço deve ser: usuario@dominio.com.br`n"
    							Set-Mailbox -Identity $campo.MATRÍCULA -UserPrincipalName $definidomanual -EmailAddresses $definidomanual -EmailAddressPolicyEnabled $false
    				            Write-Host "usuário $usratual foi corrigido manualmente"
    						 }
                            }
                     }
                     else
                     { 
    	                  #adiciona a substring de 2 ultimas letras do ultimo nome do usuário...
    	                  Set-Mailbox -Identity $campo.MATRÍCULA -UserPrincipalName $userprincipalname_2 -EmailAddresses $userprincipalname_2 -EmailAddressPolicyEnabled $false
    	                  Write-Host "usuário $usratual foi corrigido em nível 2 (dicionadas 2 letras do sobrenome)"
    	                  Start-Sleep -Milliseconds 300
    					
                     }
            }
    		else
    		{
    			
    		} 
        }
        else
        {
    		
    		
                Set-Mailbox -Identity $campo.MATRÍCULA -UserPrincipalName $userprincipalname_1
    		    write-host "não foi necessário corrigir o usuário $usratual, apenas adicionado o UPN"
    		    Start-Sleep -Milliseconds 300 
    	
    		
           
        }
    
    
        Write-Host "-----------------------------------------"
    
    }
    
    
    
    Write-Warning "iniciando a função do lync..."
    
    Start-Sleep -Seconds 15
    
    foreach ($campo in $CSV)
    {         
    
        $aduser = Get-ADUser -Identity $campo.MATRÍCULA -Properties *
               
        $sipmail = $aduser.EmailAddress
               
        $sipadd = "sip:" + $sipmail
               
        Enable-CsUser `
        -Identity $campo.MATRÍCULA `
        -RegistrarPool "nomedopool SIP"  `
        -SipAddress $sipadd `
        
        
        
        Start-Sleep -Milliseconds 800
        
    
    }
    
    Write-host -ForegroundColor Green -BackgroundColor Black "Script finalizado, favor verificar a criação dos usuários. 
    Pressione qualquer tecla para finalizar..." 
    
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")


    Heitor Mocelin Ferreira - MCP|MCTS|MCITP|MCSA-2k8/12|MCSE-SrvInfra|MCT Microsoft Premier Support - Latino-Americano.

    terça-feira, 3 de setembro de 2013 19:59
  • Luiz Eduardo,

    Se quiser aproveitar o seu código em VBS você pode adaptar a função abaixo ao seu código

    if UserExiste("Administrator") then
    	wscript.echo "Usuário Exsite"
    else
    	wscript.echo "Usuário NÃO Exsite"
    end if
    
    Function UserExiste(sam)
    	on error resume next
    	Set objConnection = CreateObject("ADODB.Connection") 
    	Set objCommand = CreateObject("ADODB.Command") 
    	objConnection.Provider = "ADsDSOOBject"
    	objConnection.Open "Active Directory Provider"
    	Set objCommand.ActiveConnection = objConnection
    	Set objRootDSE = GetObject("LDAP://RootDSE") 
    	strDNSDomain = objRootDSE.Get("defaultNamingContext") 
    	strBase = "<LDAP://" & strDNSDomain & ">" 
    	strFilter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" & sam & "))" 
    	strAttributes = "distinguishedName,sAMAccountName"
    	strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
    	objCommand.CommandText = strQuery
    	objCommand.Properties("Page Size") = 99999
    	objCommand.Properties("Timeout") = 300
    	objCommand.Properties("Cache Results") = False
    	Set objRecordSet = objCommand.Execute
    	objRecordSet.MoveFirst
    	Do Until objRecordSet.EOF
    		UserExiste = True
    		exit do
    		'objRecordSet.MoveNext
    
    	Loop
    	objConnection.Close
    
    	on error goto 0
    End Function


    Fábio de Paula Junior

    terça-feira, 3 de setembro de 2013 22:19
    Moderador
  • Meu amigo, acho que sua solução vai me ajudar, mas desculpa a minha ignorância, mas realmente não tenho muita experiência com vb, agreguei seu código ao meu script e gerou erro, acho até que fiz errado, como meu script segue acima, vc poderia dizer pra mim como ficaria o script completo, ficaria muito grato.
    quarta-feira, 4 de setembro de 2013 13:11
  • Agradeço a ajuda amigo, também vou analisar e ver se me atende.
    quarta-feira, 4 de setembro de 2013 13:12
  • Teste e me diga se funcionou.

    ' UserSpreadsheet .vbs
    ' Sample VBScript to create User accounts from a spreadsheet
    ' Author Guy Thomas http://computerperformance.co.uk/
    ' Version 4.6 - June 2010
    ' ------------------------------------------------------' 
    Option Explicit
    Dim objRootLDAP, objContainer, objUser, objShell
    Dim objExcel, objSpread, intRow
    Dim strUser, strOU, strSheet
    Dim strCN, strSam, strPWD
    
    ' -----------------------------------------------'
    ' Important change OU= and strSheet to reflect your domain
    ' -----------------------------------------------'
    
    strOU = "OU=ALUNOS,OU=EMPRESA," ' Note the comma
    strSheet = "C:\scripts\usuarios.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) 
       strPWD = Trim(objExcel.Cells(intRow, 3).Value)
    
    if not UserExiste(strSam) then
       
       ' Build the actual User from data in strSheet.
       Set objUser = objContainer.Create("User", "cn=" & strCN)
       objUser.userPrincipalName = strSam
       objUser.sAMAccountName = strSam
       objUser.SetInfo
    
       ' Separate section to enable account with its password
       objUser.userAccountControl = 512
       objUser.pwdLastSet = 0
       objUser.SetPassword strPWD
       objUser.SetInfo
    
    end if
    
    intRow = intRow + 1
    Loop
    objExcel.Quit 
    
    WScript.Quit 
    
    ' End of free example UserSpreadsheet VBScript.
    
    Function UserExiste(sam)
    	on error resume next
    	Set objConnection = CreateObject("ADODB.Connection") 
    	Set objCommand = CreateObject("ADODB.Command") 
    	objConnection.Provider = "ADsDSOOBject"
    	objConnection.Open "Active Directory Provider"
    	Set objCommand.ActiveConnection = objConnection
    	Set objRootDSE = GetObject("LDAP://RootDSE") 
    	strDNSDomain = objRootDSE.Get("defaultNamingContext") 
    	strBase = "<LDAP://" & strDNSDomain & ">" 
    	strFilter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" & sam & "))" 
    	strAttributes = "distinguishedName,sAMAccountName"
    	strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
    	objCommand.CommandText = strQuery
    	objCommand.Properties("Page Size") = 99999
    	objCommand.Properties("Timeout") = 300
    	objCommand.Properties("Cache Results") = False
    	Set objRecordSet = objCommand.Execute
    	objRecordSet.MoveFirst
    	Do Until objRecordSet.EOF
    		UserExiste = True
    		exit do
    		'objRecordSet.MoveNext
    
    	Loop
    	objConnection.Close
    
    	on error goto 0
    End Function


    Fábio de Paula Junior

    quarta-feira, 4 de setembro de 2013 22:07
    Moderador
  • algo errado, pois fui na planilha, coloquei 5 contas para teste onde uma delas eu criei na mão para simular a conta já criada, ao executar o script não da nenhum erro, mas também não cria conta alguma.
    quinta-feira, 5 de setembro de 2013 12:17
  • Envie as linhas da planilha.

    Fábio de Paula Junior


    quinta-feira, 5 de setembro de 2013 21:55
    Moderador
  • primeira, segunda e terceira coluna da planilha seguem abaixo.

    sAMAccountName CN  Password
    1 2 3
    leduardo Luiz Eduardo 12345
    sexta-feira, 6 de setembro de 2013 14:04