none
Script para desabilitar usuarios de um arquivo .cvs ou .xls RRS feed

  • Pergunta

  • Amigos preciso de uma ajuda !

    .

    Estou precisando desabilitar muitos usuarios do Active Directory atraves de um arquivo .xls, neste arquivo contem os ID dos usuarios, nele nao esta descrito em qual OU estao os usuarios; Esse script precisa ler o arquivo e sair desabilitando os usuarios.

     

    Atenciosamente

     

    Machado

    segunda-feira, 26 de maio de 2008 11:35

Respostas

  • Este script lê o arquivo users.txt localizado na mesma pasta do .VBS, cada linha do users.txt é um login de usuário, é melhor usar o txt porque o EXCEL você não vai ter em todo lugar.

    'Configurações
    Const strARQUIVO = "users.TXT"
    
    
    'Contantes
    Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
    Const ADS_UF_ACCOUNTDISABLE = 2
    Const ForReading = 1
    
    'Objetos
    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Resultado.txt", True)
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    
    'ARQUIVO TEXTO
    Set objFile = FileSystem.OpenTextFile(strARQUIVO, ForReading)
    
     
    DomainString = WSHNetwork.UserDomain
    
    on error resume next
    
    Do Until objFile.AtEndOfStream
    	UserString = objFile.ReadLine
    	
    	'wscript.echo UserString
    
    
    	strUserLDAP = BuscaOU(UserString)
    	
    	if Len(strUserLDAP) = 0 Then
    		OutPutFile.WriteLine UserString & " - " & "Usuário não encontrado." & VBCRLF
    	End if
    
    	set objUser = GetObject("LDAP://" & strUserLDAP )
    	intUAC = objUser.Get("userAccountControl")
    	objUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE
    	objUser.SetInfo
    Loop
    
    
    
    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
    	   BuscaOU = rs(0)
    	End if
    
    	rs.close
    	cn.close
    
    End Function


    Fábio de Paula Junior


    sábado, 9 de junho de 2012 21:39
    Moderador

Todas as Respostas

  • Este script lê o arquivo users.txt localizado na mesma pasta do .VBS, cada linha do users.txt é um login de usuário, é melhor usar o txt porque o EXCEL você não vai ter em todo lugar.

    'Configurações
    Const strARQUIVO = "users.TXT"
    
    
    'Contantes
    Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
    Const ADS_UF_ACCOUNTDISABLE = 2
    Const ForReading = 1
    
    'Objetos
    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Resultado.txt", True)
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    
    'ARQUIVO TEXTO
    Set objFile = FileSystem.OpenTextFile(strARQUIVO, ForReading)
    
     
    DomainString = WSHNetwork.UserDomain
    
    on error resume next
    
    Do Until objFile.AtEndOfStream
    	UserString = objFile.ReadLine
    	
    	'wscript.echo UserString
    
    
    	strUserLDAP = BuscaOU(UserString)
    	
    	if Len(strUserLDAP) = 0 Then
    		OutPutFile.WriteLine UserString & " - " & "Usuário não encontrado." & VBCRLF
    	End if
    
    	set objUser = GetObject("LDAP://" & strUserLDAP )
    	intUAC = objUser.Get("userAccountControl")
    	objUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE
    	objUser.SetInfo
    Loop
    
    
    
    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
    	   BuscaOU = rs(0)
    	End if
    
    	rs.close
    	cn.close
    
    End Function


    Fábio de Paula Junior


    sábado, 9 de junho de 2012 21:39
    Moderador
  • Peço Desculpas.

    Mandei o Script Errado e quando fui excluir a Resposta Exclui a Tread.

    Grato Fábio por Restaurar a Tread.
    Estou tentando localizar o Script correto.

    * 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 *

    sábado, 9 de junho de 2012 23:17
    Moderador