Usuário com melhor resposta
Listar usuários de determinado grupo

Pergunta
-
Respostas
-
Descobrir onde estava o erro qnd postei teve uma quebra de linha não especificada na 5º linha de baixo para cima(TOTAL DE "& i &" MEMBROS ENCONTRADOS----"). Já consertei e testei, tenta novamente ai. Abç!
Code Snippet'Log verificação de membros em um grupo local
'Por Leonardo Couto Conrado
'08/07/2008
Dim objDom,objNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")StrComputer = "localhost" 'Computador a ser verificado
StrGroup = "Administradores" ' Verificar membros do Grupo Local Administradores
Local = "c:\" 'Local para salvar o TXT com os membros do grupo especificado
FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup & ".txt"
ActionList = "no"
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
Set objNetwork = CreateObject("WScript.Network")
Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
AdsPathGroup = objGroup.AdsPath
'ColItens.filter = Array("group")
WriteLog now() & " Membros do grupo " & Ucase(StrGroup) & " possuindo o nome único de " & AdsPathGroup
i = 0
For Each objUser In objGroup.Members
i = i + 1
WriteLog i & "- " & Ucase(objUser.name) & " é um " & objUser.class & " e seu nome único é " & objUser.AdsPath
ActionList = "yes"
Next
if ActionList = "yes" then
WriteLog "-------------------------------------FIM--------------------------------TOTAL DE "& i &" MEMBROS ENCONTRADOS----"
end ifFunction WriteLog (Text)
ObjFileAppending.WriteLine Text
End Function- Marcado como Resposta Fábio JrModerator sábado, 3 de dezembro de 2011 20:48
Todas as Respostas
-
Cara, tava com um problema parecido
Utiliza o csvde ou ldif para isto, segue um tutorial para te ajudar http://support.microsoft.com/kb/327620
Se o post foi útil, classifique-o como resposta.
Valeu
-
Pessoal,
Só mais uma dica, vocês podem exportar os usuários dos grupos utilizando o utilitário showmbrs que está disponível no NTReskit ou no site da Microsoft.
Utilização:
showmbrs \\dominio\grupo
Robsom.
-
-
'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos
'Feito por Guina (02\10\2006)
On Error Resume NextDiretorio= "c:\grupos"
grupo= InputBox("Digite o nome do grupo ")
file= grupo & ".txt"
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = oFSO.CreateFolder(Diretorio)
Set Dir=oFSO.GetFolder(Diretorio)Set arqtxt = Dir.CreateTextFile(file, True)
Set rootDSE = GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"Set rs = conn.Execute(LDAPStr)
If rs.RecordCount = 1 Then
Set oGroup = GetObject(rs.Fields(0).Value)
End If
for each strMember in oGroup.memberSpmember = Split(strMember, ",")
member= Spmember(0)
arqtxt.WriteLine Mid (member,4)
NextiGroupCount = 0
For each strMember in oGroup.member
If Len(strMember) = 0 Then
wscript.echo "Grupo sem nenhum membro ou não existente!."
Else
iGroupCount = iGroupCount + 1
End If
Nextarqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount
arqtxt.CloseWScript.echo "pronto!!!"
wscript.quit- Sugerido como Resposta Murilo Assis quinta-feira, 17 de março de 2011 12:02
-
Este também funfa, mas o script de cima está bem legal!!
Boa sorte
Set objNetwork = CreateObject("WScript.Network")
Set objGroupLegis = GetObject _
("LDAP://CN=GR_GLOBAL_MAINTENANCE_TECHNITIAN,OU=GLOBAL,OU=GROUPS,OU=MAINTENANCE,OU=PRD,OU=BR,DC=suneast,DC=com,DC=br")
For each objMember in objGroupLegis.Members
wscript.echo objMember.sAMAccountNameNext
'para gravar em um arquivo use cscritp.exe nomedoscript.vbs > nomedoarquivo.txt
Romeu.
-
Gostaria de saber se tem como fazer isso mas ao invés de pesquisar os grupos do AD ele pesquisar o grupo LOCAL de uma determinada maquina.
Por exemplo, teria como executar esse script no servidor onde ele buscaria TODAS AS MAQUINAS QUE ESTAO NO AD, verificaria o grupo "administradores" ou "adminitrators" (ou qq outro) LOCAL DESSAS MAQUINAS e me gerasse um arquivo com os objetos (usuarios ou grupos) que sao MEMBROS desse grupo?! Preciso fazer isso em uma rede com cerca de 5 mil estacoes.Em todo caso, se eu conseguir rodar INDIVIDUALMENTE um script que capture os menbros de um grupo LOCAL da maquina eu posso rodar ele na REDE via GPO e ao gerar o arquivo ele tem que gerar algo como NOMENETBIOSDAMAQUINA_GRUPO.txt e peço para ele apontar para salvar esse arquivo em um determinado local da rede.
SERIA POSSIVEL?! Me ajudem por favor!!!
Grato.
André Schäffer wrote: 'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos
'Feito por Guina (02\10\2006)
On Error Resume NextDiretorio= "c:\grupos"
grupo= InputBox("Digite o nome do grupo ")
file= grupo & ".txt"
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = oFSO.CreateFolder(Diretorio)
Set Dir=oFSO.GetFolder(Diretorio)Set arqtxt = Dir.CreateTextFile(file, True)
Set rootDSE = GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"Set rs = conn.Execute(LDAPStr)
If rs.RecordCount = 1 Then
Set oGroup = GetObject(rs.Fields(0).Value)
End If
for each strMember in oGroup.memberSpmember = Split(strMember, ",")
member= Spmember(0)
arqtxt.WriteLine Mid (member,4)
NextiGroupCount = 0
For each strMember in oGroup.member
If Len(strMember) = 0 Then
wscript.echo "Grupo sem nenhum membro ou não existente!."
Else
iGroupCount = iGroupCount + 1
End If
Nextarqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount
arqtxt.CloseWScript.echo "pronto!!!"
wscript.quit -
Só colocar o arquivo .VBS em uma pasta compartilhada com permissão a todos usuários e executar no logon de cada usuário. Qualquer dúvida estamos ai.
Code Snippet'Log verificação de membros em um grupo local
'Por Leonardo Couto Conrado
'08/07/2008
Dim objDom,objNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")StrComputer = "localhost" 'Computador a ser verificado
StrGroup = "Administradores" ' Verificar membros do Grupo Local Administradores
Local = "c:\" 'Local para salvar o TXT com os membros do grupo especificado
FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup & ".txt"
ActionList = "no"
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
Set objNetwork = CreateObject("WScript.Network")
Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
AdsPathGroup = objGroup.AdsPath
'ColItens.filter = Array("group")
WriteLog now() & " Membros do grupo " & Ucase(StrGroup) & " possuindo o nome único de " & AdsPathGroup
i = 0
For Each objUser In objGroup.Members
i = i + 1
WriteLog i & "- " & Ucase(objUser.name) & " é um " & objUser.class & " e seu nome único é " & objUser.AdsPath
ActionList = "yes"
Next
if ActionList = "yes" then
WriteLog "-------------------------------------FIM---------------------------------------TOTAL DE "& i &" MEMBROSENCONTRADOS------------"
end ifFunction WriteLog (Text)
ObjFileAppending.WriteLine Text
End Function
att,
Leonardo Couto.
-
Cara, tentei testar aqui na maquina do trabalho (estou aqui até meia noite se puder me add no msn albertsantos22@yahoo.com.br) e copiando e colando no NOTEPAD, salvando ele como VBS (sem tirar os Créditos nem nada) ele me da o seguinte erro:
____________________________________________________
LINE: 17
CHAR: 1
ERROR: YOU WERE NOTE CONNECTED BECAUSE A DUPLICATE NAME EXISTS ON THE NETWORK. GOTO SYSTEM IN CONTROL PANEL TO CHANGE THE COMPUTER NAME AND TRY AGAIN.
CODE: 80070034
SOURCE: (NULL)
____________________________________________________
Sendo que nao existe outra maquina na rede com o mesmo NOME, e tambem testei em uma VM com windows 2000 e em uma com o XP e dá o mesmo erro... e elas estao como WORKGROUP em redes diferentes nao sendo possivel ter outra estacao com o mesmo nome conforme descrito no erro.
Lembrando que como é um teste inicial, salvei o arquivo como TESTE.vbs no meu DESKTOP mesmo, no caso se ele funcionasse ele vai gerar o arquivo TXT na local onde está salvo o SCRIPT?!
Lembrando que como o Windows aqui é em ingles, alterei já o ADMINISTRADORES para ADMINISTRATORS.
Que eu faço agora!!!
Brigadao pela força cara!!!
-
Descobrir onde estava o erro qnd postei teve uma quebra de linha não especificada na 5º linha de baixo para cima(TOTAL DE "& i &" MEMBROS ENCONTRADOS----"). Já consertei e testei, tenta novamente ai. Abç!
Code Snippet'Log verificação de membros em um grupo local
'Por Leonardo Couto Conrado
'08/07/2008
Dim objDom,objNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")StrComputer = "localhost" 'Computador a ser verificado
StrGroup = "Administradores" ' Verificar membros do Grupo Local Administradores
Local = "c:\" 'Local para salvar o TXT com os membros do grupo especificado
FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup & ".txt"
ActionList = "no"
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
Set objNetwork = CreateObject("WScript.Network")
Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
AdsPathGroup = objGroup.AdsPath
'ColItens.filter = Array("group")
WriteLog now() & " Membros do grupo " & Ucase(StrGroup) & " possuindo o nome único de " & AdsPathGroup
i = 0
For Each objUser In objGroup.Members
i = i + 1
WriteLog i & "- " & Ucase(objUser.name) & " é um " & objUser.class & " e seu nome único é " & objUser.AdsPath
ActionList = "yes"
Next
if ActionList = "yes" then
WriteLog "-------------------------------------FIM--------------------------------TOTAL DE "& i &" MEMBROS ENCONTRADOS----"
end ifFunction WriteLog (Text)
ObjFileAppending.WriteLine Text
End Function- Marcado como Resposta Fábio JrModerator sábado, 3 de dezembro de 2011 20:48
-
Obrigado Mais uma vez, pra mim resolveu PERFEITAMENTE conforme minhas necessidades... CADA DETALHE COLOCADO POR MIM FOI FEITO NESSE SCRIPT!!!
PERFEITO!!!!
Eae galera, da pra fechar o POST já?!?!?!
Vamos fechar se atender as necessidades para que as pessoas possam se orientar por eles bele?!
Abraços a todos!!!
-
Caro André
Preciso de uma ajuda sua, estou querendo listar os usuários de um determinado grupo no AD, esse script funciona em parte, ele só relaciona o grupo de dominio local, o grupo de dominio global ele não lista, informa que não existe nenhum usuário dentro do grupo, voçê ou alguém poderia quebrar esse galho para mim???
Caso alguém tenha outra solução para esse problema, me informe, o que não dá é ficar digitando em bloco de notas os membros de um grupo.....
Atenciosamente,
Marcio Sousa
-
Galera,
Efetuei algumas correções e atualizações para atender as minhas necessidades, segue abaixo o script para o caso de alguém com a mesma dificuldade.
'-----------------------------------------------------------------------------------
On Error Resume Next
Diretorio= "c:\"
grupo= InputBox("Digite o nome do grupo ")
file= grupo & ".txt"
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = oFSO.CreateFolder(Diretorio)
Set Dir=oFSO.GetFolder(Diretorio)Set arqtxt = Dir.CreateTextFile(file, True)
Set objNetwork = CreateObject("WScript.Network")
Set objGroupLegis = GetObject _
("LDAP://CN="+grupo+",OU=Users,DC=redes,DC=,DC=com,DC=br")For each objMember in objGroupLegis.Members
arqtxt.WriteLine Mid (objMember.Name,4)Next
arqtxt.Close
WScript.echo "FIM!!!"
wscript.quit'-----------------------------------------------------------------------------------
-
'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos
'Feito por Guina (02\10\2006)
On Error Resume NextDiretorio= "c:\grupos"
grupo= InputBox("Digite o nome do grupo ")
file= grupo & ".txt"
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = oFSO.CreateFolder(Diretorio)
Set Dir=oFSO.GetFolder(Diretorio)Set arqtxt = Dir.CreateTextFile(file, True)
Set rootDSE = GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"Set rs = conn.Execute(LDAPStr)
If rs.RecordCount = 1 Then
Set oGroup = GetObject(rs.Fields(0).Value)
End If
for each strMember in oGroup.memberSpmember = Split(strMember, ",")
member= Spmember(0)
arqtxt.WriteLine Mid (member,4)
NextiGroupCount = 0
For each strMember in oGroup.member
If Len(strMember) = 0 Then
wscript.echo "Grupo sem nenhum membro ou não existente!."
Else
iGroupCount = iGroupCount + 1
End If
Nextarqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount
arqtxt.CloseWScript.echo "pronto!!!"
wscript.quit
Este script funciona perfeitamente, gera a lista de membros de um determinado grupo, sejam usuários, sejam computadores.Porém, necessito de mais um detalhe, o qual tentei alterar o script, mas sem sucesso, que seria a inclusão da OU de cada objeto ao lado do nome.
Por exemplo, hoje ele gera o resultado assim:
PC01
PC02
PC03
A minha necessidade, é de que ele inclua a OU ao lado, como é mostrado o resultado da consulta gráfica no AD:PC01 Nome-AD.local/NomeOU1/NomeOU2
PC02 Nome-AD.local/NomeOU1/NomeOU2
PC03 Nome-AD.local/NomeOU1/NomeOU2Se alguém conseguir alterar o script acima, incluindo este parâmetro, serei grato!
Obrigado!
- Sugerido como Resposta Felipe Camilo Ricardo terça-feira, 30 de junho de 2015 18:37
- Não Sugerido como Resposta Felipe Camilo Ricardo terça-feira, 30 de junho de 2015 18:38
-
Pessoal, sou formado em computação e atualmente trabalho na parte de infra. Ano passado durante a migração do nosso e-mail interno para office 365, foi necessário gerar relatório com todos os grupos e seus respectivos usuários. Foi nessa página que consegui ajuda para resolver essa questão. Utilizando um pouco dos conhecimentos adquiridos na faculdade (não conhecia nada de VB até então), consegui fazer uma adaptação do código do Guina no qual eu fiz alguns ajustes no qual eu quero compartilhar.
Ajustes:
'Permitir a leitura de um arquivo texto com os nomes dos grupos, não sendo necessário a entrada um a um.
'Gerar um arquivo único com todos os grupos (anteriormente gerava um arquivo para cada grupo inserido manualmente um a um.Estrutura de pasta:
Pasta: C:\listar_grupos\
Arquivo com os nomes dos grupos: grupos.txt
Pasta do resultado: c:\listar_grupos\relatorios'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos 'Feito por Guina (02\10\2006) '-------------------------------------- '------------------------- '--Alterações realizadas-- 'Permitir a leitura de um arquivo texto com os nomes dos grupos, não sendo necessário a entrada um a um. 'Gerar um arquivo único com todos os grupos (anteriormente gerava um arquivo para cada grupo inserido manualmente um a um. 'Fonte:http://social.technet.microsoft.com/Forums/de-DE/3a761ed7-80fe-4733-b586-b0d81a26daec/listar-usurios-de-determinado-grupo?forum=scriptadminpt 'Modificado por Felipe Camilo Ricardo (27/02/2014) Const ForReading = 1 'Const Pre = "dsquery user -samid " 'Const Pos = " | dsget user -memberof -expand | dsget group -samid" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("C:\listar_grupos\grupos.txt", 1) Wscript.Echo strContents Do While objFile.AtEndOfStream = False strLine = objFile.ReadLine On Error Resume Next Diretorio= "c:\listar_grupos\relatorios" grupo = strline file= "relatorio-grupos.txt" Set oFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFolder = oFSO.CreateFolder(Diretorio) Set Dir=oFSO.GetFolder(Diretorio) Set arqtxt = Dir.CreateTextFile(file, True) Set rootDSE = GetObject("LDAP://RootDSE") domainContainer = rootDSE.Get("defaultNamingContext") Set conn = CreateObject("ADODB.Connection") conn.Provider = "ADSDSOObject" conn.Open "ADs Provider" LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree" Set rs = conn.Execute(LDAPStr) If rs.RecordCount = 1 Then Set oGroup = GetObject(rs.Fields(0).Value) End If arqtxt.WriteLine(grupo) iGroupCount = 0 for each strMember in oGroup.member Spmember = Split(strMember, ",") member= Spmember(0) arqtxt.WriteLine Mid (member,4) member = "" Next member = "" For each strMember in oGroup.member If Len(strMember) = 0 Then wscript.echo "Grupo sem nenhum membro ou não existente!." Else iGroupCount = iGroupCount + 1 End If Next arqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount arqtxt.WriteLine(Chr(13)) WScript.echo grupo & Chr(13) Loop arqtxt.Close wscript.quit
-
Embora seja uma thread antiga eu vejo um código deste tamanho e não consigo deixar de pensar em otimizar com recursos atuais. Algo simples de se fazer com PowerShell 3.0 e Windows PowerShell Modules for Active Directory:
# Script Requirements: PowerShell 3.0 and Windows PowerShell Modules for Active Directory Import-Module ActiveDirectory $GroupNames = Get-ADObject -Filter "ObjectClass -eq 'group'" -SearchBase "DC=contoso,DC=com" -SearchScope Subtree | %{$_.Name} ForEach ($Group in $GroupNames){ Get-ADGroupMember -Identity $Group | Select @{Name="GroupName";Expression={$Group}},SamAccountName,Name,DistinguishedName | Sort Name | Export-Csv -Path C:\OutPut\Groups.csv -NoTypeInformation -Append }
O resultado será um arquivo C:\OutPut\Groups.csv que pode ser importado no MS Excel contendo o nome do grupo, SAMAccountName, nome do usuário e o DN (DistinghishedName) de cada membro em cada grupo existentes no domínio Contoso.com.