Usuário com melhor resposta
Como exportar usuários de um grupo do Active Directory que possui mais de 1500 contas?

Pergunta
-
Tenho um grupo no Active Directory que possui 1605 usuários, como eu posso exportá-los para um arquivo texto, já que o script (abaixo) que estou utilizando limita em 1500 a quantidade de usuários?
On Error Resume Next
Set objGroup = GetObject _
("LDAP://cn=Scientists,ou=R&D,dc=NA,dc=fabrikam,dc=com")
objGroup.GetInfo
arrMemberOf = objGroup.GetEx("member")
WScript.Echo "Members:"
For Each strMember in arrMemberOf
WScript.echo strMember
NextTeria uma forma de fazer esta tarefa com uma ADODB “Active Directory Provider” que retornaria o atributo “sAMAccountName” dos usuários pertencentes a este grupo?
Respostas
-
Ah, tem mais: na interface gráfica ele exibe a string de consulta...
[]s,
Vinicius Canto
MVP Visual Developer - Scripting
Bach. Ciencias da Computação - USP São Carlos
Blog sobre Scripting: http://viniciuscanto.blogspot.com
- Marcado como Resposta Wagner dos Santos VasconcellosModerator domingo, 3 de junho de 2012 13:26
-
pra incrementar mais a solução
Usem uma bat com a seguinte linha
cscript nomedoarquivo.vbs > oquequiser.txt
Abraços e boas consultas!
- Marcado como Resposta Wagner dos Santos VasconcellosModerator domingo, 3 de junho de 2012 13:26
Todas as Respostas
-
Oi Alex, tudo bem?
Experimente usar o script abaixo:
Se este post te ajudou não esqueça de classifica-lo como útil
Abraço e boa sorte
'==========================================================================
'
' NAME: ListLargeGroupMembers.vbs
'
' AUTHOR: wilson Sekiguti
' DATE : 19/10/2006
'
' COMMENT: Altere a constante confile para o nome de arquivo desejado
' Altere a constante congroup para o nome do grupo a ser pesquisado
'
'==========================================================================
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const confile = "c:\membros.csv"
Const conGroup = "cn=Scientists,ou=R&D,dc=NA,dc=fabrikam,dc=com"Set oCont = GetObject("GC:")
For Each oGC In oCont
strADsPath = oGC.ADsPath
NextSet oConnection = CreateObject("ADODB.Connection")
Set oRecordset = CreateObject("ADODB.Recordset")
oConnection.Provider = "ADsDSOObject"Set ofs = CreateObject("Scripting.FileSystemObject")
Set Outfile = ofs.openTextFile(confile, ForWriting,True )oConnection.Open "ADs Provider"
strQuery = "<" & strADsPath & ">;(&(objectClass=user)(objectCategory=person);userPrincipalName,samaccountname,memberof;subtree"
Set oRecordset = oConnection.Execute(strQuery)
While Not oRecordset.EOF
on error resume next
if instr(oRecordset.Fields("memberof"),conGroup) then
outfile.writeline oRecordset.Fields("samaccountname")
end if
oRecordset.MoveNext
Wend
outfile.close
Set ofs = nothing
Set oCont = Nothing
Set oGC = Nothing
Set oRecordset = Nothing
Set oConnection = Nothing -
Olá Wilson, obrigado pela dica, porém o script ListLargeGroupMembers.vbs retornou o erro (abaixo) independente do grupo:
" ListLargeGroupMembers.vbs(31, 1) Provider: Ocorreram um ou mais erros durante o processamento do comando. "
é justamente a linha que executa a query.
Notei que você utiliza como moniker o Global Catalog , se eu conheço o object do grupo ("constate conGroup"), não seria melhor utilizar o moniker LDAP.
Obrigado!
-
Oi Alex.
O erro na linha da consulta pode estar ocorrendo porque o comando é muito longo e foi dividido em duas linhas.
Eu inverti a lógica da consulta. Ao inves de pegar o grupo e listar todos os usuários que fazem parte (o que está causando o erro), eu estou pegando todos os usuários e verificando se entre os grupos que eles fazem parte está o grupo desejado.
[]'s
-
Boa tarde Wilson, no meu caso o comando não está dividido em duas linhas, deve ser por outro motivo. Será que com esta lógica não iremos ter problemas, pois serão lidos os grupos que cada usuário do domínio pertence e checado se algum é igual ao que nós estamos querendo. Imagine isto para uma grande quantidade de usuários com cada um conectado em no mínimo 5 grupos do domínio.
-
Pessoal, numa boa... sei que é meio estranho dizer isso num fórum de Scripting (ainda mais sendo MVP nessa categoria) mas... não seria melhor usar a interface gráfica, criar uma consulta no Active Directory Users and Computers e exportar pra um CSV? Fica bem mais fácil tratar o arquivo depois...
[]s,
Vinicius Canto
MVP Visual Developer - Scripting
Bach. Ciencias da Computação - USP São Carlos
Blog sobre Scripting: http://viniciuscanto.blogspot.com
-
Ah, tem mais: na interface gráfica ele exibe a string de consulta...
[]s,
Vinicius Canto
MVP Visual Developer - Scripting
Bach. Ciencias da Computação - USP São Carlos
Blog sobre Scripting: http://viniciuscanto.blogspot.com
- Marcado como Resposta Wagner dos Santos VasconcellosModerator domingo, 3 de junho de 2012 13:26
-
-
Bom dia, realizei a consulta gráficamente e depois transferi para o script conforme abaixo :
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select sAMAccountName from 'LDAP://DC=exemplo,DC=com' " _
& "Where objectClass='User' AND memberof='CN=GRUPO,OU=EXEMPLO,DC=exemplo,DC=com'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo objRecordSet.Fields("sAMAccountName").Value
objRecordSet.MoveNext
Loop
Valeu pela ajuda galera !
-
Sorry... acho que cheguei atrasado =)
A parte boa é que o problema foi resolvido.
Espero ter ajudado,
--
Vinicius Canto <scripterbratgmaildotcom>
MVP Visual Developer - Scripting
MCP Windows 2000 Server, Windows XP e SQL Server 2000
Blog sobre Scripting: http://viniciuscanto.blogspot.com -
pra incrementar mais a solução
Usem uma bat com a seguinte linha
cscript nomedoarquivo.vbs > oquequiser.txt
Abraços e boas consultas!
- Marcado como Resposta Wagner dos Santos VasconcellosModerator domingo, 3 de junho de 2012 13:26