none
Exceção no script RRS feed

  • Pergunta

  • Senhores, tenho o seguinte Script para criar usuarios em massa no DC.

     

    ‘ 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=Temporario ," ‘ Preste atenção na VÍRGULA antes de fechar as ASPAS 
    strSheet = "C:\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 ‘DOLoop’ 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 = 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
    

     

    Gostaria de uma ajuda para colocar uma execção em que se o usuarios já estiver criado no dominio, não parece o script e continue até terminar a execução do mesmo.

    Fico grato pela atenção.


    • Editado Fábio JrModerator quarta-feira, 28 de setembro de 2011 13:52 Erro no nome da Thread
    quarta-feira, 28 de setembro de 2011 12:53

Respostas

  • Teste este

    ' 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, strUPN 
    ' ———————————————–’ 
    ' 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=Temporario ," ' Preste atenção na VÍRGULA antes de fechar as ASPAS 
    strSheet = "C:\scripts\Usuario.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 
    On error resume next
    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)
    	strUPN = Trim(objExcel.Cells(intRow, 6).Value)
    	
    	'On error resume next
    	'Cria o usuário a partir da variável strSheet. 
    	Set objUser = objContainer.Create("User", "cn=" & strCN) 
    	
    	if err.number = 0 then
    		'on error goto 0
    		objUser.sAMAccountName = 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.userPrincipalName = strUPN
    		objUser.SetInfo 
    		
    	else
    		'on error goto 0
    		err.clear
    	end if
    	intRow = intRow + 1
    Loop
    
    objExcel.Quit 
    WScript.Quit 
    ' Fim do script
    
    


    Fábio de Paula Junior
    quarta-feira, 28 de setembro de 2011 18:09
    Moderador

Todas as Respostas

  • Vinicius,

    Você pode alterar a parte do LOOP colocando um tratamento de erro dentro dele:

    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) 
    	
    	On error resume next
    	'Cria o usuário a partir da variável strSheet. 
    	Set objUser = objContainer.Create("User", "cn=" & strCN) 
    	
    	if err.number = 0 then
    		on error goto 0
    		objUser.sAMAccountName = 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 
    		
    	else
    		on error goto 0
    		err.clear
    	end if
    
            intRow = intRow + 1 
    Loop 
    

    Após a tentativa de criar o usuário ele veririfca se existe erro (se o usuário já existe vai dar erro)

    Se não deu erro cria o usuário, se deu erro limpa o Erro e segue para a criação do próximo.

     

     


    Fábio de Paula Junior
    • Editado Fábio JrModerator quarta-feira, 28 de setembro de 2011 13:17 Alterada a linha (intRow = intRow + 1 ) de posição
    quarta-feira, 28 de setembro de 2011 13:00
    Moderador
  • Fabio, bom dia!

    Cara, deu certo em partes ele criou somente 75 usuarios e deu o erro dizendo que o objeto já está criado. Outra coisa ao criar os usuarios não está preenchendo o "campo nome de logon de usuarios". Pode me ajudar ?

    quarta-feira, 28 de setembro de 2011 13:42
  • Vinicius,

    1) Reparou que eu fiz uma edição no script anterior (linha:  intRow = intRow + 1)?

     

    2) Este erro de não preencher o campo nome de logon ocorria antes da alteração que eu sugeri?

     

    3) Poderia colar aqui pelo menos as 3 primeiras linhas da planilha?

     


    Fábio de Paula Junior

    quarta-feira, 28 de setembro de 2011 13:52
    Moderador
  • Fabio,

    Sim eu vi o a edição tanto que substituí com a sua edição a parte do script. Sim este erro já acontecia, será que está faltando algum campo na planilha Excel ou no script para que ele preencha esse campo.

    quarta-feira, 28 de setembro de 2011 13:56
  • Fabio, consegui resolver o problema de preenchimento do campo logon de usuario. Somente agora está occorend o erro de objeto já criado. O script ficou assim:

    ' 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, strUPN 
    ' ———————————————–’ 
    ' 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=Temporario ," ' Preste atenção na VÍRGULA antes de fechar as ASPAS 
    strSheet = "C:\scripts\Usuario.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)
    	strUPN = Trim(objExcel.Cells(intRow, 6).Value)
    	
    	On error resume next
    	'Cria o usuário a partir da variável strSheet. 
    	Set objUser = objContainer.Create("User", "cn=" & strCN) 
    	
    	if err.number = 0 then
    		on error goto 0
    		objUser.sAMAccountName = 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.userPrincipalName = strUPN
    		objUser.SetInfo 
    		intRow = intRow + 1 
    	else
    		on error goto 0
    		err.clear
    	end if
    	intRow = intRow + 1
    Loop
     
    objExcel.Quit 
    WScript.Quit 
    ' Fim do script


    quarta-feira, 28 de setembro de 2011 14:26
  • Cole a mensagem de erro aqui também, eu não tenho sua planilha não tem como reproduzir o erro.
    Fábio de Paula Junior
    quarta-feira, 28 de setembro de 2011 15:04
    Moderador


  • Segue a imagem do erro
    quarta-feira, 28 de setembro de 2011 16:47
  • Teste este

    ' 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, strUPN 
    ' ———————————————–’ 
    ' 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=Temporario ," ' Preste atenção na VÍRGULA antes de fechar as ASPAS 
    strSheet = "C:\scripts\Usuario.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 
    On error resume next
    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)
    	strUPN = Trim(objExcel.Cells(intRow, 6).Value)
    	
    	'On error resume next
    	'Cria o usuário a partir da variável strSheet. 
    	Set objUser = objContainer.Create("User", "cn=" & strCN) 
    	
    	if err.number = 0 then
    		'on error goto 0
    		objUser.sAMAccountName = 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.userPrincipalName = strUPN
    		objUser.SetInfo 
    		
    	else
    		'on error goto 0
    		err.clear
    	end if
    	intRow = intRow + 1
    Loop
    
    objExcel.Quit 
    WScript.Quit 
    ' Fim do script
    
    


    Fábio de Paula Junior
    quarta-feira, 28 de setembro de 2011 18:09
    Moderador
  • Vinicius,

    Testou o script? Resolveu?


    Fábio de Paula Junior
    segunda-feira, 3 de outubro de 2011 11:25
    Moderador